using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Plugin.Ipc; namespace HellionChat; internal sealed class IpcManager : IDisposable { private ICallGateProvider RegisterGate { get; } private ICallGateProvider UnregisterGate { get; } private ICallGateProvider AvailableGate { get; } private ICallGateProvider InvokeGate { get; } internal List Registered { get; } = []; public IpcManager() { RegisterGate = Plugin.Interface.GetIpcProvider("HellionChat.Register"); RegisterGate.RegisterFunc(Register); AvailableGate = Plugin.Interface.GetIpcProvider("HellionChat.Available"); UnregisterGate = Plugin.Interface.GetIpcProvider("HellionChat.Unregister"); UnregisterGate.RegisterAction(Unregister); InvokeGate = Plugin.Interface.GetIpcProvider("HellionChat.Invoke"); AvailableGate.SendMessage(); } internal void Invoke(string id, PlayerPayload? sender, ulong contentId, Payload? payload, SeString? senderString, SeString? content) { InvokeGate.SendMessage(id, sender, contentId, payload, senderString, content); } private string Register() { var id = Guid.NewGuid().ToString(); Registered.Add(id); return id; } private void Unregister(string id) { Registered.Remove(id); } public void Dispose() { UnregisterGate.UnregisterFunc(); RegisterGate.UnregisterFunc(); Registered.Clear(); } }