增加云台移动、缩放、聚集、光圈、校时、重启对 AiVideo 项目的支持
This commit is contained in:
79
SHH.CameraService/GrpcImpls/Handlers/TimeSyncHandler.cs
Normal file
79
SHH.CameraService/GrpcImpls/Handlers/TimeSyncHandler.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using Ayay.SerilogLogs;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Serilog;
|
||||
using SHH.CameraSdk;
|
||||
using SHH.Contracts;
|
||||
|
||||
namespace SHH.CameraService;
|
||||
|
||||
/// <summary>
|
||||
/// 设备时间同步处理器
|
||||
/// 响应 gRpc 指令:ProtocolCodes.Time_Sync
|
||||
/// </summary>
|
||||
public class TimeSyncHandler : ICommandHandler
|
||||
{
|
||||
private readonly ILogger _sysLog = Log.ForContext("SourceContext", LogModules.Core);
|
||||
private readonly CameraManager _cameraManager;
|
||||
|
||||
// Optimized: 需在 ProtocolCodes 中定义此常量,确保与网关下发的 CmdCode 对应
|
||||
public string ActionName => ProtocolCodes.Device_TimeSync;
|
||||
|
||||
public TimeSyncHandler(CameraManager cameraManager)
|
||||
{
|
||||
_cameraManager = cameraManager ?? throw new ArgumentNullException(nameof(cameraManager));
|
||||
}
|
||||
|
||||
public async Task ExecuteAsync(JToken payload)
|
||||
{
|
||||
// 1. 解析基础参数
|
||||
var deviceId = payload["DeviceId"]?.Value<int>() ?? 0;
|
||||
var method = payload["Method"]?.Value<string>()?.ToLower(); // "get" 或 "set"
|
||||
|
||||
if (deviceId <= 0)
|
||||
{
|
||||
_sysLog.Warning("[TimeSync] 无效指令:设备ID非法");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 获取设备并校验能力
|
||||
var device = _cameraManager.GetDevice(deviceId);
|
||||
if (device == null)
|
||||
{
|
||||
_sysLog.Warning($"[TimeSync] 设备 {deviceId} 不存在");
|
||||
return;
|
||||
}
|
||||
|
||||
// Modified: 根据 ISyncFeature.cs 校验是否实现 ITimeSyncFeature 接口
|
||||
if (!(device is ITimeSyncFeature syncFeature))
|
||||
{
|
||||
_sysLog.Warning($"[TimeSync] 设备 {deviceId} 不支持时间同步功能");
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 业务逻辑分支
|
||||
try
|
||||
{
|
||||
if (method == "set")
|
||||
{
|
||||
// 解析待设置的时间,若无则默认使用服务器当前系统时间
|
||||
var targetTime = payload["SyncTime"]?.Value<DateTime>() ?? DateTime.Now;
|
||||
|
||||
// 调用接口设置时间
|
||||
await syncFeature.SetTimeAsync(targetTime);
|
||||
_sysLog.Information($"[TimeSync] 设备 {deviceId} 时间已同步为: {targetTime:yyyy-MM-dd HH:mm:ss}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 执行获取时间
|
||||
var deviceTime = await syncFeature.GetTimeAsync();
|
||||
_sysLog.Information($"[TimeSync] 获取设备 {deviceId} 当前时间成功: {deviceTime:yyyy-MM-dd HH:mm:ss}");
|
||||
|
||||
// TODO: 若需要将结果返回给网关,需在此处调用 GatewayService 异步回传
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_sysLog.Error(ex, $"[TimeSync] 设备 {deviceId} 操作失败 ({method})");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user