diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs index 148b7d5b..91b87a83 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs @@ -43,7 +43,7 @@ namespace PepperDash.Essentials.AppServer.Messengers protected override void RegisterActions() { - AddAction("/presets/fullStatus", (id, content) => + AddAction("/fullStatus", (id, content) => { this.LogInformation("getting full status for client {id}", id); try @@ -56,7 +56,7 @@ namespace PepperDash.Essentials.AppServer.Messengers } }); - AddAction("/presets/recall", (id, content) => + AddAction("/recall", (id, content) => { var p = content.ToObject(); @@ -70,7 +70,7 @@ namespace PepperDash.Essentials.AppServer.Messengers RecallPreset(dev, p.Preset.Channel); }); - AddAction("/presets/save", (id, content) => + AddAction("/save", (id, content) => { var presets = content.ToObject>(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs index f66ba53d..553d31c6 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs @@ -2,7 +2,10 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using PepperDash.Core; +using PepperDash.Core.Logging; using PepperDash.Essentials.Core.DeviceTypeInterfaces; +using System; +using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { @@ -56,10 +59,32 @@ namespace PepperDash.Essentials.AppServer.Messengers private void SendFullStatus() { - var stateObject = new JObject(); - stateObject[_propName] = JToken.FromObject(itemDevice, serializer); - PostStatusMessage(stateObject); + try + { + this.LogInformation("Sending full status"); + + var stateObject = new ISelectableItemsStateMessage + { + Items = itemDevice.Items, + CurrentItem = itemDevice.CurrentItem + }; + + PostStatusMessage(stateObject); + } + catch (Exception e) + { + this.LogError("Error sending full status: {0}", e.Message); + } } } + public class ISelectableItemsStateMessage : DeviceStateMessageBase + { + [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 145b3cbb..76823bb4 100644 --- a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs +++ b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs @@ -1133,7 +1133,11 @@ namespace PepperDash.Essentials _messengers.Add(messenger.Key, messenger); - messenger.RegisterWithAppServer(this); + if (_initialized) + { + this.LogDebug("Registering messenger {messengerKey} AFTER initialization", messenger.Key); + messenger.RegisterWithAppServer(this); + } } private void AddDefaultDeviceMessenger(IMobileControlMessenger messenger) @@ -2230,16 +2234,14 @@ Mobile Control Direct Server Infromation: // /room/roomAB // Can't do direct comparison because it will match /room/roomA with /room/roomA/xxx instead of /room/roomAB/xxx - var handlersKv = _actionDictionary.FirstOrDefault(kv => message.Type.StartsWith(kv.Key + "/")); // adds trailing slash to ensure above case is handled + var handlers = _actionDictionary.Where(kv => message.Type.StartsWith(kv.Key + "/")).SelectMany(kv => kv.Value).ToList(); // adds trailing slash to ensure above case is handled - if (handlersKv.Key == null) + if (handlers.Count == 0) { this.LogInformation("-- Warning: Incoming message has no registered handler {type}", message.Type); break; - } - - var handlers = handlersKv.Value; + } foreach (var handler in handlers) {