move ipcprovider to ipc namespace
This commit is contained in:
rootdarkarchon
2024-01-21 11:17:42 +01:00
committed by Loporrit
parent 3b4efc77a2
commit da10895987
2 changed files with 83 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
using MareSynchronos.PlayerData.Export;
using MareSynchronos.Services;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace MareSynchronos.Interop.Ipc;
public class IpcProvider : IHostedService
{
private readonly ILogger<IpcProvider> _logger;
private readonly IDalamudPluginInterface _pi;
private readonly MareCharaFileManager _mareCharaFileManager;
private readonly DalamudUtilService _dalamudUtil;
private ICallGateProvider<string, IGameObject, bool>? _loadFileProvider;
private ICallGateProvider<string, IGameObject, Task<bool>>? _loadFileAsyncProvider;
public IpcProvider(ILogger<IpcProvider> logger, IDalamudPluginInterface pi,
MareCharaFileManager mareCharaFileManager, DalamudUtilService dalamudUtil)
{
_logger = logger;
_pi = pi;
_mareCharaFileManager = mareCharaFileManager;
_dalamudUtil = dalamudUtil;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogDebug("Starting IpcProvider Service");
_loadFileProvider = _pi.GetIpcProvider<string, IGameObject, bool>("MareSynchronos.LoadMcdf");
_loadFileProvider.RegisterFunc(LoadMcdf);
_loadFileAsyncProvider = _pi.GetIpcProvider<string, IGameObject, Task<bool>>("MareSynchronos.LoadMcdfAsync");
_loadFileAsyncProvider.RegisterFunc(LoadMcdfAsync);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogDebug("Stopping IpcProvider Service");
_loadFileProvider?.UnregisterFunc();
_loadFileAsyncProvider?.UnregisterFunc();
return Task.CompletedTask;
}
private async Task<bool> LoadMcdfAsync(string path, IGameObject target)
{
if (_mareCharaFileManager.CurrentlyWorking || !_dalamudUtil.IsInGpose)
return false;
await ApplyFileAsync(path, target).ConfigureAwait(false);
return true;
}
private bool LoadMcdf(string path, IGameObject target)
{
if (_mareCharaFileManager.CurrentlyWorking || !_dalamudUtil.IsInGpose)
return false;
_ = Task.Run(async () => await ApplyFileAsync(path, target).ConfigureAwait(false)).ConfigureAwait(false);
return true;
}
private async Task ApplyFileAsync(string path, IGameObject target)
{
try
{
var expectedLength = _mareCharaFileManager.LoadMareCharaFile(path);
await _mareCharaFileManager.ApplyMareCharaFile(target, expectedLength).ConfigureAwait(false);
}
finally
{
_mareCharaFileManager.ClearMareCharaFile();
}
}
}