PeepingTom/Peeping Tom/IpcManager.cs

55 lines
1.8 KiB
C#
Raw Permalink Normal View History

2021-08-23 03:33:57 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
2021-09-11 17:22:41 +00:00
using Dalamud.Plugin.Ipc;
2021-08-23 03:33:57 +00:00
using PeepingTom.Ipc;
using PeepingTom.Ipc.From;
using PeepingTom.Ipc.To;
namespace PeepingTom {
internal class IpcManager : IDisposable {
2023-09-28 06:56:38 +00:00
private Plugin Plugin { get; }
2021-08-23 03:33:57 +00:00
private ICallGateProvider<IFromMessage, object> Provider { get; }
private ICallGateSubscriber<IToMessage, object> Subscriber { get; }
2023-09-28 06:56:38 +00:00
internal IpcManager(Plugin plugin) {
2021-08-23 03:33:57 +00:00
this.Plugin = plugin;
this.Provider = this.Plugin.Interface.GetIpcProvider<IFromMessage, object>(IpcInfo.FromRegistrationName);
this.Subscriber = this.Plugin.Interface.GetIpcSubscriber<IToMessage, object>(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;
}
}
}
}
}