# mqttServiceForDevice.ts ## 文件职责 管理**设备 MQTT 消息订阅服务**,负责监听发生器、探测器的状态变化和曝光参数更新,将设备消息转换为应用内部事件。 ## 实现方式 通过 **mqtt 客户端库**连接到 MQTT Broker,订阅多个设备主题,解析消息并通过**事件发射器**分发到应用各模块。 ## 实现思路 1. **连接管理**:使用 mqtt.connect 建立与 MQTT Broker 的连接,配置清理会话和超时参数 2. **主题订阅**:订阅 8 个设备相关主题(发生器状态、探测器状态、KV/MAS/MA/MS 参数、错误列表) 3. **消息解析**:根据不同主题解析 JSON 消息为 MqttMessage 或 ErrorListMessage 类型 4. **状态映射**:将设备状态码(0-5)映射为应用内部事件(RAD_OFF、RAD_PREPARE、RAD_READY 等) 5. **事件分发**:通过 emitter 触发对应事件,通知应用其他模块设备状态变化 6. **错误处理**:特殊处理设备错误列表消息,遍历错误信息并发出 DEVICE_ERROR 事件 ## 边界 ### 输入边界 - ✅ 接收来自 MQTT Broker 的设备消息 - ✅ 处理发生器和探测器的状态通知 - ✅ 处理曝光参数值更新(KV、MAS、MA、MS) - ❌ 不接受非 MQTT 来源的设备消息 ### 输出边界 - ✅ 发出设备状态变化事件(GENERATOR_RAD_OFF、ACQUISITION_STARTED 等) - ✅ 发出曝光参数更新事件(NEW_KV、NEW_MAS、NEW_MA、NEW_MS) - ✅ 发出设备错误事件(DEVICE_ERROR) - ❌ 不直接更新 Redux 状态 - ❌ 不触发 API 调用 ### 职责边界 - ✅ 负责 MQTT 连接的建立和断开 - ✅ 负责设备主题的订阅 - ✅ 负责设备消息的解析和事件转换 - ❌ 不负责设备消息的持久化 - ❌ 不负责设备控制指令的发送 - ❌ 不负责事件的具体处理逻辑 ## 涉及概念 **MQTT(Message Queuing Telemetry Transport)**:轻量级的发布/订阅消息传输协议,适用于设备间通信 **发生器状态**:X 射线发生器的工作状态,包括关闭(0)、准备(1-2)、曝光中(3)、待机(4)等 **探测器状态**:影像探测器的工作状态,包括准备就绪(4)、采集中(5)等 **曝光参数**:控制 X 射线剂量的关键参数,包括 KV(千伏)、MAS(毫安秒)、MA(毫安)、MS(毫秒) **事件发射器(EventEmitter)**:用于应用内部事件通信的发布订阅模式实现 **状态码映射**:将设备返回的数字状态码转换为语义化的事件名称 **错误列表消息**:包含多个设备错误信息的消息结构,每个错误包含代码、类型、级别等属性