Files
ClubPenguinClient/MareSynchronos/Interop/Ipc/IpcCallerOtherSync.cs
t0w0bi 6b7f9a6ea0 Rename IpcCallerMare, implement checking for Lightless/Snowcloak.
- Do not sync with pairs handled by Lightless/Snowcloak.
- Easy to add extra clients into this list.
2025-09-11 15:28:04 +01:00

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, "SnowcloakSync")?.IsLoaded ?? false;
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "SnowcloakSync", (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;
}
}
}