在 AiVideo 中能看到图像
增加了在线状态同步逻辑
This commit is contained in:
41
SHH.CameraDashboard/Services/Payloads/CommandProcessor.cs
Normal file
41
SHH.CameraDashboard/Services/Payloads/CommandProcessor.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using MessagePack;
|
||||
using SHH.Contracts;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace SHH.CameraDashboard.Services.Processors
|
||||
{
|
||||
/// <summary>
|
||||
/// [协议处理器] 处理来自服务端的反向指令 (COMMAND)
|
||||
/// 场景:服务端主动要求客户端执行某些动作(如弹出实时画面、同步系统配置等)
|
||||
/// </summary>
|
||||
public class CommandProcessor : IProtocolProcessor
|
||||
{
|
||||
public string ProtocolType => "COMMAND";
|
||||
private readonly CommandBusClient _bus;
|
||||
|
||||
public CommandProcessor(CommandBusClient bus)
|
||||
{
|
||||
_bus = bus;
|
||||
}
|
||||
|
||||
public void Process(byte[] identity, byte[] payloadBytes)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 1. 反序列化指令载体
|
||||
var payload = MessagePackSerializer.Deserialize<CommandPayload>(payloadBytes);
|
||||
if (payload == null) return;
|
||||
|
||||
// 2. 核心:触发总线上的指令接收事件
|
||||
// 让监听该事件的 ViewModel 或全局管理器去执行具体业务
|
||||
_bus.RaiseCommandReceived(payload);
|
||||
|
||||
Debug.WriteLine($"[Bus] 收到服务端反向指令: {payload.CmdCode}, 目标: {payload.TargetId}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"[Bus-Err] CommandProcessor 解析异常: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using MessagePack;
|
||||
using SHH.CameraDashboard;
|
||||
using SHH.CameraDashboard.Services;
|
||||
using SHH.Contracts;
|
||||
|
||||
public class CommandResultProcessor : IProtocolProcessor
|
||||
{
|
||||
public string ProtocolType => "COMMAND_RESULT";
|
||||
private readonly CommandBusClient _bus;
|
||||
public CommandResultProcessor(CommandBusClient bus) => _bus = bus;
|
||||
|
||||
public void Process(byte[] identity, byte[] payloadBytes)
|
||||
{
|
||||
var p = MessagePackSerializer.Deserialize<CommandResult>(payloadBytes);
|
||||
_bus.HandleResponse(p);
|
||||
}
|
||||
}
|
||||
11
SHH.CameraDashboard/Services/Payloads/IProtocolProcessor.cs
Normal file
11
SHH.CameraDashboard/Services/Payloads/IProtocolProcessor.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace SHH.CameraDashboard
|
||||
{
|
||||
public interface IProtocolProcessor
|
||||
{
|
||||
// 匹配 Key(0) 的 Protocol 字符串
|
||||
string ProtocolType { get; }
|
||||
|
||||
// 执行具体的解析与业务逻辑
|
||||
void Process(byte[] identity, byte[] payloadBytes);
|
||||
}
|
||||
}
|
||||
20
SHH.CameraDashboard/Services/Payloads/RegisterProcessor.cs
Normal file
20
SHH.CameraDashboard/Services/Payloads/RegisterProcessor.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using MessagePack;
|
||||
using SHH.CameraDashboard;
|
||||
using SHH.CameraDashboard.Services;
|
||||
using SHH.Contracts;
|
||||
|
||||
public class RegisterProcessor : IProtocolProcessor
|
||||
{
|
||||
public string ProtocolType => ProtocolHeaders.ServerRegister;
|
||||
|
||||
private readonly CommandBusClient _bus;
|
||||
|
||||
public RegisterProcessor(CommandBusClient bus) => _bus = bus;
|
||||
|
||||
public void Process(byte[] identity, byte[] payloadBytes)
|
||||
{
|
||||
var p = MessagePackSerializer.Deserialize<RegisterPayload>(payloadBytes);
|
||||
_bus.UpdateSession(p.InstanceId, identity);
|
||||
_bus.RaiseServerRegistered(p);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using MessagePack;
|
||||
using SHH.CameraDashboard;
|
||||
using SHH.CameraDashboard.Services;
|
||||
using SHH.Contracts;
|
||||
|
||||
public class StatusBatchProcessor : IProtocolProcessor
|
||||
{
|
||||
public string ProtocolType => "STATUS_BATCH";
|
||||
private readonly CommandBusClient _bus;
|
||||
public StatusBatchProcessor(CommandBusClient bus) => _bus = bus;
|
||||
|
||||
public void Process(byte[] identity, byte[] payloadBytes)
|
||||
{
|
||||
var p = MessagePackSerializer.Deserialize<StatusBatchPayload>(payloadBytes);
|
||||
if (p?.Items != null) _bus.RaiseDeviceStatusReport(p.Items);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user