diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs new file mode 100644 index 00000000..8eb693d5 --- /dev/null +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs @@ -0,0 +1,101 @@ +using Newtonsoft.Json; +using PepperDash.Core; +using PepperDash.Core.Logging; +using PepperDash.Essentials.Core.DeviceTypeInterfaces; +using System; +using System.Collections.Generic; + +namespace PepperDash.Essentials.AppServer.Messengers +{ + public class IHasInputsMessenger : MessengerBase + { + private readonly IHasInputs itemDevice; + + + /// + /// Constructs a messenger for a device that implements IHasInputs + /// + /// + /// + /// + public IHasInputsMessenger(string key, string messagePath, IHasInputs device) : base(key, messagePath, device) + { + itemDevice = device; + } + + protected override void RegisterActions() + { + base.RegisterActions(); + + AddAction("/fullStatus", (id, context) => + { + SendFullStatus(); + }); + + itemDevice.Inputs.ItemsUpdated += (sender, args) => + { + SendFullStatus(); + }; + + itemDevice.Inputs.CurrentItemChanged += (sender, args) => + { + SendFullStatus(); + }; + + foreach (var input in itemDevice.Inputs.Items) + { + var key = input.Key; + var localItem = input.Value; + + AddAction($"/{key}", (id, content) => + { + localItem.Select(); + }); + + localItem.ItemUpdated += (sender, args) => + { + SendFullStatus(); + }; + } + } + + private void SendFullStatus() + { + try + { + this.LogInformation("Sending full status"); + + var stateObject = new IHasInputsStateMessage + { + Inputs = new Inputs + { + Items = itemDevice.Inputs.Items, + CurrentItem = itemDevice.Inputs.CurrentItem + } + }; + + PostStatusMessage(stateObject); + } + catch (Exception e) + { + this.LogError("Error sending full status: {0}", e.Message); + } + } + } + + public class IHasInputsStateMessage : DeviceStateMessageBase + { + [JsonProperty("inputs")] + public Inputs Inputs { get; set; } + } + + public class Inputs + { + [JsonProperty("items")] + public Dictionary Items { get; set; } + + [JsonProperty("currentItem")] + public TKey CurrentItem { get; set; } + } + +} diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs index 553d31c6..d7c4a59f 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs @@ -1,6 +1,4 @@ using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.Core.DeviceTypeInterfaces; @@ -10,11 +8,18 @@ using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { public class ISelectableItemsMessenger : MessengerBase - { - private static readonly JsonSerializer serializer = new JsonSerializer { Converters = { new StringEnumConverter() } }; + { private readonly ISelectableItems itemDevice; private readonly string _propName; + + /// + /// Constructs a messenger for a device that implements ISelectableItems + /// + /// + /// + /// + /// public ISelectableItemsMessenger(string key, string messagePath, ISelectableItems device, string propName) : base(key, messagePath, device as IKeyName) { itemDevice = device; diff --git a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs index 76823bb4..b17e0490 100644 --- a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs +++ b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs @@ -763,11 +763,10 @@ namespace PepperDash.Essentials { this.LogVerbose("Adding InputsMessenger for {deviceKey}", device.Key); - var messenger = new ISelectableItemsMessenger( + var messenger = new IHasInputsMessenger( $"{device.Key}-inputs-{Key}", $"/device/{device.Key}", - stringInputs.Inputs, - "inputs" + stringInputs ); AddDefaultDeviceMessenger(messenger); @@ -779,11 +778,10 @@ namespace PepperDash.Essentials { this.LogVerbose("Adding InputsMessenger for {deviceKey}", device.Key); - var messenger = new ISelectableItemsMessenger( + var messenger = new IHasInputsMessenger( $"{device.Key}-inputs-{Key}", $"/device/{device.Key}", - byteInputs.Inputs, - "inputs" + byteInputs ); AddDefaultDeviceMessenger(messenger); @@ -795,11 +793,10 @@ namespace PepperDash.Essentials { this.LogVerbose("Adding InputsMessenger for {deviceKey}", device.Key); - var messenger = new ISelectableItemsMessenger( + var messenger = new IHasInputsMessenger( $"{device.Key}-inputs-{Key}", $"/device/{device.Key}", - intInputs.Inputs, - "inputs" + intInputs ); AddDefaultDeviceMessenger(messenger); diff --git a/src/PepperDash.Essentials.MobileControl/TransmitMessage.cs b/src/PepperDash.Essentials.MobileControl/TransmitMessage.cs index 14f928ca..b9ca686b 100644 --- a/src/PepperDash.Essentials.MobileControl/TransmitMessage.cs +++ b/src/PepperDash.Essentials.MobileControl/TransmitMessage.cs @@ -113,10 +113,7 @@ namespace PepperDash.Essentials _server.SendMessageToAllClients(message); - _server.LogVerbose("Message TX To all clients: {message}", null, message); - - - + _server.LogVerbose("Message TX To all clients: {message}", message); } catch (ThreadAbortException) { @@ -126,8 +123,6 @@ namespace PepperDash.Essentials { Debug.LogMessage(ex, "Caught an exception in the Transmit Processor"); } - - } #endregion }