A bit of work on new IPC
This commit is contained in:
@@ -24,7 +24,7 @@ using CustomizePlus.GameData.Extensions;
|
||||
|
||||
namespace CustomizePlus.Api.Compatibility;
|
||||
|
||||
public class CustomizePlusIpc : IDisposable
|
||||
public class CustomizePlusLegacyIpc : IDisposable
|
||||
{
|
||||
private readonly IObjectTable _objectTable;
|
||||
private readonly DalamudPluginInterface _pluginInterface;
|
||||
@@ -52,7 +52,7 @@ public class CustomizePlusIpc : IDisposable
|
||||
internal ICallGateProvider<Character?, string?>? ProviderGetProfileFromCharacter;
|
||||
internal ICallGateProvider<(int, int)>? ProviderGetApiVersion;
|
||||
|
||||
public CustomizePlusIpc(
|
||||
public CustomizePlusLegacyIpc(
|
||||
IObjectTable objectTable,
|
||||
DalamudPluginInterface pluginInterface,
|
||||
Logger logger,
|
||||
61
CustomizePlus/Api/CustomizePlusIpc.General.cs
Normal file
61
CustomizePlus/Api/CustomizePlusIpc.General.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using Dalamud.Plugin.Ipc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static Penumbra.Api.Ipc;
|
||||
|
||||
namespace CustomizePlus.Api;
|
||||
|
||||
//I'm not a big fan of having functions and variables/properties
|
||||
//grouped up like that but it makes sense here
|
||||
|
||||
public partial class CustomizePlusIpc : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// When there are breaking changes the first number is bumped up and second one is reset.
|
||||
/// When there are non-breaking changes only second number is bumped up.
|
||||
/// In general clients should not try to use IPC if they encounter unexpected Breaking version.
|
||||
/// </summary>
|
||||
private readonly (int Breaking, int Feature) _apiVersion = (4, 0);
|
||||
private const string _providerGetApiVersionLabel = $"CustomizePlus.General.{nameof(GetApiVersion)}";
|
||||
private ICallGateProvider<(int, int)>? _providerGetApiVersion;
|
||||
|
||||
private (int, int) GetApiVersion()
|
||||
{
|
||||
return _apiVersion;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This indicates if Customize+ is in valid state and can accept IPC requests.
|
||||
/// This only indicates that no fatal errors occured in Customize+.
|
||||
/// This will still be true if, for example, user turns off Customize+ in its settings.
|
||||
/// </summary>
|
||||
private const string _providerIsValidLabel = $"CustomizePlus.General.{nameof(IsValid)}";
|
||||
private ICallGateProvider<bool>? _providerIsValid;
|
||||
|
||||
private bool IsValid()
|
||||
{
|
||||
return !IPCFailed &&
|
||||
!_hookingService.RenderHookFailed &&
|
||||
!_hookingService.MovementHookFailed;
|
||||
}
|
||||
|
||||
private void InitializeGeneralProviders()
|
||||
{
|
||||
_logger.Debug("Initializing General Customize+ IPC providers.");
|
||||
|
||||
_providerGetApiVersion = _pluginInterface.GetIpcProvider<(int, int)>(_providerGetApiVersionLabel);
|
||||
_providerGetApiVersion.RegisterFunc(GetApiVersion);
|
||||
|
||||
_providerIsValid = _pluginInterface.GetIpcProvider<bool>(_providerIsValidLabel);
|
||||
_providerIsValid.RegisterFunc(IsValid);
|
||||
}
|
||||
|
||||
private void DisposeGeneralProviders()
|
||||
{
|
||||
_logger.Debug("Disposing General Customize+ IPC providers.");
|
||||
_providerGetApiVersion?.UnregisterFunc();
|
||||
}
|
||||
}
|
||||
12
CustomizePlus/Api/CustomizePlusIpc.Profile.cs
Normal file
12
CustomizePlus/Api/CustomizePlusIpc.Profile.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CustomizePlus.Api;
|
||||
|
||||
public partial class CustomizePlusIpc : IDisposable
|
||||
{
|
||||
|
||||
}
|
||||
56
CustomizePlus/Api/CustomizePlusIpc.cs
Normal file
56
CustomizePlus/Api/CustomizePlusIpc.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using CustomizePlus.Core.Services;
|
||||
using Dalamud.Plugin;
|
||||
using OtterGui.Log;
|
||||
using System;
|
||||
|
||||
namespace CustomizePlus.Api;
|
||||
|
||||
public partial class CustomizePlusIpc : IDisposable
|
||||
{
|
||||
private readonly DalamudPluginInterface _pluginInterface;
|
||||
private readonly Logger _logger;
|
||||
private readonly HookingService _hookingService;
|
||||
|
||||
/// <summary>
|
||||
/// Shows if IPC failed to initialize or any other unrecoverable fatal error occured.
|
||||
/// </summary>
|
||||
public bool IPCFailed { get; private set; }
|
||||
|
||||
public CustomizePlusIpc(
|
||||
DalamudPluginInterface pluginInterface,
|
||||
Logger logger,
|
||||
HookingService hookingService)
|
||||
{
|
||||
_pluginInterface = pluginInterface;
|
||||
_logger = logger;
|
||||
_hookingService = hookingService;
|
||||
|
||||
InitializeProviders();
|
||||
}
|
||||
|
||||
private void InitializeProviders()
|
||||
{
|
||||
try
|
||||
{
|
||||
InitializeGeneralProviders();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
_logger.Fatal($"Fatal error while initializing Customize+ IPC: {ex}");
|
||||
|
||||
IPCFailed = true;
|
||||
|
||||
DisposeProviders();
|
||||
}
|
||||
}
|
||||
|
||||
private void DisposeProviders()
|
||||
{
|
||||
DisposeGeneralProviders();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
DisposeProviders();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user