新增 Mjpegplayer 用来播放 Web 流
This commit is contained in:
48
SHH.MjpegPlayer/GrpcImpls/Handlers/DeviceStatusHandler.cs
Normal file
48
SHH.MjpegPlayer/GrpcImpls/Handlers/DeviceStatusHandler.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using SHH.Contracts;
|
||||
|
||||
namespace SHH.MjpegPlayer
|
||||
{
|
||||
/// <summary>
|
||||
/// 设备状态处理器
|
||||
/// 职责:监听消息总线发出的状态主题事件,负责将远程节点上报的相机在线/离线状态实时同步至本地管理中心。
|
||||
/// 架构说明:此类实现了业务逻辑的彻底解耦,不涉及 gRpc 通讯细节,也不涉及复杂的配置下发逻辑。
|
||||
/// </summary>
|
||||
public class DeviceStatusHandler
|
||||
{
|
||||
#region 单例模式
|
||||
|
||||
/// <summary>
|
||||
/// 获取设备状态处理器的全局单例实例。
|
||||
/// 由 GrpcServerManager 在系统启动时显式调用以完成初始化。
|
||||
/// </summary>
|
||||
public static DeviceStatusHandler Instance { get; } = new DeviceStatusHandler();
|
||||
|
||||
/// <summary>
|
||||
/// 私有构造函数:在此处完成对消息总线事件的订阅。
|
||||
/// </summary>
|
||||
private DeviceStatusHandler()
|
||||
{
|
||||
// 订阅 MessageBus 的状态报告主题,当总线收到状态更新包时自动触发 SyncToLocal
|
||||
MessageBus.Instance.OnDeviceStatusReport += SyncToLocal;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 核心业务逻辑
|
||||
|
||||
/// <summary>
|
||||
/// 执行状态同步:将收到的 Payload 数据精确映射回本地 SDK 管理的摄像头集合中。
|
||||
/// </summary>
|
||||
/// <param name="items">包含 CameraId 和在线状态的业务载荷列表</param>
|
||||
private void SyncToLocal(List<StatusEventPayload> items)
|
||||
{
|
||||
// 1. 基础校验:若无数据则不执行后续逻辑
|
||||
if (items == null || items.Count == 0) return;
|
||||
|
||||
// 2. 性能优化:将上报列表转换为字典,利用哈希查找提升大数据量下的匹配效率 (Key: CameraId 字符串)
|
||||
var stateMap = items.ToDictionary(k => k.CameraId, v => v);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user