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