using Newtonsoft.Json; using PepperDash.Essentials.Devices.Common.Cameras; using System; using System.Collections.Generic; namespace PepperDash.Essentials.AppServer.Messengers { /// /// Messenger for devices that implement the IHasCameras interface. /// [Obsolete("Use IHasCamerasWithControlsMessenger instead. This class will be removed in a future version")] public class IHasCamerasMessenger : MessengerBase { /// /// Device being bridged that implements IHasCameras interface. /// public IHasCameras CameraController { get; private set; } /// /// Messenger for devices that implement IHasCameras interface. /// /// /// /// /// public IHasCamerasMessenger(string key, string messagePath, IHasCameras cameraController) : base(key, messagePath, cameraController) { CameraController = cameraController ?? throw new ArgumentNullException("cameraController"); CameraController.CameraSelected += CameraController_CameraSelected; } private void CameraController_CameraSelected(object sender, CameraSelectedEventArgs e) { PostStatusMessage(new IHasCamerasStateMessage { SelectedCamera = e.SelectedCamera }); } /// /// Registers the actions for this messenger. /// /// protected override void RegisterActions() { base.RegisterActions(); AddAction("/fullStatus", (id, context) => SendFullStatus(id)); AddAction("/cameraListStatus", (id, content) => SendFullStatus(id)); AddAction("/selectCamera", (id, content) => { var cameraKey = content?.ToObject(); if (!string.IsNullOrEmpty(cameraKey)) { CameraController.SelectCamera(cameraKey); } else { throw new ArgumentException("Content must be a string representing the camera key"); } }); } private void SendFullStatus(string clientId) { var state = new IHasCamerasStateMessage { CameraList = CameraController.Cameras, SelectedCamera = CameraController.SelectedCamera }; PostStatusMessage(state, clientId); } } /// /// State message for devices that implement the IHasCameras interface. /// public class IHasCamerasStateMessage : DeviceStateMessageBase { /// /// List of cameras available in the device. /// [JsonProperty("cameraList", NullValueHandling = NullValueHandling.Ignore)] public List CameraList { get; set; } /// /// The currently selected camera on the device. /// [JsonProperty("selectedCamera", NullValueHandling = NullValueHandling.Ignore)] public CameraBase SelectedCamera { get; set; } } }