diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/ContentTypes.cs b/src/PepperDash.Essentials.MobileControl.Messengers/ContentTypes.cs index e555f11f..1c45d7bc 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/ContentTypes.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/ContentTypes.cs @@ -3,29 +3,51 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer { + /// + /// Represents the content of a source selection message + /// public class SourceSelectMessageContent { - + /// + /// Gets or sets the key of the source list item to select + /// [JsonProperty("sourceListItemKey")] public string SourceListItemKey { get; set; } + + /// + /// Gets or sets the key of the source list containing the item + /// [JsonProperty("sourceListKey")] public string SourceListKey { get; set; } } + /// + /// Represents a direct routing operation between a source and destination + /// public class DirectRoute { - + /// + /// Gets or sets the key of the source device + /// [JsonProperty("sourceKey")] public string SourceKey { get; set; } + + /// + /// Gets or sets the key of the destination device + /// [JsonProperty("destinationKey")] public string DestinationKey { get; set; } + + /// + /// Gets or sets the type of routing signal (Audio, Video, etc.) + /// [JsonProperty("signalType")] public eRoutingSignalType SignalType { get; set; } } /// - /// + /// Delegate for press and hold actions with boolean state parameter /// - /// + /// The state of the press and hold action public delegate void PressAndHoldAction(bool b); } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs index cc09a637..b028f2aa 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs @@ -1,22 +1,35 @@ -using Newtonsoft.Json.Linq; +using System.Linq; +using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.AppServer; using PepperDash.Essentials.AppServer.Messengers; -using System.Linq; using DisplayBase = PepperDash.Essentials.Devices.Common.Displays.DisplayBase; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for display devices + /// public class DisplayBaseMessenger : MessengerBase { + /// + /// The display device this messenger is associated with + /// private readonly DisplayBase display; + /// + /// Initializes a new instance of the DisplayBaseMessenger class + /// + /// The unique key for this messenger + /// The message path for routing display control messages + /// The display device to control public DisplayBaseMessenger(string key, string messagePath, DisplayBase device) : base(key, messagePath, device) { display = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IChannelMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IChannelMessenger.cs index 4ba89800..82a3b517 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IChannelMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IChannelMessenger.cs @@ -4,15 +4,28 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for devices with channel control functionality + /// public class IChannelMessenger : MessengerBase { + /// + /// The channel control device this messenger is associated with + /// private readonly IChannel channelDevice; + /// + /// Initializes a new instance of the IChannelMessenger class + /// + /// The unique key for this messenger + /// The message path for routing channel control messages + /// The device that implements channel control functionality public IChannelMessenger(string key, string messagePath, IChannel device) : base(key, messagePath, device as IKeyName) { channelDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IColorMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IColorMessenger.cs index 86df2590..f0012355 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IColorMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IColorMessenger.cs @@ -4,14 +4,25 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger for devices that implement IColor interface + /// public class IColorMessenger : MessengerBase { private readonly IColor colorDevice; + + /// + /// Initializes a new instance of the IColorMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements IColor public IColorMessenger(string key, string messagePath, IColor device) : base(key, messagePath, device as IKeyName) { colorDevice = device as IColor; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDPadMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDPadMessenger.cs index 4af07703..6794cae7 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDPadMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDPadMessenger.cs @@ -4,15 +4,28 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for devices with directional pad functionality + /// public class IDPadMessenger : MessengerBase { + /// + /// The directional pad device this messenger is associated with + /// private readonly IDPad dpadDevice; + + /// + /// Initializes a new instance of the IDPadMessenger class + /// + /// The unique key for this messenger + /// The message path for routing directional pad messages + /// The device that implements directional pad functionality public IDPadMessenger(string key, string messagePath, IDPad device) : base(key, messagePath, device as IKeyName) { dpadDevice = device; } - + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDvrMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDvrMessenger.cs index 8e286979..d96342f1 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDvrMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IDvrMessenger.cs @@ -4,14 +4,25 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger for devices that implement IDvr interface + /// public class IDvrMessenger : MessengerBase { private readonly IDvr dvrDevice; + + /// + /// Initializes a new instance of the IDvrMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements IDvr public IDvrMessenger(string key, string messagePath, IDvr device) : base(key, messagePath, device as IKeyName) { dvrDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IHasPowerMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IHasPowerMessenger.cs index 39ed0e6f..8daed80f 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IHasPowerMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IHasPowerMessenger.cs @@ -4,14 +4,28 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for devices with power control functionality + /// public class IHasPowerMessenger : MessengerBase { + /// + /// The power control device this messenger is associated with + /// private readonly IHasPowerControl powerDevice; + + /// + /// Initializes a new instance of the IHasPowerMessenger class + /// + /// The unique key for this messenger + /// The message path for routing power control messages + /// The device that implements power control functionality public IHasPowerMessenger(string key, string messagePath, IHasPowerControl device) : base(key, messagePath, device as IKeyName) { powerDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/INumericMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/INumericMessenger.cs index 69b5bc9d..fc497d7e 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/INumericMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/INumericMessenger.cs @@ -4,14 +4,28 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for devices with numeric keypad functionality + /// public class INumericKeypadMessenger : MessengerBase { + /// + /// The numeric keypad device this messenger is associated with + /// private readonly INumericKeypad keypadDevice; + + /// + /// Initializes a new instance of the INumericKeypadMessenger class + /// + /// The unique key for this messenger + /// The message path for routing numeric keypad messages + /// The device that implements numeric keypad functionality public INumericKeypadMessenger(string key, string messagePath, INumericKeypad device) : base(key, messagePath, device as IKeyName) { keypadDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ISetTopBoxControlsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ISetTopBoxControlsMessenger.cs index 0e7c227b..76243786 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ISetTopBoxControlsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ISetTopBoxControlsMessenger.cs @@ -4,14 +4,25 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger for devices that implement ISetTopBoxControls interface + /// public class ISetTopBoxControlsMessenger : MessengerBase { private readonly ISetTopBoxControls stbDevice; + + /// + /// Initializes a new instance of the ISetTopBoxControlsMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements ISetTopBoxControls public ISetTopBoxControlsMessenger(string key, string messagePath, ISetTopBoxControls device) : base(key, messagePath, device as IKeyName) { stbDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -32,6 +43,9 @@ namespace PepperDash.Essentials.Room.MobileControl } } + /// + /// State message for set top box controls + /// public class SetTopBoxControlsState : DeviceStateMessageBase { diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ITransportMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ITransportMessenger.cs index 75f74418..9f5d42cb 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ITransportMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/ITransportMessenger.cs @@ -4,14 +4,28 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Room.MobileControl { + /// + /// Messenger that provides mobile control interface for devices with transport control functionality + /// public class ITransportMessenger : MessengerBase { + /// + /// The transport control device this messenger is associated with + /// private readonly ITransport transportDevice; + + /// + /// Initializes a new instance of the ITransportMessenger class + /// + /// The unique key for this messenger + /// The message path for routing transport control messages + /// The device that implements transport control functionality public ITransportMessenger(string key, string messagePath, ITransport device) : base(key, messagePath, device as IKeyName) { transportDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs index 9a42141e..d29eede8 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs @@ -1,8 +1,8 @@ -using Newtonsoft.Json.Linq; +using System; +using System.Linq; +using Newtonsoft.Json.Linq; using PepperDash.Essentials.Devices.Common.AudioCodec; using PepperDash.Essentials.Devices.Common.Codec; -using System; -using System.Linq; namespace PepperDash.Essentials.AppServer.Messengers { @@ -29,6 +29,10 @@ namespace PepperDash.Essentials.AppServer.Messengers codec.CallStatusChange += Codec_CallStatusChange; } + /// + /// Registers actions for handling audio codec operations. + /// Includes call control, status reporting, and audio codec management. + /// protected override void RegisterActions() { diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs index 36a94781..6e3bacd3 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs @@ -1,11 +1,15 @@ -using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using Newtonsoft.Json.Linq; using PepperDash.Essentials.Core; using PepperDash.Essentials.Devices.Common.Cameras; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for camera control operations. + /// Handles camera movement, zoom, preset management, and camera status reporting. + /// public class CameraBaseMessenger : MessengerBase { /// @@ -45,6 +49,10 @@ namespace PepperDash.Essentials.AppServer.Messengers ); } + /// + /// Registers actions for handling camera control operations. + /// Includes camera movement, zoom, preset management, and full status reporting. + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceInfoMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceInfoMessenger.cs index c588195e..153a4ed7 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceInfoMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceInfoMessenger.cs @@ -1,14 +1,14 @@ -using Newtonsoft.Json; +using System.Timers; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core.DeviceInfo; -using System.Timers; namespace PepperDash.Essentials.AppServer.Messengers { - /// - /// Facilitates communication of device information by providing mechanisms for status updates and device - /// information reporting. + /// + /// Facilitates communication of device information by providing mechanisms for status updates and device + /// information reporting. /// /// The class integrates with an to manage device-specific information. It uses a debounce timer to limit the @@ -21,42 +21,42 @@ namespace PepperDash.Essentials.AppServer.Messengers private readonly Timer debounceTimer; - /// - /// Initializes a new instance of the class, which facilitates communication - /// of device information. - /// - /// The messenger uses a debounce timer to limit the frequency of certain operations. The - /// timer is initialized with a 1-second interval and is disabled by default. - /// A unique identifier for the messenger instance. - /// The path used for sending and receiving messages. + /// + /// Initializes a new instance of the class, which facilitates communication + /// of device information. + /// + /// The messenger uses a debounce timer to limit the frequency of certain operations. The + /// timer is initialized with a 1-second interval and is disabled by default. + /// A unique identifier for the messenger instance. + /// The path used for sending and receiving messages. /// An implementation of that provides device-specific information. public DeviceInfoMessenger(string key, string messagePath, IDeviceInfoProvider device) : base(key, messagePath, device as Device) { _deviceInfoProvider = device; - debounceTimer = new Timer(1000) - { - Enabled = false, - AutoReset = false + debounceTimer = new Timer(1000) + { + Enabled = false, + AutoReset = false }; debounceTimer.Elapsed += DebounceTimer_Elapsed; - } - - private void DebounceTimer_Elapsed(object sender, ElapsedEventArgs e) - { - PostStatusMessage(JToken.FromObject(new - { - deviceInfo = _deviceInfoProvider.DeviceInfo - })); - } - - /// - /// Registers actions and event handlers for device information updates and status reporting. - /// - /// This method sets up actions for handling device status updates and reporting full - /// device status. It also subscribes to the event to - /// trigger debounced updates when the device information changes. + } + + private void DebounceTimer_Elapsed(object sender, ElapsedEventArgs e) + { + PostStatusMessage(JToken.FromObject(new + { + deviceInfo = _deviceInfoProvider.DeviceInfo + })); + } + + /// + /// Registers actions and event handlers for device information updates and status reporting. + /// + /// This method sets up actions for handling device status updates and reporting full + /// device status. It also subscribes to the event to + /// trigger debounced updates when the device information changes. protected override void RegisterActions() { base.RegisterActions(); @@ -76,14 +76,17 @@ namespace PepperDash.Essentials.AppServer.Messengers } } - /// - /// Represents a message containing the state information of a device, including detailed device information. + /// + /// Represents a message containing the state information of a device, including detailed device information. /// /// This class is used to encapsulate the state of a device along with its associated /// information. It extends to provide additional details about the /// device. public class DeviceInfoStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the device information. + /// [JsonProperty("deviceInfo")] public DeviceInfo DeviceInfo { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs index 91b87a83..3e6229a9 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs @@ -1,18 +1,28 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.DeviceTypeInterfaces; using PepperDash.Essentials.Core.Presets; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for device preset management operations. + /// Handles preset selection, recall, and preset list management. + /// public class DevicePresetsModelMessenger : MessengerBase { private readonly ITvPresetsProvider _presetsDevice; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The message path for preset control messages. + /// The device that provides preset functionality. public DevicePresetsModelMessenger(string key, string messagePath, ITvPresetsProvider presetsDevice) : base(key, messagePath, presetsDevice as Device) { @@ -40,6 +50,10 @@ namespace PepperDash.Essentials.AppServer.Messengers #region Overrides of MessengerBase + /// + /// Registers actions for handling device preset operations. + /// Includes preset selection, recall, and full status reporting. + /// protected override void RegisterActions() { @@ -83,17 +97,32 @@ namespace PepperDash.Essentials.AppServer.Messengers #endregion } + /// + /// Represents a preset channel message for device preset operations. + /// public class PresetChannelMessage { + /// + /// Gets or sets the preset channel information. + /// [JsonProperty("preset")] public PresetChannel Preset; + /// + /// Gets or sets the device key associated with the preset. + /// [JsonProperty("deviceKey")] public string DeviceKey; } + /// + /// Represents a preset state message containing favorite presets. + /// public class PresetStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the list of favorite preset channels. + /// [JsonProperty("favorites", NullValueHandling = NullValueHandling.Ignore)] public List Favorites { get; set; } = new List(); } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs index 22f837c3..84c840f8 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs @@ -1,16 +1,26 @@ -using Newtonsoft.Json; +using System; +using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core; -using System; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for device volume control operations. + /// Handles volume level adjustment, mute control, and volume status reporting. + /// public class DeviceVolumeMessenger : MessengerBase { private readonly IBasicVolumeWithFeedback _localDevice; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The message path for volume control messages. + /// The device that provides volume control functionality. public DeviceVolumeMessenger(string key, string messagePath, IBasicVolumeWithFeedback device) : base(key, messagePath, device as IKeyName) { @@ -48,6 +58,10 @@ namespace PepperDash.Essentials.AppServer.Messengers #region Overrides of MessengerBase + /// + /// Registers actions for handling volume control operations. + /// Includes volume level adjustment, mute control, and full status reporting. + /// protected override void RegisterActions() { AddAction("/fullStatus", (id, content) => SendStatus()); @@ -142,29 +156,56 @@ namespace PepperDash.Essentials.AppServer.Messengers #endregion } + /// + /// Represents a volume state message containing volume information. + /// public class VolumeStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the volume information. + /// [JsonProperty("volume", NullValueHandling = NullValueHandling.Ignore)] public Volume Volume { get; set; } } + /// + /// Represents volume control information including level, mute status, and units. + /// public class Volume { + /// + /// Gets or sets the volume level. + /// [JsonProperty("level", NullValueHandling = NullValueHandling.Ignore)] public int? Level { get; set; } + /// + /// Gets or sets a value indicating whether the device has mute capability. + /// [JsonProperty("hasMute", NullValueHandling = NullValueHandling.Ignore)] public bool? HasMute { get; set; } + /// + /// Gets or sets a value indicating whether the device is currently muted. + /// [JsonProperty("muted", NullValueHandling = NullValueHandling.Ignore)] public bool? Muted { get; set; } + /// + /// Gets or sets the volume label for display purposes. + /// [JsonProperty("label", NullValueHandling = NullValueHandling.Ignore)] public string Label { get; set; } + /// + /// Gets or sets the raw volume value as a string. + /// [JsonProperty("rawValue", NullValueHandling = NullValueHandling.Ignore)] public string RawValue { get; set; } + /// + /// Gets or sets the volume level units. + /// [JsonConverter(typeof(StringEnumConverter))] [JsonProperty("units", NullValueHandling = NullValueHandling.Ignore)] public eVolumeLevelUnits? Units { get; set; } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/GenericMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/GenericMessenger.cs index 64624bfa..50a329a0 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/GenericMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/GenericMessenger.cs @@ -2,12 +2,22 @@ namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Generic messenger for basic device communication + /// public class GenericMessenger : MessengerBase { + /// + /// Initializes a new instance of the GenericMessenger class + /// + /// Unique identifier for the messenger + /// Device to communicate with + /// Path for message routing public GenericMessenger(string key, EssentialsDevice device, string messagePath) : base(key, messagePath, device) { } + /// protected override void RegisterActions() { base.RegisterActions(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ICommunicationMonitorMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ICommunicationMonitorMessenger.cs index 5ab81832..119b9ff3 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ICommunicationMonitorMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ICommunicationMonitorMessenger.cs @@ -6,15 +6,29 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for communication monitoring operations. + /// Handles communication status reporting and monitoring feedback. + /// public class ICommunicationMonitorMessenger : MessengerBase { private readonly ICommunicationMonitor _communicationMonitor; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The message path for communication monitor messages. + /// The device that provides communication monitoring functionality. public ICommunicationMonitorMessenger(string key, string messagePath, ICommunicationMonitor device) : base(key, messagePath, device as IKeyName) { _communicationMonitor = device; } + /// + /// Registers actions for handling communication monitoring operations. + /// Includes full status reporting for communication monitoring data. + /// protected override void RegisterActions() { base.RegisterActions(); @@ -50,11 +64,17 @@ namespace PepperDash.Essentials.AppServer.Messengers /// public class CommunicationMonitorState : DeviceStateMessageBase { + /// + /// Gets or sets the communication monitor properties. + /// [JsonProperty("commMonitor", NullValueHandling = NullValueHandling.Ignore)] public CommunicationMonitorProps CommunicationMonitor { get; set; } } + /// + /// Represents the properties of a communication monitor. + /// public class CommunicationMonitorProps { /// /// For devices that implement ICommunicationMonitor, reports the online status of the device diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDspPresetsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDspPresetsMessenger.cs index e40cd8eb..f3e58956 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDspPresetsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDspPresetsMessenger.cs @@ -1,20 +1,34 @@ -using Newtonsoft.Json; +using System.Collections.Generic; +using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for DSP preset management operations. + /// Handles DSP preset selection, recall, and preset list management. + /// public class IDspPresetsMessenger : MessengerBase { private readonly IDspPresets device; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The message path for DSP preset control messages. + /// The device that provides DSP preset functionality. public IDspPresetsMessenger(string key, string messagePath, IDspPresets device) : base(key, messagePath, device as IKeyName) { this.device = device; } + /// + /// Registers actions for handling DSP preset operations. + /// Includes preset selection, recall, and full status reporting. + /// protected override void RegisterActions() { base.RegisterActions(); @@ -42,8 +56,14 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// Represents a DSP presets state message containing available presets. + /// public class IHasDspPresetsStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the dictionary of available DSP presets. + /// [JsonProperty("presets")] public Dictionary Presets { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCurrentSourceInfoMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCurrentSourceInfoMessenger.cs index 24f1f461..d7102418 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCurrentSourceInfoMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasCurrentSourceInfoMessenger.cs @@ -5,14 +5,25 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Messenger for devices that implement IHasCurrentSourceInfoChange interface + /// public class IHasCurrentSourceInfoMessenger : MessengerBase { private readonly IHasCurrentSourceInfoChange sourceDevice; + + /// + /// Initializes a new instance of the IHasCurrentSourceInfoMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements IHasCurrentSourceInfoChange public IHasCurrentSourceInfoMessenger(string key, string messagePath, IHasCurrentSourceInfoChange device) : base(key, messagePath, device as IKeyName) { sourceDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -46,11 +57,20 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// State message for current source information + /// public class CurrentSourceStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the current source key + /// [JsonProperty("currentSourceKey", NullValueHandling = NullValueHandling.Ignore)] public string CurrentSourceKey { get; set; } + /// + /// Gets or sets the current source information + /// [JsonProperty("currentSource")] public SourceListItem CurrentSource { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs index 8eb693d5..b22dd881 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasInputsMessenger.cs @@ -1,28 +1,33 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +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 { + /// + /// Messenger for devices that implement IHasInputs interface + /// + /// Type of the key used for inputs public class IHasInputsMessenger : MessengerBase - { - private readonly IHasInputs itemDevice; + { + private readonly IHasInputs itemDevice; /// /// Constructs a messenger for a device that implements IHasInputs /// - /// - /// - /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements IHasInputs public IHasInputsMessenger(string key, string messagePath, IHasInputs device) : base(key, messagePath, device) { - itemDevice = device; + itemDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -83,17 +88,34 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// State message for devices with inputs + /// + /// Type of the key used for inputs public class IHasInputsStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the inputs + /// [JsonProperty("inputs")] public Inputs Inputs { get; set; } } + /// + /// Represents a collection of inputs + /// + /// Type of the key used for inputs public class Inputs { + /// + /// Gets or sets the items dictionary + /// [JsonProperty("items")] public Dictionary Items { get; set; } + /// + /// Gets or sets the current item + /// [JsonProperty("currentItem")] public TKey CurrentItem { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasPowerControlWithFeedbackMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasPowerControlWithFeedbackMessenger.cs index 7fb39c8c..493c03d3 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasPowerControlWithFeedbackMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasPowerControlWithFeedbackMessenger.cs @@ -5,16 +5,29 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for power control operations with feedback. + /// Handles power on/off commands and power state feedback reporting. + /// public class IHasPowerControlWithFeedbackMessenger : MessengerBase { private readonly IHasPowerControlWithFeedback _powerControl; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The message path for power control messages. + /// The device that provides power control functionality. public IHasPowerControlWithFeedbackMessenger(string key, string messagePath, IHasPowerControlWithFeedback powerControl) : base(key, messagePath, powerControl as IKeyName) { _powerControl = powerControl; } + /// + /// Sends the full power control status to connected clients. + /// public void SendFullStatus() { var messageObj = new PowerControlWithFeedbackStateMessage @@ -25,6 +38,10 @@ namespace PepperDash.Essentials.AppServer.Messengers PostStatusMessage(messageObj); } + /// + /// Registers actions for handling power control operations. + /// Includes power on, power off, power toggle, and full status reporting. + /// protected override void RegisterActions() { base.RegisterActions(); @@ -44,8 +61,14 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// Represents a power control state message containing power state information. + /// public class PowerControlWithFeedbackStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the power state of the device. + /// [JsonProperty("powerState", NullValueHandling = NullValueHandling.Ignore)] public bool? PowerState { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasScheduleAwarenessMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasScheduleAwarenessMessenger.cs index 80481470..1f5a9e50 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasScheduleAwarenessMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IHasScheduleAwarenessMessenger.cs @@ -1,16 +1,28 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Devices.Common.Codec; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Messenger for devices that implement IHasScheduleAwareness interface + /// public class IHasScheduleAwarenessMessenger : MessengerBase { + /// + /// Gets the schedule source device + /// public IHasScheduleAwareness ScheduleSource { get; private set; } + /// + /// Initializes a new instance of the IHasScheduleAwarenessMessenger class + /// + /// Unique identifier for the messenger + /// Device that implements IHasScheduleAwareness + /// Path for message routing public IHasScheduleAwarenessMessenger(string key, IHasScheduleAwareness scheduleSource, string messagePath) : base(key, messagePath, scheduleSource as IKeyName) { @@ -19,6 +31,7 @@ namespace PepperDash.Essentials.AppServer.Messengers ScheduleSource.CodecSchedule.MeetingEventChange += new EventHandler(CodecSchedule_MeetingEventChange); } + /// protected override void RegisterActions() { AddAction("/schedule/fullStatus", (id, content) => SendFullScheduleObject()); @@ -55,26 +68,50 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// Full schedule message containing meetings and warning minutes + /// public class FullScheduleMessage : DeviceStateMessageBase { + /// + /// Gets or sets the list of meetings + /// [JsonProperty("meetings", NullValueHandling = NullValueHandling.Ignore)] public List Meetings { get; set; } + /// + /// Gets or sets the meeting warning minutes + /// [JsonProperty("meetingWarningMinutes", NullValueHandling = NullValueHandling.Ignore)] public int MeetingWarningMinutes { get; set; } } + /// + /// Message containing meeting change information + /// public class MeetingChangeMessage { + /// + /// Gets or sets the meeting change details + /// [JsonProperty("meetingChange", NullValueHandling = NullValueHandling.Ignore)] public MeetingChange MeetingChange { get; set; } } + /// + /// Represents a meeting change with type and meeting details + /// public class MeetingChange { + /// + /// Gets or sets the change type + /// [JsonProperty("changeType", NullValueHandling = NullValueHandling.Ignore)] public string ChangeType { get; set; } + /// + /// Gets or sets the meeting details + /// [JsonProperty("meeting", NullValueHandling = NullValueHandling.Ignore)] public Meeting Meeting { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILevelControlsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILevelControlsMessenger.cs index 4fd3515a..68860052 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILevelControlsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILevelControlsMessenger.cs @@ -1,20 +1,31 @@ -using Newtonsoft.Json; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core.DeviceTypeInterfaces; -using System.Collections.Generic; -using System.Linq; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Messenger for devices that implement ILevelControls interface + /// public class ILevelControlsMessenger : MessengerBase { private ILevelControls levelControlsDevice; + + /// + /// Initializes a new instance of the ILevelControlsMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements ILevelControls public ILevelControlsMessenger(string key, string messagePath, ILevelControls device) : base(key, messagePath, device as IKeyName) { levelControlsDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -74,17 +85,32 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// State message for level controls + /// public class LevelControlStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the level controls + /// [JsonProperty("levelControls")] public Dictionary Levels { get; set; } } + /// + /// Request message for level control operations + /// public class LevelControlRequestMessage { + /// + /// Gets or sets the control key + /// [JsonProperty("key")] public string Key { get; set; } + /// + /// Gets or sets the level + /// [JsonProperty("level", NullValueHandling = NullValueHandling.Ignore)] public ushort? Level { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs index 2a9669f1..35a6ceb2 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IMatrixRoutingMessenger.cs @@ -1,12 +1,12 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Routing; using Serilog.Events; -using System; -using System.Collections.Generic; -using System.Linq; namespace PepperDash.Essentials.AppServer.Messengers { @@ -16,11 +16,19 @@ namespace PepperDash.Essentials.AppServer.Messengers public class IMatrixRoutingMessenger : MessengerBase { private readonly IMatrixRouting matrixDevice; + + /// + /// Initializes a new instance of the IMatrixRoutingMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements IMatrixRouting public IMatrixRoutingMessenger(string key, string messagePath, IMatrixRouting device) : base(key, messagePath, device as IKeyName) { matrixDevice = device; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -82,86 +90,159 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// State message for matrix routing information + /// public class MatrixStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the outputs dictionary + /// [JsonProperty("outputs")] public Dictionary Outputs; + /// + /// Gets or sets the inputs dictionary + /// [JsonProperty("inputs")] public Dictionary Inputs; } + /// + /// Represents a routing input slot + /// public class RoutingInput { private IRoutingInputSlot _input; + /// + /// Gets the transmit device key + /// [JsonProperty("txDeviceKey", NullValueHandling = NullValueHandling.Ignore)] public string TxDeviceKey => _input?.TxDeviceKey; + /// + /// Gets the slot number + /// [JsonProperty("slotNumber", NullValueHandling = NullValueHandling.Ignore)] public int? SlotNumber => _input?.SlotNumber; + /// + /// Gets the supported signal types + /// [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] [JsonProperty("supportedSignalTypes", NullValueHandling = NullValueHandling.Ignore)] public eRoutingSignalType? SupportedSignalTypes => _input?.SupportedSignalTypes; + /// + /// Gets the name + /// [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] public string Name => _input?.Name; + /// + /// Gets the online status + /// [JsonProperty("isOnline", NullValueHandling = NullValueHandling.Ignore)] public bool? IsOnline => _input?.IsOnline.BoolValue; + /// + /// Gets the video sync detected status + /// [JsonProperty("videoSyncDetected", NullValueHandling = NullValueHandling.Ignore)] public bool? VideoSyncDetected => _input?.VideoSyncDetected; + /// + /// Gets the key + /// [JsonProperty("key", NullValueHandling = NullValueHandling.Ignore)] public string Key => _input?.Key; + /// + /// Initializes a new instance of the RoutingInput class + /// + /// The input slot public RoutingInput(IRoutingInputSlot input) { _input = input; } } + /// + /// Represents a routing output slot + /// public class RoutingOutput { private IRoutingOutputSlot _output; - + /// + /// Initializes a new instance of the RoutingOutput class + /// + /// The output slot public RoutingOutput(IRoutingOutputSlot output) { _output = output; } + /// + /// Gets the receive device key + /// [JsonProperty("rxDeviceKey")] public string RxDeviceKey => _output.RxDeviceKey; + /// + /// Gets the current routes + /// [JsonProperty("currentRoutes")] public Dictionary CurrentRoutes => _output.CurrentRoutes.ToDictionary(kvp => kvp.Key.ToString(), kvp => new RoutingInput(kvp.Value)); + /// + /// Gets the slot number + /// [JsonProperty("slotNumber")] public int SlotNumber => _output.SlotNumber; + /// + /// Gets the supported signal types + /// [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] [JsonProperty("supportedSignalTypes")] public eRoutingSignalType SupportedSignalTypes => _output.SupportedSignalTypes; + /// + /// Gets the name + /// [JsonProperty("name")] public string Name => _output.Name; + /// + /// Gets the key + /// [JsonProperty("key")] public string Key => _output.Key; } + /// + /// Request for matrix routing + /// public class MatrixRouteRequest { + /// + /// Gets or sets the output key + /// [JsonProperty("outputKey")] public string OutputKey { get; set; } + /// + /// Gets or sets the input key + /// [JsonProperty("inputKey")] public string InputKey { get; set; } + /// + /// Gets or sets the route type + /// [JsonProperty("routeType")] public eRoutingSignalType RouteType { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs index d7c4a59f..af74a929 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ISelectableItemsMessenger.cs @@ -1,14 +1,18 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +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 { + /// + /// Messenger for devices that implement ISelectableItems interface + /// + /// Type of the key used for selectable items public class ISelectableItemsMessenger : MessengerBase - { + { private readonly ISelectableItems itemDevice; private readonly string _propName; @@ -16,16 +20,17 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// Constructs a messenger for a device that implements ISelectableItems /// - /// - /// - /// - /// + /// Unique identifier for the messenger + /// Path for message routing + /// Device that implements ISelectableItems + /// Property name for JSON serialization public ISelectableItemsMessenger(string key, string messagePath, ISelectableItems device, string propName) : base(key, messagePath, device as IKeyName) { itemDevice = device; _propName = propName; } + /// protected override void RegisterActions() { base.RegisterActions(); @@ -83,11 +88,21 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// State message for selectable items + /// + /// Type of the key used for selectable items public class ISelectableItemsStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the items dictionary + /// [JsonProperty("items")] public Dictionary Items { get; set; } + /// + /// Gets or sets the current item + /// [JsonProperty("currentItem")] public TKey CurrentItem { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITechPasswordMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITechPasswordMessenger.cs index 5b15d7ab..87450258 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITechPasswordMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITechPasswordMessenger.cs @@ -4,16 +4,26 @@ using PepperDash.Essentials.Core; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Messenger for devices that implement ITechPassword interface + /// public class ITechPasswordMessenger : MessengerBase { private readonly ITechPassword _room; + /// + /// Initializes a new instance of the ITechPasswordMessenger class + /// + /// Unique identifier for the messenger + /// Path for message routing + /// Room that implements ITechPassword public ITechPasswordMessenger(string key, string messagePath, ITechPassword room) : base(key, messagePath, room as IKeyName) { _room = room; } + /// protected override void RegisterActions() { @@ -64,23 +74,44 @@ namespace PepperDash.Essentials.AppServer.Messengers } + /// + /// State message for tech password information + /// public class ITechPasswordStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the tech password length + /// [JsonProperty("techPasswordLength", NullValueHandling = NullValueHandling.Ignore)] public int? TechPasswordLength { get; set; } } + /// + /// Event message for tech password validation result + /// public class ITechPasswordEventMessage : DeviceEventMessageBase { + /// + /// Gets or sets whether the password is valid + /// [JsonProperty("isValid", NullValueHandling = NullValueHandling.Ignore)] public bool? IsValid { get; set; } } + /// + /// Content for setting tech password + /// internal class SetTechPasswordContent { + /// + /// Gets or sets the old password + /// [JsonProperty("oldPassword")] public string OldPassword { get; set; } + /// + /// Gets or sets the new password + /// [JsonProperty("newPassword")] public string NewPassword { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/MessengerBase.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/MessengerBase.cs index c3a612bc..343ad33c 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/MessengerBase.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/MessengerBase.cs @@ -1,41 +1,57 @@ -using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Core.Logging; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.DeviceTypeInterfaces; -using System; -using System.Collections.Generic; -using System.Linq; namespace PepperDash.Essentials.AppServer.Messengers { /// - /// Provides a messaging bridge + /// Provides a messaging bridge between mobile control clients and Essentials devices. + /// This abstract base class handles message routing, action registration, and status updates. /// public abstract class MessengerBase : EssentialsDevice, IMobileControlMessenger { + /// + /// The device that this messenger is associated with + /// protected IKeyName _device; + /// + /// List of interfaces implemented by the associated device + /// private readonly List _deviceInterfaces; + /// + /// Dictionary of registered actions, keyed by path + /// private readonly Dictionary> _actions = new Dictionary>(); + /// + /// Gets the key of the associated device + /// public string DeviceKey => _device?.Key ?? ""; /// - /// + /// Gets the mobile control app server controller /// - public IMobileControl AppServerController { get; private set; } + /// + /// Gets the message path for this messenger + /// public string MessagePath { get; private set; } /// - /// + /// Initializes a new instance of the MessengerBase class /// - /// - /// + /// The unique key for this messenger + /// The message path for routing messages + /// Thrown when messagePath is null or empty protected MessengerBase(string key, string messagePath) : base(key) { @@ -47,6 +63,12 @@ namespace PepperDash.Essentials.AppServer.Messengers MessagePath = messagePath; } + /// + /// Initializes a new instance of the MessengerBase class with an associated device + /// + /// The unique key for this messenger + /// The message path for routing messages + /// The device to associate with this messenger protected MessengerBase(string key, string messagePath, IKeyName device) : this(key, messagePath) { @@ -56,7 +78,7 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// Gets the interfaces implmented on the device + /// Gets the interfaces implented on the device /// /// /// @@ -93,6 +115,11 @@ namespace PepperDash.Essentials.AppServer.Messengers action(id, content); } + /// + /// Adds an action to be executed when a message is received at the specified path + /// + /// The path to register the action for + /// The action to execute when the path is matched protected void AddAction(string path, Action action) { if (_actions.ContainsKey(path)) @@ -104,11 +131,19 @@ namespace PepperDash.Essentials.AppServer.Messengers _actions.Add(path, action); } + /// + /// Gets a list of all registered action paths + /// + /// A list of action paths public List GetActionPaths() { return _actions.Keys.ToList(); } + /// + /// Removes an action from the specified path + /// + /// The path to remove the action from protected void RemoveAction(string path) { if (!_actions.ContainsKey(path)) @@ -122,7 +157,6 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// Implemented in extending classes. Wire up API calls and feedback here /// - /// protected virtual void RegisterActions() { @@ -131,8 +165,8 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// Helper for posting status message /// - /// - /// + /// The device state message to post + /// Optional client ID to send the message to a specific client protected void PostStatusMessage(DeviceStateMessageBase message, string clientId = null) { try @@ -153,16 +187,22 @@ namespace PepperDash.Essentials.AppServer.Messengers message.Name = _device.Name; - var token = JToken.FromObject(message); - + var token = JToken.FromObject(message); + PostStatusMessage(token, MessagePath, clientId); } catch (Exception ex) { - this.LogError(ex, "Exception posting status message for {messagePath} to {clientId}", MessagePath, clientId ?? "all clients"); + this.LogError(ex, "Exception posting status message for {messagePath} to {clientId}", MessagePath, clientId ?? "all clients"); } } + /// + /// Posts a status message with a specific message type + /// + /// The message type to send + /// The device state message to post + /// Optional client ID to send the message to a specific client protected void PostStatusMessage(string type, DeviceStateMessageBase deviceState, string clientId = null) { try @@ -182,10 +222,16 @@ namespace PepperDash.Essentials.AppServer.Messengers } catch (Exception ex) { - this.LogError(ex, "Exception posting status message for {type} to {clientId}", type, clientId ?? "all clients"); + this.LogError(ex, "Exception posting status message for {type} to {clientId}", type, clientId ?? "all clients"); } } + /// + /// Posts a status message with JSON content + /// + /// The JSON content to send + /// The message type (defaults to MessagePath if empty) + /// Optional client ID to send the message to a specific client protected void PostStatusMessage(JToken content, string type = "", string clientId = null) { try @@ -198,6 +244,10 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// Posts an event message for the device + /// + /// The device event message to post protected void PostEventMessage(DeviceEventMessageBase message) { message.Key = _device.Key; @@ -211,6 +261,11 @@ namespace PepperDash.Essentials.AppServer.Messengers }); } + /// + /// Posts an event message with a specific event type + /// + /// The device event message to post + /// The event type to use protected void PostEventMessage(DeviceEventMessageBase message, string eventType) { message.Key = _device.Key; @@ -226,6 +281,10 @@ namespace PepperDash.Essentials.AppServer.Messengers }); } + /// + /// Posts an event message with only an event type + /// + /// The event type to post protected void PostEventMessage(string eventType) { AppServerController?.SendMessageObject(new MobileControlMessage @@ -237,6 +296,9 @@ namespace PepperDash.Essentials.AppServer.Messengers } + /// + /// Base class for device messages containing common properties like key, name, and message type + /// public abstract class DeviceMessageBase { /// @@ -257,21 +319,28 @@ namespace PepperDash.Essentials.AppServer.Messengers [JsonProperty("messageType")] public string MessageType => GetType().Name; + /// + /// Gets or sets the base path for the message + /// [JsonProperty("messageBasePath")] public string MessageBasePath { get; set; } } /// - /// Base class for state messages that includes the type of message and the implmented interfaces + /// Base class for state messages that includes the type of message and the implemented interfaces /// public class DeviceStateMessageBase : DeviceMessageBase { /// - /// The interfaces implmented by the device sending the messsage + /// The interfaces implented by the device sending the messsage /// [JsonProperty("interfaces")] public List Interfaces { get; private set; } + /// + /// Sets the interfaces implemented by the device + /// + /// List of interface names to set public void SetInterfaces(List interfaces) { Interfaces = interfaces; diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/PressAndHoldHandler.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/PressAndHoldHandler.cs index 9ec2a4e4..aefb8024 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/PressAndHoldHandler.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/PressAndHoldHandler.cs @@ -1,19 +1,34 @@ -using Crestron.SimplSharp; +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; using Newtonsoft.Json.Linq; using PepperDash.Core; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Static handler for managing press and hold button actions with automatic timeout functionality + /// public static class PressAndHoldHandler { + /// + /// The interval in milliseconds for button heartbeat timeout + /// private const long ButtonHeartbeatInterval = 1000; + /// + /// Dictionary of active timers for pressed actions, keyed by device key + /// private static readonly Dictionary _pushedActions = new Dictionary(); + /// + /// Dictionary of action handlers for different button states + /// private static readonly Dictionary>> _pushedActionHandlers; + /// + /// Static constructor that initializes the action handlers for different button states + /// static PressAndHoldHandler() { _pushedActionHandlers = new Dictionary>> @@ -24,6 +39,11 @@ namespace PepperDash.Essentials.AppServer.Messengers }; } + /// + /// Adds a timer for a device key and executes the action with true state + /// + /// The unique key for the device + /// The action to execute with boolean state private static void AddTimer(string deviceKey, Action action) { Debug.LogMessage(Serilog.Events.LogEventLevel.Debug, "Attempting to add timer for {deviceKey}", deviceKey); @@ -50,6 +70,11 @@ namespace PepperDash.Essentials.AppServer.Messengers _pushedActions.Add(deviceKey, cancelTimer); } + /// + /// Resets an existing timer for the specified device key + /// + /// The unique key for the device + /// The action associated with the timer private static void ResetTimer(string deviceKey, Action action) { Debug.LogMessage(Serilog.Events.LogEventLevel.Debug, "Attempting to reset timer for {deviceKey}", deviceKey); @@ -65,6 +90,11 @@ namespace PepperDash.Essentials.AppServer.Messengers cancelTimer.Reset(ButtonHeartbeatInterval); } + /// + /// Stops and removes the timer for the specified device key + /// + /// The unique key for the device + /// The action to execute with false state before stopping private static void StopTimer(string deviceKey, Action action) { Debug.LogMessage(Serilog.Events.LogEventLevel.Debug, "Attempting to stop timer for {deviceKey}", deviceKey); @@ -82,6 +112,11 @@ namespace PepperDash.Essentials.AppServer.Messengers _pushedActions.Remove(deviceKey); } + /// + /// Gets the appropriate press and hold handler for the specified value + /// + /// The button state value (pressed, held, released) + /// The handler action for the specified state, or null if not found public static Action> GetPressAndHoldHandler(string value) { Debug.LogMessage(Serilog.Events.LogEventLevel.Debug, "Getting press and hold handler for {value}", value); @@ -97,6 +132,12 @@ namespace PepperDash.Essentials.AppServer.Messengers return handler; } + /// + /// Handles press and hold messages by parsing the content and executing the appropriate handler + /// + /// The unique key for the device + /// The JSON content containing the button state + /// The action to execute with boolean state public static void HandlePressAndHold(string deviceKey, JToken content, Action action) { var msg = content.ToObject>(); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLAtcMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLAtcMessenger.cs index 3222289a..fd212f56 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLAtcMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLAtcMessenger.cs @@ -1,32 +1,39 @@ -using Crestron.SimplSharpPro.DeviceSupport; +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; using Newtonsoft.Json.Linq; using PepperDash.Essentials.Core; using PepperDash.Essentials.Devices.Common.Codec; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// SIMPL messenger for audio-only conference devices that provides audio calling functionality + /// // ReSharper disable once InconsistentNaming public class SIMPLAtcMessenger : MessengerBase { + /// + /// The EISC (Ethernet Intersystem Communication) device + /// private readonly BasicTriList _eisc; + /// + /// Gets the join map for SIMPL ATC operations + /// public SIMPLAtcJoinMap JoinMap { get; private set; } - /// - /// + /// The current active call item for audio calls /// private readonly CodecActiveCallItem _currentCallItem; - /// - /// + /// Initializes a new instance of the SIMPLAtcMessenger class /// - /// - /// - /// + /// Unique identifier for the messenger + /// The EISC device for communication + /// Path for message routing public SIMPLAtcMessenger(string key, BasicTriList eisc, string messagePath) : base(key, messagePath) { @@ -38,7 +45,7 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// + /// Sends the current status of the audio conference device to connected clients /// private void SendFullStatus() { @@ -53,9 +60,8 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// + /// Registers actions and feedback handlers for the SIMPL ATC messenger /// - /// protected override void RegisterActions() { //EISC.SetStringSigAction(SCurrentDialString, s => PostStatusMessage(new { currentDialString = s })); @@ -133,7 +139,7 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// + /// Sends the current calls list to connected clients /// private void SendCallsList() { @@ -145,9 +151,9 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// Turns the + /// Gets the current call list based on the call status /// - /// + /// A list containing the current call item if connected, or an empty list if disconnected private List GetCurrentCallList() { return _currentCallItem.Status == eCodecCallStatus.Disconnected diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLCameraMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLCameraMessenger.cs index bf4eb765..3fd2cb58 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLCameraMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLCameraMessenger.cs @@ -1,14 +1,18 @@ -using Crestron.SimplSharpPro.DeviceSupport; +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; using Newtonsoft.Json.Linq; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.DeviceTypeInterfaces; using PepperDash.Essentials.Devices.Common.Cameras; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for camera control operations in SIMPL-based systems. + /// Handles camera movement, zoom, preset management, and mode control. + /// // ReSharper disable once InconsistentNaming public class SIMPLCameraMessenger : MessengerBase { @@ -16,7 +20,13 @@ namespace PepperDash.Essentials.AppServer.Messengers private readonly CameraControllerJoinMap _joinMap; - + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The basic tri-list for SIMPL communication. + /// The message path for camera control messages. + /// The starting join number for SIMPL signal mapping. public SIMPLCameraMessenger(string key, BasicTriList eisc, string messagePath, uint joinStart) : base(key, messagePath) { @@ -32,6 +42,10 @@ namespace PepperDash.Essentials.AppServer.Messengers } + /// + /// Registers actions for handling camera control operations. + /// Includes camera movement, zoom, preset management, and mode control actions. + /// protected override void RegisterActions() { AddAction("/fullStatus", (id, content) => SendCameraFullMessageObject()); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLDirectRouteMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLDirectRouteMessenger.cs index b0ddc47a..cd0d6dcf 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLDirectRouteMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLDirectRouteMessenger.cs @@ -1,19 +1,35 @@ -using Crestron.SimplSharpPro.DeviceSupport; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for direct routing operations in SIMPL-based systems. + /// Handles source selection, destination routing, and advanced sharing mode functionality. + /// public class SimplDirectRouteMessenger : MessengerBase { private readonly BasicTriList _eisc; + /// + /// Gets the join map for SIMPL direct route actions. + /// public MobileControlSIMPLRunDirectRouteActionJoinMap JoinMap { get; private set; } + /// + /// Gets or sets the dictionary of destination items for routing operations. + /// public Dictionary DestinationList { get; set; } + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The basic tri-list for SIMPL communication. + /// The message path for routing messages. public SimplDirectRouteMessenger(string key, BasicTriList eisc, string messagePath) : base(key, messagePath) { _eisc = eisc; @@ -25,6 +41,10 @@ namespace PepperDash.Essentials.AppServer.Messengers #region Overrides of MessengerBase + /// + /// Registers actions for handling direct route messaging operations. + /// Includes audio source selection, full status reporting, and advanced sharing mode controls. + /// protected override void RegisterActions() { Debug.Console(2, "********** Direct Route Messenger CustomRegisterWithAppServer **********"); @@ -92,6 +112,10 @@ namespace PepperDash.Essentials.AppServer.Messengers )); } + /// + /// Registers routing actions for each destination in the destination list. + /// Sets up feedback handlers and source selection actions for individual destinations. + /// public void RegisterForDestinationPaths() { //handle routing feedback from SIMPL @@ -114,6 +138,11 @@ namespace PepperDash.Essentials.AppServer.Messengers #endregion + /// + /// Updates the source selection for a specific destination and posts a status message. + /// + /// The key of the selected source. + /// The key of the destination being updated. private void UpdateSourceForDestination(string sourceKey, string destKey) { PostStatusMessage(JToken.FromObject(new diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLRouteMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLRouteMessenger.cs index d6d59cc0..7c0e5efb 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLRouteMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLRouteMessenger.cs @@ -6,21 +6,34 @@ using PepperDash.Essentials.Core.DeviceTypeInterfaces; namespace PepperDash.Essentials.AppServer.Messengers { - + /// + /// Provides messaging capabilities for routing operations in SIMPL-based systems. + /// Handles source selection and routing status feedback. + /// public class SIMPLRouteMessenger : MessengerBase { private readonly BasicTriList _eisc; private readonly uint _joinStart; + /// + /// Defines the string join mappings for SIMPL routing operations. + /// public class StringJoin { /// - /// 1 + /// Join number for current source information (1). /// public const uint CurrentSource = 1; } + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The basic tri-list for SIMPL communication. + /// The message path for routing messages. + /// The starting join number for SIMPL signal mapping. public SIMPLRouteMessenger(string key, BasicTriList eisc, string messagePath, uint joinStart) : base(key, messagePath) { @@ -30,6 +43,10 @@ namespace PepperDash.Essentials.AppServer.Messengers _eisc.SetStringSigAction(_joinStart + StringJoin.CurrentSource, SendRoutingFullMessageObject); } + /// + /// Registers actions for handling routing operations and status reporting. + /// Includes full status requests and source selection actions. + /// protected override void RegisterActions() { AddAction("/fullStatus", @@ -43,6 +60,11 @@ namespace PepperDash.Essentials.AppServer.Messengers }); } + /// + /// Unregisters this messenger from the mobile control app server. + /// Removes all registered actions and clears SIMPL signal actions. + /// + /// The mobile control app server controller. public void CustomUnregisterWithAppServer(IMobileControl appServerController) { appServerController.RemoveAction(MessagePath + "/fullStatus"); diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLVtcMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLVtcMessenger.cs index a9872285..9fd00229 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLVtcMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SIMPLVtcMessenger.cs @@ -1,33 +1,51 @@ -using Crestron.SimplSharpPro.DeviceSupport; +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Devices.Common.Cameras; using PepperDash.Essentials.Devices.Common.Codec; -using System; -using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// SIMPL messenger for video conference devices that provides video calling and camera control functionality + /// // ReSharper disable once InconsistentNaming public class SIMPLVtcMessenger : MessengerBase { + /// + /// The EISC (Ethernet Intersystem Communication) device + /// private readonly BasicTriList _eisc; + /// + /// Gets the join map for SIMPL VTC operations + /// public SIMPLVtcJoinMap JoinMap { get; private set; } + /// + /// The current active call item for video calls + /// private readonly CodecActiveCallItem _currentCallItem; + /// + /// The incoming call item for video calls + /// private CodecActiveCallItem _incomingCallItem; + /// + /// The previous directory length for tracking changes + /// private ushort _previousDirectoryLength = 701; /// - /// + /// Initializes a new instance of the SIMPLVtcMessenger class /// - /// - /// - /// + /// Unique identifier for the messenger + /// The EISC device for communication + /// Path for message routing public SIMPLVtcMessenger(string key, BasicTriList eisc, string messagePath) : base(key, messagePath) { @@ -39,9 +57,8 @@ namespace PepperDash.Essentials.AppServer.Messengers } /// - /// + /// Registers actions and feedback handlers for the SIMPL VTC messenger /// - /// protected override void RegisterActions() { _eisc.SetStringSigAction(JoinMap.HookState.JoinNumber, s => diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs index ff41670a..32d59204 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs @@ -1,20 +1,34 @@ -using Newtonsoft.Json; +using System; +using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core.Shades; -using System; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for shade control operations. + /// Handles shade open, close, and stop commands for shades that support these operations. + /// public class IShadesOpenCloseStopMessenger : MessengerBase { private readonly IShadesOpenCloseStop device; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The shade device that provides open/close/stop functionality. + /// The message path for shade control messages. public IShadesOpenCloseStopMessenger(string key, IShadesOpenCloseStop shades, string messagePath) : base(key, messagePath, shades as IKeyName) { device = shades; } + /// + /// Registers actions for handling shade control operations. + /// Includes shade open, close, stop, and full status reporting. + /// protected override void RegisterActions() { base.RegisterActions(); @@ -86,14 +100,26 @@ namespace PepperDash.Essentials.AppServer.Messengers } } + /// + /// Represents a shade state message containing shade status and control information. + /// public class ShadeBaseStateMessage : DeviceStateMessageBase { + /// + /// Gets or sets the label for the middle button control. + /// [JsonProperty("middleButtonLabel", NullValueHandling = NullValueHandling.Ignore)] public string MiddleButtonLabel { get; set; } + /// + /// Gets or sets a value indicating whether the shade is open. + /// [JsonProperty("isOpen", NullValueHandling = NullValueHandling.Ignore)] public bool? IsOpen { get; set; } + /// + /// Gets or sets a value indicating whether the shade is closed. + /// [JsonProperty("isClosed", NullValueHandling = NullValueHandling.Ignore)] public bool? IsClosed { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SystemMonitorMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SystemMonitorMessenger.cs index 2cb2ced0..a01b9c6c 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SystemMonitorMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/SystemMonitorMessenger.cs @@ -1,17 +1,28 @@ -using Crestron.SimplSharp; +using System; +using System.Threading.Tasks; +using Crestron.SimplSharp; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PepperDash.Core; using PepperDash.Essentials.Core.Monitoring; -using System; -using System.Threading.Tasks; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Provides messaging capabilities for system monitoring operations. + /// Handles system performance metrics, program status reporting, and monitoring data communication. + /// public class SystemMonitorMessenger : MessengerBase { private readonly SystemMonitorController systemMonitor; + /// + /// Initializes a new instance of the class. + /// + /// The unique identifier for this messenger instance. + /// The system monitor controller for monitoring operations. + /// The message path for system monitor messages. + /// Thrown when sysMon is null. public SystemMonitorMessenger(string key, SystemMonitorController sysMon, string messagePath) : base(key, messagePath, sysMon) { @@ -66,7 +77,7 @@ namespace PepperDash.Essentials.AppServer.Messengers private void SendSystemMonitorStatusMessage() { // This takes a while, launch a new thread - + Task.Run(() => PostStatusMessage(JToken.FromObject(new SystemMonitorStateMessage { @@ -80,29 +91,54 @@ namespace PepperDash.Essentials.AppServer.Messengers )); } + /// + /// Registers actions for handling system monitor operations. + /// Includes full status reporting for system monitoring data. + /// protected override void RegisterActions() { AddAction("/fullStatus", (id, content) => SendFullStatusMessage()); } } + /// + /// Represents the system monitor state message containing system information and version details. + /// public class SystemMonitorStateMessage { + /// + /// Gets or sets the system time zone offset. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public int TimeZone { get; set; } + /// + /// Gets or sets the system time zone name. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public string TimeZoneName { get; set; } + /// + /// Gets or sets the IO controller version information. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public string IoControllerVersion { get; set; } + /// + /// Gets or sets the SNMP version information. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public string SnmpVersion { get; set; } + /// + /// Gets or sets the BACnet version information. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public string BacnetVersion { get; set; } + /// + /// Gets or sets the controller version information. + /// [JsonProperty("timeZone", NullValueHandling = NullValueHandling.Ignore)] public string ControllerVersion { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlMessage.cs b/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlMessage.cs index 6e92d9da..f9dcdd19 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlMessage.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlMessage.cs @@ -4,14 +4,26 @@ using PepperDash.Essentials.Core.DeviceTypeInterfaces; namespace PepperDash.Essentials.AppServer.Messengers { + /// + /// Represents a mobile control message that can be sent between clients and the system + /// public class MobileControlMessage : IMobileControlMessage { + /// + /// Gets or sets the message type/path for routing + /// [JsonProperty("type")] public string Type { get; set; } + /// + /// Gets or sets the client ID this message is intended for (null for broadcast) + /// [JsonProperty("clientId")] public string ClientId { get; set; } + /// + /// Gets or sets the JSON content of the message + /// [JsonProperty("content")] public JToken Content { get; set; } } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlSimpleContent.cs b/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlSimpleContent.cs index 1d804758..bf67ea65 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlSimpleContent.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/MobileControlSimpleContent.cs @@ -2,8 +2,15 @@ namespace PepperDash.Essentials.AppServer { + /// + /// Generic container for simple mobile control message content with a single value + /// + /// The type of the value contained in the message public class MobileControlSimpleContent { + /// + /// Gets or sets the value of the message content + /// [JsonProperty("value", NullValueHandling = NullValueHandling.Ignore)] public T Value { get; set; } }