166 lines
9.4 KiB
C#
166 lines
9.4 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}", "Namazu Sync", version.Major, version.Minor, version.Build);
|
|
Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(MarePlugin), Services.Events.EventSeverity.Informational,
|
|
$"Starting Namazu Sync {version.Major}.{version.Minor}.{version.Build}")));
|
|
|
|
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 NamazuPlugin");
|
|
|
|
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<VisibleUserDataDistributor>();
|
|
_runtimeServiceScope.ServiceProvider.GetRequiredService<NotificationService>();
|
|
|
|
#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 \"Namazu Settings -> Debug\" unless instructed otherwise.",
|
|
MareConfiguration.Models.NotificationType.Error, TimeSpan.FromSeconds(15000)));
|
|
}
|
|
#endif
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger?.LogCritical(ex, "Error during launch of managers");
|
|
}
|
|
}
|
|
} |