package com.ard.sample.manage.service.impl; import com.ard.sample.component.mqtt.model.CommonTopicReceiver; import com.ard.sample.component.websocket.config.ConcurrentWebSocketSession; import com.ard.sample.component.websocket.model.CustomWebSocketMessage; import com.ard.sample.manage.model.dto.DeviceDTO; import com.ard.sample.manage.model.dto.TelemetryDTO; import com.ard.sample.manage.model.enums.DockModelEnum; import com.ard.sample.manage.service.ITSAService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.util.Collection; /** * 【机场1】OSD 入站分发器(Dock1 适配共享层新增,唯一侵入共享层的分流点)。 * *

DeviceServiceImpl.handleOSD 收到 INBOUND_OSD 消息后委托本类,按设备机型分发到两条 OSD 处理链: *

* dock1 链为普通 @Service(不带 @ServiceActivator),INBOUND_OSD 通道消费者仍只有 DeviceServiceImpl 一个。 * * @author ard * @date 2026/10/16 */ @Service public class DockOsdDispatcher { @Autowired @Qualifier("gatewayOSDServiceImpl") private ITSAService dock2TsaService; @Autowired @Qualifier("dock1GatewayOSDServiceImpl") private ITSAService dock1TsaService; /** * 分发 OSD 消息到对应机型的处理链。 * * @param receiver OSD 报文 * @param device 消息来源设备(含 domain/type/subType) * @param webSessions 目标 WebSocket 会话 * @param wsMessage 待推送的 WebSocket 消息 */ public void dispatch(CommonTopicReceiver receiver, DeviceDTO device, Collection webSessions, CustomWebSocketMessage wsMessage) { DockModelEnum model = DockModelResolver.resolve(device); if (DockModelEnum.DOCK1 == model) { dock1TsaService.handleOSD(receiver, device, webSessions, wsMessage); return; } // dock2 及一切无法识别的来源:原链透传,保证 dock2 行为零变化 dock2TsaService.handleOSD(receiver, device, webSessions, wsMessage); } }