diff --git a/src/main/java/com/dji/sdk/common/PublishBarrierResult.java b/src/main/java/com/dji/sdk/common/PublishBarrierResult.java index f50f29b..38314fd 100644 --- a/src/main/java/com/dji/sdk/common/PublishBarrierResult.java +++ b/src/main/java/com/dji/sdk/common/PublishBarrierResult.java @@ -9,7 +9,7 @@ package com.dji.sdk.common; import com.dji.sdk.mqtt.CommonTopicResponse; -public class PublishBarrierResult { +public class PublishBarrierResult implements PublishResult { public static PublishBarrierResult EMPTY = new PublishBarrierResult(); @@ -35,7 +35,7 @@ public class PublishBarrierResult { return timeout; } - public CommonTopicResponse getData(){ + public CommonTopicResponse getData(){ return data; } } diff --git a/src/main/java/com/dji/sdk/common/PublishConfiguration.java b/src/main/java/com/dji/sdk/common/PublishConfiguration.java index 7ea22ab..bfd008c 100644 --- a/src/main/java/com/dji/sdk/common/PublishConfiguration.java +++ b/src/main/java/com/dji/sdk/common/PublishConfiguration.java @@ -7,13 +7,11 @@ **************************************************/ package com.dji.sdk.common; -import com.dji.sdk.mqtt.CommonTopicRequest; - import java.util.Objects; import java.util.function.BiConsumer; import java.util.function.Consumer; -public class PublishConfiguration { +public class PublishConfiguration implements ReadonlyPublishConfiguration { String bid; String tid; @@ -21,9 +19,9 @@ public class PublishConfiguration { //默认超时 int timeout = 3; //请求发送前调用 - Consumer beforePublishHook = null; + Consumer beforePublishHook = null; //收到请求回信后调用 - BiConsumer afterPublishHook = null; + BiConsumer afterPublishHook = null; public String getBid() { @@ -50,15 +48,15 @@ public class PublishConfiguration { this.timeout = timeout; } - public void setBeforePublishHook(Consumer callback) { + public void setBeforePublishHook(Consumer callback) { beforePublishHook = callback; } - public void setAfterPublishReplyHook(BiConsumer callback) { + public void setAfterPublishReplyHook(BiConsumer callback) { afterPublishHook = callback; } - public void invokeBeforePublishHook(CommonTopicRequest req){ + public void invokeBeforePublishHook(PublishRequest req){ if(Objects.nonNull(beforePublishHook)){ try { beforePublishHook.accept(req); @@ -69,7 +67,7 @@ public class PublishConfiguration { } } - public void invokeAfterPublishReplyHook(CommonTopicRequest req, PublishBarrierResult result){ + public void invokeAfterPublishReplyHook(PublishRequest req, PublishBarrierResult result){ if(Objects.nonNull(afterPublishHook)){ try{ afterPublishHook.accept(req,result); diff --git a/src/main/java/com/dji/sdk/common/PublishOption.java b/src/main/java/com/dji/sdk/common/PublishOption.java index 505f667..5f33e49 100644 --- a/src/main/java/com/dji/sdk/common/PublishOption.java +++ b/src/main/java/com/dji/sdk/common/PublishOption.java @@ -7,8 +7,6 @@ **************************************************/ package com.dji.sdk.common; -import com.dji.sdk.mqtt.CommonTopicRequest; -import com.dji.sdk.mqtt.CommonTopicResponse; import com.google.common.base.Strings; import java.util.Objects; @@ -44,13 +42,13 @@ public class PublishOption { return this; } - public PublishOption beforePublish(Consumer callback){ + public PublishOption beforePublish(Consumer callback){ if(Objects.nonNull(callback)){ configuration.setBeforePublishHook(callback); } return this; } - public PublishOption afterPublishReply(BiConsumer callback){ + public PublishOption afterPublishReply(BiConsumer callback){ if(Objects.nonNull(callback)){ configuration.setAfterPublishReplyHook(callback); } diff --git a/src/main/java/com/dji/sdk/common/PublishRequest.java b/src/main/java/com/dji/sdk/common/PublishRequest.java new file mode 100644 index 0000000..81c8674 --- /dev/null +++ b/src/main/java/com/dji/sdk/common/PublishRequest.java @@ -0,0 +1,20 @@ +/************************************************* + * @copyright 2017 Flision Corporation Inc. + * @author: Vincent Chan @ Canton + * @date: 2023年09月25日 + * @version: 1.0.0 + * @description: + **************************************************/ +package com.dji.sdk.common; + +import com.dji.sdk.common.ReadonlyPublishConfiguration; +import com.dji.sdk.mqtt.CommonTopicRequest; + +public interface PublishRequest { + + String getTopic(); + + CommonTopicRequest getOriginRequest(); + + ReadonlyPublishConfiguration getConfiguration(); +} diff --git a/src/main/java/com/dji/sdk/common/PublishResult.java b/src/main/java/com/dji/sdk/common/PublishResult.java new file mode 100644 index 0000000..8b23693 --- /dev/null +++ b/src/main/java/com/dji/sdk/common/PublishResult.java @@ -0,0 +1,17 @@ +/************************************************* + * @copyright 2017 Flision Corporation Inc. + * @author: Vincent Chan @ Canton + * @date: 2023年09月25日 + * @version: 1.0.0 + * @description: + **************************************************/ +package com.dji.sdk.common; + +import com.dji.sdk.mqtt.CommonTopicResponse; + +public interface PublishResult { + + boolean isTimeout(); + + CommonTopicResponse getData(); +} diff --git a/src/main/java/com/dji/sdk/common/ReadonlyPublishConfiguration.java b/src/main/java/com/dji/sdk/common/ReadonlyPublishConfiguration.java new file mode 100644 index 0000000..ff4e880 --- /dev/null +++ b/src/main/java/com/dji/sdk/common/ReadonlyPublishConfiguration.java @@ -0,0 +1,17 @@ +/************************************************* + * @copyright 2017 Flision Corporation Inc. + * @author: Vincent Chan @ Canton + * @date: 2023年09月25日 + * @version: 1.0.0 + * @description: + **************************************************/ +package com.dji.sdk.common; + +public interface ReadonlyPublishConfiguration { + + String getBid(); + + String getTid(); + + long getTimeout(); +} diff --git a/src/main/java/com/dji/sdk/config/DefaultBeanConfiguration.java b/src/main/java/com/dji/sdk/config/DefaultBeanConfiguration.java index 80c40d1..9829b4a 100644 --- a/src/main/java/com/dji/sdk/config/DefaultBeanConfiguration.java +++ b/src/main/java/com/dji/sdk/config/DefaultBeanConfiguration.java @@ -9,8 +9,8 @@ package com.dji.sdk.config; import com.dji.sdk.common.*; import com.dji.sdk.mqtt.ChanBarrierAdapter; -import com.dji.sdk.mqtt.CommonTopicRequest; import com.dji.sdk.mqtt.GlobalPublishOption; +import com.dji.sdk.common.PublishRequest; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,12 +42,12 @@ public class DefaultBeanConfiguration { } @Override - public Consumer defaultBeforePublishHook() { + public Consumer defaultBeforePublishHook() { return null; } @Override - public BiConsumer defaultAfterPublishHook() { + public BiConsumer defaultAfterPublishHook() { return null; } }; diff --git a/src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java b/src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java index 88f797a..50872ca 100644 --- a/src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java +++ b/src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java @@ -8,6 +8,7 @@ package com.dji.sdk.mqtt; import com.dji.sdk.common.PublishBarrierResult; +import com.dji.sdk.common.PublishRequest; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -17,7 +18,7 @@ public interface GlobalPublishOption { Supplier defaultTransactionId(); Supplier defaultBizId(); - Consumer defaultBeforePublishHook(); - BiConsumer defaultAfterPublishHook(); + Consumer defaultBeforePublishHook(); + BiConsumer defaultAfterPublishHook(); } diff --git a/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java b/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java index ceeaf97..f25155c 100644 --- a/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java +++ b/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java @@ -16,7 +16,6 @@ import javax.annotation.Resource; import java.util.Objects; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -119,7 +118,9 @@ public class MqttGatewayPublish { request.setTid(config.getTid()); //use to log request data or the last chance to change some data - config.invokeBeforePublishHook(request); + //CommonTopicRequest丢失了一些需要记录的内容,把这些内容封到PublishRequest交出去 + PublishRequest wrapRequest = new CommonTopicRequestWrapper(clazz,topic, request, config); + config.invokeBeforePublishHook(wrapRequest); //注册barrier String identity = publishBarrier.generateIdentity(request); //提供栅栏标识 @@ -130,7 +131,7 @@ public class MqttGatewayPublish { if(log.isDebugEnabled()){ log.debug("等待{}指令返回",identity); }; PublishBarrierResult result = publishBarrier.await(identity,config.getTimeout()); - config.invokeAfterPublishReplyHook(request, result); + config.invokeAfterPublishReplyHook(wrapRequest, result); if(result.isTimeout()){ throw new CloudSDKException("Timeout"); //TODO: 换个更明确的异常更好 @@ -163,4 +164,36 @@ public class MqttGatewayPublish { } return config; } + + static class CommonTopicRequestWrapper implements PublishRequest{ + final CommonTopicRequest request; + final String topic; + final Class clazz; + + final ReadonlyPublishConfiguration config; + + public CommonTopicRequestWrapper(Class clazz, String topic,CommonTopicRequest request, PublishConfiguration config) { + this.clazz = clazz; + this.request = request; + this.topic = topic; + this.config = config; + } + + @Override + public String getTopic() { + return topic; + } + + @Override + public CommonTopicRequest getOriginRequest() { + return request; + } + + @Override + public ReadonlyPublishConfiguration getConfiguration() { + return config; + } + + + } } \ No newline at end of file