package com.dji.sample.manage.service.impl; import com.dji.sample.common.util.SpringBeanUtils; import com.dji.sample.component.mqtt.model.*; import com.dji.sample.component.mqtt.service.IMessageSenderService; import com.dji.sample.manage.model.receiver.RequestConfigReceiver; import com.dji.sample.manage.service.IRequestsConfigService; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.MessageHeaders; import org.springframework.stereotype.Service; import java.util.Optional; /** * @author sean * @version 1.3 * @date 2022/11/10 */ @Service public class RequestConfigContext { @Autowired private IMessageSenderService messageSenderService; @Autowired private ObjectMapper objectMapper; /** * Handles the config method of the requests topic. * @param receiver * @param headers */ @ServiceActivator(inputChannel = ChannelName.INBOUND_REQUESTS_CONFIG, outputChannel = ChannelName.OUTBOUND) void handleConfig(CommonTopicReceiver receiver, MessageHeaders headers) { RequestConfigReceiver configReceiver = objectMapper.convertValue(receiver.getData(), RequestConfigReceiver.class); Optional scopeEnumOpt = ConfigScopeEnum.find(configReceiver.getConfigScope()); String topic = headers.get(MqttHeaders.RECEIVED_TOPIC) + TopicConst._REPLY_SUF; CommonTopicResponse.CommonTopicResponseBuilder build = CommonTopicResponse.builder() .tid(receiver.getTid()) .bid(receiver.getBid()) .timestamp(System.currentTimeMillis()) .method(receiver.getMethod()); if (scopeEnumOpt.isEmpty()) { messageSenderService.publish(topic, build.build()); return; } IRequestsConfigService requestsConfigService = SpringBeanUtils.getBean(scopeEnumOpt.get().getClazz()); build.data(requestsConfigService.getConfig()); messageSenderService.publish(topic, build.build()); } }