forked from Eauldane/SnowcloakClient
Initial
This commit is contained in:
170
MareSynchronos/MarePlugin.cs
Normal file
170
MareSynchronos/MarePlugin.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user