package com.dji.sdk.mqtt.drc; import com.dji.sdk.common.Common; import com.dji.sdk.exception.CloudSDKException; import com.dji.sdk.mqtt.ChannelName; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; import org.springframework.messaging.Message; import java.io.IOException; import java.util.Arrays; /** * @author sean * @version 1.1 * @date 2022/6/1 */ @Configuration public class DrcUpRouter { @Bean public IntegrationFlow drcUpRouterFlow() { return IntegrationFlows .from(ChannelName.INBOUND_DRC_UP) .transform(Message.class, source -> { try { TopicDrcRequest data = Common.getObjectMapper().readValue((byte[]) source.getPayload(), TopicDrcRequest.class); return data.setData(Common.getObjectMapper().convertValue(data.getData(), DrcUpMethodEnum.find(data.getMethod()).getClassType())); } catch (IOException e) { throw new CloudSDKException(e); } }, null) .route( response -> DrcUpMethodEnum.find(response.getMethod()), mapping -> Arrays.stream(DrcUpMethodEnum.values()).forEach( methodEnum -> mapping.channelMapping(methodEnum, methodEnum.getChannelName()))) .get(); } }