add ipc
move ipcprovider to ipc namespace
This commit is contained in:
79
MareSynchronos/Interop/Ipc/IpcProvider.cs
Normal file
79
MareSynchronos/Interop/Ipc/IpcProvider.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user