using System; using System.Collections.Generic; using System.Linq; using Dalamud.Plugin.Ipc; using PeepingTom.Ipc; using PeepingTom.Ipc.From; using PeepingTom.Ipc.To; namespace PeepingTom { internal class IpcManager : IDisposable { private Plugin Plugin { get; } private ICallGateProvider Provider { get; } private ICallGateSubscriber Subscriber { get; } internal IpcManager(Plugin plugin) { this.Plugin = plugin; this.Provider = this.Plugin.Interface.GetIpcProvider(IpcInfo.FromRegistrationName); this.Subscriber = this.Plugin.Interface.GetIpcSubscriber(IpcInfo.ToRegistrationName); this.Subscriber.Subscribe(this.ReceiveMessage); } public void Dispose() { this.Subscriber.Unsubscribe(this.ReceiveMessage); } internal void SendAllTargeters() { var targeters = new List<(Targeter, bool)>(); targeters.AddRange(this.Plugin.Watcher.CurrentTargeters.Select(t => (t, true))); targeters.AddRange(this.Plugin.Watcher.PreviousTargeters.Select(t => (t, false))); this.Provider.SendMessage(new AllTargetersMessage(targeters)); } internal void SendNewTargeter(Targeter targeter) { this.Provider.SendMessage(new NewTargeterMessage(targeter)); } internal void SendStoppedTargeting(Targeter targeter) { this.Provider.SendMessage(new StoppedTargetingMessage(targeter)); } private void ReceiveMessage(IToMessage message) { switch (message) { case RequestTargetersMessage: { this.SendAllTargeters(); break; } } } } }