170 lines
10 KiB
C#
170 lines
10 KiB
C#
![]() |
using MareSynchronos.FileCache;
|
|||
|
using MareSynchronos.MareConfiguration;
|
|||
|
using MareSynchronos.PlayerData.Pairs;
|
|||
|
using MareSynchronos.PlayerData.Services;
|
|||
|
using MareSynchronos.Services;
|
|||
|
using MareSynchronos.Services.Mediator;
|
|||
|
using MareSynchronos.Services.ServerConfiguration;
|
|||
|
using Microsoft.Extensions.DependencyInjection;
|
|||
|
using Microsoft.Extensions.Hosting;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using System.Reflection;
|
|||
|
|
|||
|
namespace MareSynchronos;
|
|||
|
|
|||
|
#pragma warning disable S125 // Sections of code should not be commented out
|
|||
|
/*
|
|||
|
(..,,...,,,,,+/, ,,.....,,+
|
|||
|
..,,+++/((###%%%&&%%#(+,,.,,,+++,,,,//,,#&@@@@%+.
|
|||
|
...+//////////(/,,,,++,.,(###((//////////,.. .,#@@%/./
|
|||
|
,..+/////////+///,.,. ,&@@@@,,/////////////+,.. ,(##+,.
|
|||
|
,,.+//////////++++++.. ./#%#,+/////////////+,....,/((,..,
|
|||
|
+..////////////+++++++... .../##(,,////////////////++,,,+/(((+,
|
|||
|
+,.+//////////////+++++++,.,,,/(((+.,////////////////////////((((#/,,
|
|||
|
/+.+//////////++++/++++++++++,,...,++///////////////////////////((((##,
|
|||
|
/,.////////+++++++++++++++++++++////////+++//////++/+++++//////////((((#(+,
|
|||
|
/+.+////////+++++++++++++++++++++++++++++++++++++++++++++++++++++/////((((##+
|
|||
|
+,.///////////////+++++++++++++++++++++++++++++++++++++++++++++++++++///((((%/
|
|||
|
/.,/////////////////+++++++++++++++++++++++++++++++++++++++++++++++++++///+/(#+
|
|||
|
+,./////////////////+++++++++++++++++++++++++++++++++++++++++++++++,,+++++///((,
|
|||
|
...////////++/++++++++++++++++++++++++,,++++++++++++++++++++++++++++++++++++//(,,
|
|||
|
..//+,+///++++++++++++++++++,,,,+++,,,,,,,,,,,,++++++++,,+++++++++++++++++++//,,+
|
|||
|
..,++,.++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,++++++++,,,,,,,,,,++++++++++...
|
|||
|
..+++,.+++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++,..,.
|
|||
|
..,++++,,+++++++++++,+,,,,,,,,,,..,+++++++++,,,,,,.....................,//+,+
|
|||
|
....,+++++,.,+++++++++++,,,,,,,,.+///(((((((((((((///////////////////////(((+,,,
|
|||
|
.....,++++++++++..,+++++++++++,,.,,,.////////(((((((((((((((////////////////////+,,/
|
|||
|
.....,++++++++++++,..,,+++++++++,,.,../////////////////((((((((((//////////////////,,+
|
|||
|
...,,+++++++++++++,.,,.,,,+++++++++,.,/////////////////(((//++++++++++++++//+++++++++/,,
|
|||
|
....,++++++++++++++,.,++.,++++++++++++.,+////////////////////+++++++++++++++++++++++++///,,..
|
|||
|
...,++++++++++++++++..+++..+++++++++++++.,//////////////////////////++++++++++++///////++++......
|
|||
|
...++++++++++++++++++..++++.,++,++++++++++.+///////////////////////////////////////////++++++..,,,..
|
|||
|
...+++++++++++++++++++..+++++..,+,,+++++++++.+//////////////////////////////////////////+++++++...,,,,..
|
|||
|
..++++++++++++++++++++..++++++..,+,,+++++++++.+//////////////////////////////////////++++++++++,....,,,,..
|
|||
|
...+++//(//////+++++++++..++++++,.,+++++++++++++,..,....,,,+++///////////////////////++++++++++++..,,,,,,,,...
|
|||
|
..,++/(((((//////+++++++,.,++++++,,.,,,+++++++++++++++++++++++,.++////////////////////+++++++++++.....,,,,,,,...
|
|||
|
..,//#(((((///////+++++++..++++++++++,...,++,++++++++++++++++,...+++/////////////////////+,,,+++... ....,,,,,,...
|
|||
|
...+//(((((//////////++++++..+++++++++++++++,......,,,,++++++,,,..+++////////////////////////+,.... ...,,,,,,,...
|
|||
|
..,//((((////////////++++++..++++++/+++++++++++++,,...,,........,+/+//////////////////////((((/+,.. ....,.,,,,..
|
|||
|
...+/////////////////////+++..++++++/+///+++++++++++++++++++++///+/+////////////////////////(((((/+... .......,,...
|
|||
|
..++////+++//////////////++++.+++++++++///////++++++++////////////////////////////////////+++/(((((/+.. .....,,...
|
|||
|
.,++++++++///////////////++++..++++//////////////////////////////////////////////////////++++++/((((++.. ........
|
|||
|
.+++++++++////////////////++++,.+++/////////////////////////////////////////////////////+++++++++/((/++..
|
|||
|
.,++++++++//////////////////++++,.+++//////////////////////////////////////////////////+++++++++++++//+++..
|
|||
|
.++++++++//////////////////////+/,.,+++////((((////////////////////////////////////////++++++++++++++++++...
|
|||
|
.++++++++///////////////////////+++..++++//((((((((///////////////////////////////////++++++++++++++++++++ .
|
|||
|
.++++++///////////////////////////++,.,+++++/(((((((((/////////////////////////////+++++++++++++++++++++++,..
|
|||
|
.++++++////////////////////////////+++,.,+++++++/((((((((//////////////////////////++++++++++++++++++++++++..
|
|||
|
.+++++++///////////////////++////////++++,.,+++++++++///////////+////////////////+++++++++++++++++++++++++,..
|
|||
|
..++++++++++//////////////////////+++++++..+...,+++++++++++++++/++++++++++++++++++++++++++++++++++++++++++,...
|
|||
|
..++++++++++++///////////////+++++++,...,,,,,.,....,,,,+++++++++++++++++++++++++++++++++++++++++++++++,,,,...
|
|||
|
...++++++++++++++++++++++++++,,,,...,,,,,,,,,..,,++,,,.,,,,,,,,,,,,,,,,,,+++++++++++++++++++++++++,,,,,,,,..
|
|||
|
...+++++++++++++++,,,,,,,,....,,,,,,,,,,,,,,,..,,++++++,,,,,,,,,,,,,,,,+++++++++++++++++++++++++,,,,,,,,,..
|
|||
|
...++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...,++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,...
|
|||
|
,....,++++++++++++++,,,+++++++,,,,,,,,,,,,,,,,,.,++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,..
|
|||
|
|
|||
|
*/
|
|||
|
#pragma warning restore S125 // Sections of code should not be commented out
|
|||
|
|
|||
|
public class MarePlugin : MediatorSubscriberBase, IHostedService
|
|||
|
{
|
|||
|
private readonly DalamudUtilService _dalamudUtil;
|
|||
|
private readonly MareConfigService _mareConfigService;
|
|||
|
private readonly ServerConfigurationManager _serverConfigurationManager;
|
|||
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
|||
|
private IServiceScope? _runtimeServiceScope;
|
|||
|
private Task? _launchTask = null;
|
|||
|
|
|||
|
public MarePlugin(ILogger<MarePlugin> logger, MareConfigService mareConfigService,
|
|||
|
ServerConfigurationManager serverConfigurationManager,
|
|||
|
DalamudUtilService dalamudUtil,
|
|||
|
IServiceScopeFactory serviceScopeFactory, MareMediator mediator) : base(logger, mediator)
|
|||
|
{
|
|||
|
_mareConfigService = mareConfigService;
|
|||
|
_serverConfigurationManager = serverConfigurationManager;
|
|||
|
_dalamudUtil = dalamudUtil;
|
|||
|
_serviceScopeFactory = serviceScopeFactory;
|
|||
|
}
|
|||
|
|
|||
|
public Task StartAsync(CancellationToken cancellationToken)
|
|||
|
{
|
|||
|
var version = Assembly.GetExecutingAssembly().GetName().Version!;
|
|||
|
Logger.LogInformation("Launching {name} {major}.{minor}.{build}.{rev}", "Elezen Sync", version.Major, version.Minor, version.Build, version.Revision);
|
|||
|
Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(MarePlugin), Services.Events.EventSeverity.Informational,
|
|||
|
$"Starting Elezen Sync {version.Major}.{version.Minor}.{version.Build}.{version.Revision}")));
|
|||
|
|
|||
|
Mediator.Subscribe<SwitchToMainUiMessage>(this, (msg) => { if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager); });
|
|||
|
Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
|
|||
|
Mediator.Subscribe<DalamudLogoutMessage>(this, (_) => DalamudUtilOnLogOut());
|
|||
|
|
|||
|
Mediator.StartQueueProcessing();
|
|||
|
|
|||
|
return Task.CompletedTask;
|
|||
|
}
|
|||
|
|
|||
|
public Task StopAsync(CancellationToken cancellationToken)
|
|||
|
{
|
|||
|
UnsubscribeAll();
|
|||
|
|
|||
|
DalamudUtilOnLogOut();
|
|||
|
|
|||
|
Logger.LogDebug("Halting MarePlugin");
|
|||
|
|
|||
|
return Task.CompletedTask;
|
|||
|
}
|
|||
|
|
|||
|
private void DalamudUtilOnLogIn()
|
|||
|
{
|
|||
|
Logger?.LogDebug("Client login");
|
|||
|
if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager);
|
|||
|
}
|
|||
|
|
|||
|
private void DalamudUtilOnLogOut()
|
|||
|
{
|
|||
|
Logger?.LogDebug("Client logout");
|
|||
|
|
|||
|
_runtimeServiceScope?.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
private async Task WaitForPlayerAndLaunchCharacterManager()
|
|||
|
{
|
|||
|
while (!await _dalamudUtil.GetIsPlayerPresentAsync().ConfigureAwait(false))
|
|||
|
{
|
|||
|
await Task.Delay(100).ConfigureAwait(false);
|
|||
|
}
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
Logger?.LogDebug("Launching Managers");
|
|||
|
|
|||
|
_runtimeServiceScope?.Dispose();
|
|||
|
_runtimeServiceScope = _serviceScopeFactory.CreateScope();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<UiService>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<CommandManagerService>();
|
|||
|
if (!_mareConfigService.Current.HasValidSetup() || !_serverConfigurationManager.HasValidConfig())
|
|||
|
{
|
|||
|
Mediator.Publish(new SwitchToIntroUiMessage());
|
|||
|
return;
|
|||
|
}
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<CacheCreationService>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<TransientResourceManager>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<OnlinePlayerManager>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<NotificationService>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<ChatService>();
|
|||
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<GuiHookService>();
|
|||
|
|
|||
|
#if !DEBUG
|
|||
|
if (_mareConfigService.Current.LogLevel != LogLevel.Information)
|
|||
|
{
|
|||
|
Mediator.Publish(new NotificationMessage("Abnormal Log Level",
|
|||
|
$"Your log level is set to '{_mareConfigService.Current.LogLevel}' which is not recommended for normal usage. Set it to '{LogLevel.Information}' in \"Elezen Settings -> Debug\" unless instructed otherwise.",
|
|||
|
MareConfiguration.Models.NotificationType.Error, TimeSpan.FromSeconds(15000)));
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Logger?.LogCritical(ex, "Error during launch of managers");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|