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(67) → dock1 链:{@code dock1GatewayOSDServiceImpl → dock1DeviceOSDServiceImpl → dock1DockOSDServiceImpl}
* - 其余(DOCK2(91) / 遥控器等无法识别来源)→ dock2 原链:
* {@code gatewayOSDServiceImpl → deviceOSDServiceImpl → dockOSDServiceImpl}(行为与改造前完全一致)
*
* 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);
}
}