84 lines
2.4 KiB
C#
84 lines
2.4 KiB
C#
using Dalamud.Plugin;
|
|
using Dalamud.Plugin.Ipc;
|
|
using MareSynchronos.Services;
|
|
using MareSynchronos.Services.Mediator;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace MareSynchronos.Interop.Ipc;
|
|
|
|
public sealed class IpcCallerOtherSync : DisposableMediatorSubscriberBase
|
|
{
|
|
private readonly ICallGateSubscriber<List<nint>> _lightlessHandledGameAddresses;
|
|
private readonly ICallGateSubscriber<List<nint>> _snowcloakHandledGameAddresses;
|
|
|
|
private readonly List<nint> _emptyList = [];
|
|
|
|
private bool _lightlessLoaded;
|
|
private bool _snowcloakLoaded;
|
|
|
|
public IpcCallerOtherSync(ILogger<IpcCallerOtherSync> logger, IDalamudPluginInterface pi, MareMediator mediator) : base(logger, mediator)
|
|
{
|
|
_lightlessHandledGameAddresses = pi.GetIpcSubscriber<List<nint>>("LightlessSync.GetHandledAddresses");
|
|
_snowcloakHandledGameAddresses = pi.GetIpcSubscriber<List<nint>>("SnowcloakSync.GetHandledAddresses");
|
|
|
|
_lightlessLoaded = PluginWatcherService.GetInitialPluginState(pi, "LightlessSync")?.IsLoaded ?? false;
|
|
|
|
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "LightlessSync", (msg) =>
|
|
{
|
|
_lightlessLoaded = msg.IsLoaded;
|
|
});
|
|
|
|
_snowcloakLoaded = PluginWatcherService.GetInitialPluginState(pi, "Snowcloak")?.IsLoaded ?? false;
|
|
|
|
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "Snowcloak", (msg) =>
|
|
{
|
|
_snowcloakLoaded = msg.IsLoaded;
|
|
});
|
|
}
|
|
|
|
public bool APIAvailable { get; private set; } = false;
|
|
|
|
// Must be called on framework thread
|
|
public IReadOnlyList<nint> GetHandledGameAddresses()
|
|
{
|
|
if (!_lightlessLoaded && !_snowcloakLoaded) return _emptyList;
|
|
|
|
try
|
|
{
|
|
return GetLightlessHandledGameAddresses().Concat(GetSnowcloakHandledGameAddresses()).ToList();
|
|
}
|
|
catch
|
|
{
|
|
return _emptyList;
|
|
}
|
|
}
|
|
|
|
private List<nint> GetLightlessHandledGameAddresses()
|
|
{
|
|
if (!_lightlessLoaded) return _emptyList;
|
|
|
|
try
|
|
{
|
|
return _lightlessHandledGameAddresses.InvokeFunc();
|
|
}
|
|
catch
|
|
{
|
|
return _emptyList;
|
|
}
|
|
}
|
|
|
|
private List<nint> GetSnowcloakHandledGameAddresses()
|
|
{
|
|
if (!_snowcloakLoaded) return _emptyList;
|
|
|
|
try
|
|
{
|
|
return _snowcloakHandledGameAddresses.InvokeFunc();
|
|
}
|
|
catch
|
|
{
|
|
return _emptyList;
|
|
}
|
|
}
|
|
}
|