mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-07-02 10:38:16 +00:00
feat: Add IHasCameraMuteMessenger and IHasCameraPresetsMessenger for camera control messaging
This commit is contained in:
parent
48e64a291f
commit
a27f604660
2 changed files with 187 additions and 0 deletions
|
|
@ -0,0 +1,89 @@
|
|||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Core.Logging;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||
|
||||
namespace PepperDash.Essentials.AppServer.Messengers
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a messaging bridge for devices implementing <see cref="IHasCameraMute"/>
|
||||
/// </summary>
|
||||
public class IHasCameraMuteMessenger : MessengerBase
|
||||
{
|
||||
private readonly IHasCameraMute _cameraMute;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="IHasCameraMuteMessenger"/> class.
|
||||
/// </summary>
|
||||
/// <param name="key">The key for the messenger.</param>
|
||||
/// <param name="messagePath">The message path for the messenger.</param>
|
||||
/// <param name="device">The device implementing <see cref="IHasCameraMute"/>.</param>
|
||||
public IHasCameraMuteMessenger(string key, string messagePath, EssentialsDevice device)
|
||||
: base(key, messagePath, device)
|
||||
{
|
||||
_cameraMute = device as IHasCameraMute ?? throw new ArgumentNullException(nameof(device));
|
||||
_cameraMute.CameraIsMutedFeedback.OutputChange += CameraIsMutedFeedback_OutputChange;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void RegisterActions()
|
||||
{
|
||||
base.RegisterActions();
|
||||
|
||||
AddAction("/fullStatus", (id, content) => SendFullStatus(id));
|
||||
AddAction("/cameraMuteStatus", (id, content) => SendFullStatus(id));
|
||||
|
||||
AddAction("/cameraMuteOn", (id, content) => _cameraMute.CameraMuteOn());
|
||||
AddAction("/cameraMuteOff", (id, content) => _cameraMute.CameraMuteOff());
|
||||
AddAction("/cameraMuteToggle", (id, content) => _cameraMute.CameraMuteToggle());
|
||||
}
|
||||
|
||||
private void CameraIsMutedFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
PostStatusMessage(new IHasCameraMuteStateMessage
|
||||
{
|
||||
CameraIsMuted = e.BoolValue
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.LogError(ex, "Error posting camera mute state");
|
||||
}
|
||||
}
|
||||
|
||||
private void SendFullStatus(string id = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var state = new IHasCameraMuteStateMessage
|
||||
{
|
||||
CameraIsMuted = _cameraMute.CameraIsMutedFeedback.BoolValue
|
||||
};
|
||||
|
||||
Task.Run(() => PostStatusMessage(state, id));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.LogError(ex, "Error sending camera mute full status");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// State message for <see cref="IHasCameraMute"/>
|
||||
/// </summary>
|
||||
public class IHasCameraMuteStateMessage : DeviceStateMessageBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the camera is muted. Null if unknown or not applicable.
|
||||
/// </summary>
|
||||
[JsonProperty("cameraIsMuted", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool? CameraIsMuted { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Core.Logging;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||
|
||||
namespace PepperDash.Essentials.AppServer.Messengers
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a messaging bridge for devices implementing <see cref="IHasCameraPresets"/>
|
||||
/// </summary>
|
||||
public class IHasCameraPresetsMessenger : MessengerBase
|
||||
{
|
||||
private readonly IHasCameraPresets _cameraPresets;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="IHasCameraPresetsMessenger"/> class.
|
||||
/// </summary>
|
||||
/// <param name="key">The key for the messenger.</param>
|
||||
/// <param name="messagePath">The message path for the messenger.</param>
|
||||
/// <param name="device">The device implementing <see cref="IHasCameraPresets"/>.</param>
|
||||
public IHasCameraPresetsMessenger(string key, string messagePath, EssentialsDevice device)
|
||||
: base(key, messagePath, device)
|
||||
{
|
||||
_cameraPresets = device as IHasCameraPresets ?? throw new ArgumentNullException(nameof(device));
|
||||
_cameraPresets.PresetsListHasChanged += PresetsListHasChanged;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void RegisterActions()
|
||||
{
|
||||
base.RegisterActions();
|
||||
|
||||
AddAction("/fullStatus", (id, content) => SendFullStatus(id));
|
||||
AddAction("/presetsStatus", (id, content) => SendFullStatus(id));
|
||||
|
||||
AddAction("/recallPreset", (id, content) =>
|
||||
{
|
||||
var msg = content.ToObject<MobileControlSimpleContent<int>>();
|
||||
_cameraPresets.PresetSelect(msg.Value);
|
||||
});
|
||||
|
||||
AddAction("/savePreset", (id, content) =>
|
||||
{
|
||||
var msg = content.ToObject<MobileControlSimpleContent<int>>();
|
||||
_cameraPresets.PresetStore(msg.Value, string.Empty);
|
||||
});
|
||||
}
|
||||
|
||||
private void PresetsListHasChanged(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
PostStatusMessage(new IHasCameraPresetsStateMessage
|
||||
{
|
||||
Presets = _cameraPresets.Presets
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.LogError(ex, "Error posting camera presets state");
|
||||
}
|
||||
}
|
||||
|
||||
private void SendFullStatus(string id = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var state = new IHasCameraPresetsStateMessage
|
||||
{
|
||||
Presets = _cameraPresets.Presets
|
||||
};
|
||||
|
||||
Task.Run(() => PostStatusMessage(state, id));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.LogError(ex, "Error sending camera presets full status");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// State message for <see cref="IHasCameraPresets"/>
|
||||
/// </summary>
|
||||
public class IHasCameraPresetsStateMessage : DeviceStateMessageBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the list of camera presets.
|
||||
/// </summary>
|
||||
[JsonProperty("presets", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public List<CameraPreset> Presets { get; set; }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue