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 IpcCallerMare : DisposableMediatorSubscriberBase { private readonly ICallGateSubscriber> _mareHandledGameAddresses; private readonly List _emptyList = []; private bool _pluginLoaded; public IpcCallerMare(ILogger logger, IDalamudPluginInterface pi, MareMediator mediator) : base(logger, mediator) { _mareHandledGameAddresses = pi.GetIpcSubscriber>("MareSynchronos.GetHandledAddresses"); _pluginLoaded = PluginWatcherService.GetInitialPluginState(pi, "MareSynchronos")?.IsLoaded ?? false; Mediator.SubscribeKeyed(this, "MareSynchronos", (msg) => { _pluginLoaded = msg.IsLoaded; }); } public bool APIAvailable { get; private set; } = false; // Must be called on framework thread public IReadOnlyList GetHandledGameAddresses() { if (!_pluginLoaded) return _emptyList; try { return _mareHandledGameAddresses.InvokeFunc(); } catch { return _emptyList; } } }