增加云台移动、缩放、聚集、光圈、校时、重启对 AiVideo 项目的支持
This commit is contained in:
69
SHH.CameraService/GrpcImpls/Handlers/DeviceRebootHandler.cs
Normal file
69
SHH.CameraService/GrpcImpls/Handlers/DeviceRebootHandler.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using Ayay.SerilogLogs;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Serilog;
|
||||
using SHH.CameraSdk;
|
||||
using SHH.Contracts;
|
||||
|
||||
namespace SHH.CameraService;
|
||||
|
||||
/// <summary>
|
||||
/// 设备重启指令处理器
|
||||
/// 响应 gRpc 指令:ProtocolCodes.Device_Reboot
|
||||
/// </summary>
|
||||
public class DeviceRebootHandler : ICommandHandler
|
||||
{
|
||||
private readonly ILogger _sysLog = Log.ForContext("SourceContext", LogModules.Core);
|
||||
private readonly CameraManager _cameraManager;
|
||||
|
||||
/// <summary>指令名称(需在 ProtocolCodes 中定义 Device_Reboot)</summary>
|
||||
public string ActionName => ProtocolCodes.Device_Reboot;
|
||||
|
||||
public DeviceRebootHandler(CameraManager cameraManager)
|
||||
{
|
||||
_cameraManager = cameraManager ?? throw new ArgumentNullException(nameof(cameraManager));
|
||||
}
|
||||
|
||||
public async Task ExecuteAsync(JToken payload)
|
||||
{
|
||||
// 1. 解析参数(假设重启指令至少包含 DeviceId)
|
||||
// Optimized: 使用通用的基础 DTO 或直接解析 DeviceId,避免为简单的重启创建过多复杂 DTO
|
||||
var deviceId = payload["DeviceId"]?.Value<int>() ?? 0;
|
||||
|
||||
if (deviceId <= 0)
|
||||
{
|
||||
_sysLog.Warning("[Reboot] 无效指令:设备ID非法");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 获取设备实例
|
||||
var device = _cameraManager.GetDevice(deviceId);
|
||||
if (device == null)
|
||||
{
|
||||
_sysLog.Warning($"[Reboot] 设备 {deviceId} 不存在");
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 校验重启能力 (参考 PtzControlHandler 模式)
|
||||
// Modified: 根据 ISyncFeature.cs 定义,检查是否实现了 IRebootFeature 接口
|
||||
if (!(device is IRebootFeature rebootFeature))
|
||||
{
|
||||
_sysLog.Warning($"[Reboot] 设备 {deviceId} 不支持远程重启接口");
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. 执行重启
|
||||
try
|
||||
{
|
||||
_sysLog.Information($"[Reboot] 正在向设备 {deviceId} 发送重启指令...");
|
||||
|
||||
// 调用接口定义的异步方法
|
||||
await rebootFeature.RebootAsync();
|
||||
|
||||
_sysLog.Information($"[Reboot] 设备 {deviceId} 重启指令发送成功");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_sysLog.Error($"[Reboot] 设备 {deviceId} 重启失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user