feat: Add new messengers for various device interfaces and remove VideoCodecBaseMessenger

- Implemented IHasMeetingInfoMessenger to handle meeting information updates.
- Created IHasReadyMessenger for devices indicating readiness status.
- Added IHasStandbyModeMessenger to manage standby mode actions.
- Introduced IPrivacyMessenger for privacy mode control.
- Developed IVideoCodecInfoMessenger to provide codec information.
- Removed the obsolete VideoCodecBaseMessenger class.
- Updated MessengerFactoryRegistry to register new messengers for IHasReady, IHasMeetingInfo, IHasStartMeeting, IHasStandbyMode, IPrivacy, and IVideoCodecInfo interfaces.

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Neil Dorin 2026-05-08 12:10:56 -06:00
parent b41c30cdd0
commit 91aa0efa5f
22 changed files with 1197 additions and 567 deletions

View file

@ -0,0 +1,21 @@
using System.Collections.Generic;
namespace PepperDash.Essentials.Devices.Common.Codec;
/// <summary>
/// Defines call control functionality for a codec, extending the base dialer interface
/// with active call list access and meeting dialing.
/// </summary>
public interface ICodecCallControls : IHasDialer
{
/// <summary>
/// Gets the list of currently active, dialing, or incoming calls
/// </summary>
List<CodecActiveCallItem> ActiveCalls { get; }
/// <summary>
/// Dials the specified meeting
/// </summary>
/// <param name="meeting">The meeting to dial</param>
void Dial(Meeting meeting);
}

View file

@ -53,5 +53,7 @@ public interface IHasDialer
/// Gets a value indicating whether the device is currently in a call
/// </summary>
bool IsInCall { get; }
}

View file

@ -5,7 +5,7 @@ namespace PepperDash.Essentials.Devices.Common.Codec
/// <summary>
/// Implements a common set of data about a codec
/// </summary>
public interface iVideoCodecInfo
public interface IVideoCodecInfo
{
/// <summary>
/// Gets the codec information

View file

@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using Crestron.SimplSharp.CrestronIO;
using Crestron.SimplSharpPro.DeviceSupport;
using Crestron.SimplSharp;
using PepperDash.Core;
using PepperDash.Core.Intersystem;
using PepperDash.Core.Intersystem.Tokens;
@ -29,7 +28,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec;
/// Also contains the logic to link commonly implemented interfaces to the API bridge.
/// </summary>
public abstract class VideoCodecBase : ReconfigurableDevice, IRoutingInputsOutputs,
IUsageTracking, IHasDialer, IHasContentSharing, ICodecAudio, iVideoCodecInfo, IBridgeAdvanced, IHasStandbyMode
IUsageTracking, ICodecCallControls, IHasContentSharing, ICodecAudio, IVideoCodecInfo, IBridgeAdvanced, IHasStandbyMode, IHasReady
{
private const int XSigEncoding = 28591;
@ -338,7 +337,7 @@ public abstract class VideoCodecBase : ReconfigurableDevice, IRoutingInputsOutpu
/// <summary>
/// Fired when the Codec is ready to be used
/// </summary>
public event EventHandler<EventArgs> IsReadyChange;
public event EventHandler<IsReadyEventArgs> IsReadyEvent;
/// <summary>
/// Dials the specified meeting
@ -405,7 +404,7 @@ public abstract class VideoCodecBase : ReconfigurableDevice, IRoutingInputsOutpu
try
{
IsReady = true;
IsReadyChange?.Invoke(this, new EventArgs());
IsReadyEvent?.Invoke(this, new IsReadyEventArgs(IsReady));
}
catch (Exception e)
{
@ -498,7 +497,7 @@ public abstract class VideoCodecBase : ReconfigurableDevice, IRoutingInputsOutpu
LinkVideoCodecInfoToApi(trilist, joinMap);
// Register for this event to link any functions that require the codec to be ready first
codec.IsReadyChange += (o, a) =>
codec.IsReadyEvent += (o, a) =>
{
if (codec is IHasCodecCameras)
{