using System; namespace SHH.Contracts { /// /// 通用指令请求载体 (Request) /// 用于 NetMQ 的 Request-Reply 或 Router-Dealer 模式 /// public class CommandPayload { #region --- 核心路由信息 --- /// /// 指令代码 (路由键) /// 示例: "PTZ", "RECORD_START", "SERVER_REGISTER" /// public string CmdCode { get; set; } /// /// 目标对象 ID /// 示例: 摄像头ID "101",或者系统级指令填 "SYSTEM" /// public string TargetId { get; set; } /// /// 业务参数 (JSON 字符串) /// 根据 CmdCode 的不同,反序列化为不同的 DTO (如 PtzControlDto) /// public string JsonParams { get; set; } #endregion #region --- 追踪与元数据 --- /// /// 请求追踪 ID (UUID) /// 核心字段:用于实现异步等待 (await)。回执包必须携带此 ID。 /// public string RequestId { get; set; } = Guid.NewGuid().ToString("N"); /// /// 发送时间戳 /// public DateTime Timestamp { get; set; } = DateTime.Now; #endregion #region --- 可靠性控制字段 (QoS) --- /// /// 是否需要回执 (ACK) /// true: 发送端会 await 等待结果 (默认) /// false: 发后即忘 (Fire-and-Forget),服务端收到后不回发任何消息,减少带宽 /// public bool RequireAck { get; set; } = true; /// /// 重试计数器 /// 0: 首次发送 /// 1, 2...: 第N次重试 /// 服务端据此判断是否需要查重 (幂等性处理) /// public int RetryCount { get; set; } = 0; /// /// 消息过期时间 (Unix时间戳) /// 如果接收端收到时已经超过此时间,直接丢弃,不处理也不回复 /// public long ExpireTime { get; set; } #endregion } }