package com.ruoyi.device.service.impl; import com.ruoyi.device.domain.impl.djimqtt.callback.IDockDataCallback; import com.ruoyi.device.domain.impl.djimqtt.callback.IDroneDataCallback; import com.ruoyi.device.domain.impl.djimqtt.config.DjiMqttClientConfig; import com.ruoyi.device.service.config.DjiMqttProperties; import com.ruoyi.device.domain.impl.djimqtt.handler.DjiMqttMessageHandler; import com.ruoyi.device.domain.impl.djimqtt.manager.DjiMqttClientManager; import com.ruoyi.device.domain.impl.djimqtt.model.DockData; import com.ruoyi.device.domain.impl.djimqtt.model.DroneData; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; @Service @Slf4j public class DjiService { @Autowired private DjiMqttClientManager clientManager; @Autowired private DjiMqttProperties mqttProperties; @EventListener(ApplicationReadyEvent.class) public void onApplicationReady() { // 从配置文件读取配置 DjiMqttClientConfig config = DjiMqttClientConfig.builder() .host(mqttProperties.getHost()) .port(mqttProperties.getPort()) .clientId(mqttProperties.getClientId()) .username(mqttProperties.getUsername()) .password(mqttProperties.getPassword()) .connectionTimeout(mqttProperties.getConnectionTimeout()) .keepAliveInterval(mqttProperties.getKeepAliveInterval()) .autoReconnect(mqttProperties.getAutoReconnect()) .cleanSession(mqttProperties.getCleanSession()) .useSharedSubscription(true) .sharedGroupName("dji-group") .build(); // 创建客户端 String clientId = clientManager.createClient(config); // 获取消息处理器 DjiMqttMessageHandler handler = clientManager.getHandler(clientId); // 注册无人机数据回调 handler.registerDroneDataCallback(new IDroneDataCallback() { @Override public void onDroneData(DroneData droneData) { log.info("droneData:{}", droneData); } }); // 注册机场数据回调 handler.registerDockDataCallback(new IDockDataCallback() { @Override public void onDockData(DockData dockData) { log.info("droneData:{}", dockData); } }); log.info("客户端已创建并注册回调"); } }