using System; using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { /// /// Represents a RunRouteActionMessenger /// public class RunRouteActionMessenger : MessengerBase { /// /// Gets or sets the RoutingDevice /// public IRunRouteAction RoutingDevice { get; private set; } public RunRouteActionMessenger(string key, IRunRouteAction routingDevice, string messagePath) : base(key, messagePath, routingDevice as IKeyName) { RoutingDevice = routingDevice ?? throw new ArgumentNullException("routingDevice"); if (RoutingDevice is IRoutingSink routingSink) { routingSink.CurrentSourceChange += RoutingSink_CurrentSourceChange; } } private void RoutingSink_CurrentSourceChange(SourceListItem info, ChangeType type) { SendRoutingFullMessageObject(); } protected override void RegisterActions() { AddAction("/fullStatus", (id, content) => SendRoutingFullMessageObject(id)); AddAction("/routingStatus", (id, content) => SendRoutingFullMessageObject(id)); AddAction("/source", (id, content) => { var c = content.ToObject(); // assume no sourceListKey var sourceListKey = string.Empty; if (!string.IsNullOrEmpty(c.SourceListKey)) { // Check for source list in content of message sourceListKey = c.SourceListKey; } RoutingDevice.RunRouteAction(c.SourceListItemKey, sourceListKey); }); if (RoutingDevice is IRoutingSink sinkDevice) { sinkDevice.CurrentSourceChange += (o, a) => SendRoutingFullMessageObject(); } } /// /// Helper method to update full status of the routing device /// private void SendRoutingFullMessageObject(string id = null) { if (RoutingDevice is IRoutingSink sinkDevice) { var sourceKey = sinkDevice.CurrentSourceInfoKey; if (string.IsNullOrEmpty(sourceKey)) sourceKey = "none"; PostStatusMessage(new RoutingStateMessage { SelectedSourceKey = sourceKey }); } } } /// /// Represents a RoutingStateMessage /// public class RoutingStateMessage : DeviceStateMessageBase { /// /// Gets or sets the SelectedSourceKey /// [JsonProperty("selectedSourceKey")] public string SelectedSourceKey { get; set; } } }