package com.dji.sdk.mqtt; import com.dji.sdk.common.BaseModel; import com.dji.sdk.common.Common; import com.dji.sdk.mqtt.events.TopicEventsRequest; import com.dji.sdk.mqtt.events.TopicEventsResponse; import com.dji.sdk.mqtt.requests.TopicRequestsRequest; import com.dji.sdk.mqtt.requests.TopicRequestsResponse; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import java.util.Objects; /** * @author sean * @version 1.7 * @date 2023/5/22 */ @Aspect @Component public class MqttReplyHandler { @AfterReturning(value = "execution(public com.dji.sdk.mqtt.CommonTopicResponse+ com.dji.sdk.cloudapi.*.api.*.*(com.dji.sdk.mqtt.CommonTopicRequest+, org.springframework.messaging.MessageHeaders))", returning = "result") public Object validateReturnValue(JoinPoint point, CommonTopicResponse result) { if (Objects.isNull(result)) { return null; } CommonTopicRequest request = (CommonTopicRequest) point.getArgs()[0]; result.setBid(request.getBid()).setTid(request.getTid()).setTimestamp(System.currentTimeMillis()); if (result instanceof TopicEventsResponse) { fillEvents((TopicEventsResponse) result, (TopicEventsRequest) request); } else if (result instanceof TopicRequestsResponse) { validateRequests((TopicRequestsResponse) result, (TopicRequestsRequest) request); } return result; } private void fillEvents(TopicEventsResponse response, TopicEventsRequest request) { if (!request.isNeedReply()) { response.setData(null); return; } response.setMethod(request.getMethod()).setData(MqttReply.success()); } private void validateRequests(TopicRequestsResponse response, TopicRequestsRequest request) { response.setMethod(request.getMethod()); Object data = response.getData(); if (data instanceof MqttReply) { MqttReply mqttData = (MqttReply) data; if (MqttReply.CODE_SUCCESS != mqttData.getResult()) { return; } data = mqttData.getOutput(); } Common.validateModel((BaseModel) data); } }