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/MobileControlSystemController.cs b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs index 496fd332..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" + 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" + 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" + intInputs ); AddDefaultDeviceMessenger(messenger);