Browse Source

fix: 调整publish hook参数使客户看到更多信息

pull/41/head
Vincent 1 year ago
parent
commit
97c4d3f4b2
  1. 4
      src/main/java/com/dji/sdk/common/PublishBarrierResult.java
  2. 16
      src/main/java/com/dji/sdk/common/PublishConfiguration.java
  3. 6
      src/main/java/com/dji/sdk/common/PublishOption.java
  4. 20
      src/main/java/com/dji/sdk/common/PublishRequest.java
  5. 17
      src/main/java/com/dji/sdk/common/PublishResult.java
  6. 17
      src/main/java/com/dji/sdk/common/ReadonlyPublishConfiguration.java
  7. 6
      src/main/java/com/dji/sdk/config/DefaultBeanConfiguration.java
  8. 5
      src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java
  9. 39
      src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java

4
src/main/java/com/dji/sdk/common/PublishBarrierResult.java

@ -9,7 +9,7 @@ package com.dji.sdk.common;
import com.dji.sdk.mqtt.CommonTopicResponse; import com.dji.sdk.mqtt.CommonTopicResponse;
public class PublishBarrierResult { public class PublishBarrierResult implements PublishResult {
public static PublishBarrierResult EMPTY = new PublishBarrierResult(); public static PublishBarrierResult EMPTY = new PublishBarrierResult();
@ -35,7 +35,7 @@ public class PublishBarrierResult {
return timeout; return timeout;
} }
public <T> CommonTopicResponse<T> getData(){ public CommonTopicResponse getData(){
return data; return data;
} }
} }

16
src/main/java/com/dji/sdk/common/PublishConfiguration.java

@ -7,13 +7,11 @@
**************************************************/ **************************************************/
package com.dji.sdk.common; package com.dji.sdk.common;
import com.dji.sdk.mqtt.CommonTopicRequest;
import java.util.Objects; import java.util.Objects;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
public class PublishConfiguration { public class PublishConfiguration implements ReadonlyPublishConfiguration {
String bid; String bid;
String tid; String tid;
@ -21,9 +19,9 @@ public class PublishConfiguration {
//默认超时 //默认超时
int timeout = 3; int timeout = 3;
//请求发送前调用 //请求发送前调用
Consumer<CommonTopicRequest> beforePublishHook = null; Consumer<PublishRequest> beforePublishHook = null;
//收到请求回信后调用 //收到请求回信后调用
BiConsumer<CommonTopicRequest, PublishBarrierResult> afterPublishHook = null; BiConsumer<PublishRequest, PublishBarrierResult> afterPublishHook = null;
public String getBid() { public String getBid() {
@ -50,15 +48,15 @@ public class PublishConfiguration {
this.timeout = timeout; this.timeout = timeout;
} }
public void setBeforePublishHook(Consumer<CommonTopicRequest> callback) { public void setBeforePublishHook(Consumer<PublishRequest> callback) {
beforePublishHook = callback; beforePublishHook = callback;
} }
public void setAfterPublishReplyHook(BiConsumer<CommonTopicRequest, PublishBarrierResult> callback) { public void setAfterPublishReplyHook(BiConsumer<PublishRequest, PublishBarrierResult> callback) {
afterPublishHook = callback; afterPublishHook = callback;
} }
public void invokeBeforePublishHook(CommonTopicRequest req){ public void invokeBeforePublishHook(PublishRequest req){
if(Objects.nonNull(beforePublishHook)){ if(Objects.nonNull(beforePublishHook)){
try { try {
beforePublishHook.accept(req); 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)){ if(Objects.nonNull(afterPublishHook)){
try{ try{
afterPublishHook.accept(req,result); afterPublishHook.accept(req,result);

6
src/main/java/com/dji/sdk/common/PublishOption.java

@ -7,8 +7,6 @@
**************************************************/ **************************************************/
package com.dji.sdk.common; package com.dji.sdk.common;
import com.dji.sdk.mqtt.CommonTopicRequest;
import com.dji.sdk.mqtt.CommonTopicResponse;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import java.util.Objects; import java.util.Objects;
@ -44,13 +42,13 @@ public class PublishOption {
return this; return this;
} }
public PublishOption beforePublish(Consumer<CommonTopicRequest> callback){ public PublishOption beforePublish(Consumer<PublishRequest> callback){
if(Objects.nonNull(callback)){ if(Objects.nonNull(callback)){
configuration.setBeforePublishHook(callback); configuration.setBeforePublishHook(callback);
} }
return this; return this;
} }
public PublishOption afterPublishReply(BiConsumer<CommonTopicRequest, PublishBarrierResult> callback){ public PublishOption afterPublishReply(BiConsumer<PublishRequest, PublishBarrierResult> callback){
if(Objects.nonNull(callback)){ if(Objects.nonNull(callback)){
configuration.setAfterPublishReplyHook(callback); configuration.setAfterPublishReplyHook(callback);
} }

20
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();
}

17
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();
}

17
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();
}

6
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.common.*;
import com.dji.sdk.mqtt.ChanBarrierAdapter; import com.dji.sdk.mqtt.ChanBarrierAdapter;
import com.dji.sdk.mqtt.CommonTopicRequest;
import com.dji.sdk.mqtt.GlobalPublishOption; import com.dji.sdk.mqtt.GlobalPublishOption;
import com.dji.sdk.common.PublishRequest;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -42,12 +42,12 @@ public class DefaultBeanConfiguration {
} }
@Override @Override
public Consumer<CommonTopicRequest> defaultBeforePublishHook() { public Consumer<PublishRequest> defaultBeforePublishHook() {
return null; return null;
} }
@Override @Override
public BiConsumer<CommonTopicRequest, PublishBarrierResult> defaultAfterPublishHook() { public BiConsumer<PublishRequest, PublishBarrierResult> defaultAfterPublishHook() {
return null; return null;
} }
}; };

5
src/main/java/com/dji/sdk/mqtt/GlobalPublishOption.java

@ -8,6 +8,7 @@
package com.dji.sdk.mqtt; package com.dji.sdk.mqtt;
import com.dji.sdk.common.PublishBarrierResult; import com.dji.sdk.common.PublishBarrierResult;
import com.dji.sdk.common.PublishRequest;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -17,7 +18,7 @@ public interface GlobalPublishOption {
Supplier<String> defaultTransactionId(); Supplier<String> defaultTransactionId();
Supplier<String> defaultBizId(); Supplier<String> defaultBizId();
Consumer<CommonTopicRequest> defaultBeforePublishHook(); Consumer<PublishRequest> defaultBeforePublishHook();
BiConsumer<CommonTopicRequest, PublishBarrierResult> defaultAfterPublishHook(); BiConsumer<PublishRequest, PublishBarrierResult> defaultAfterPublishHook();
} }

39
src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java

@ -16,7 +16,6 @@ import javax.annotation.Resource;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -119,7 +118,9 @@ public class MqttGatewayPublish {
request.setTid(config.getTid()); request.setTid(config.getTid());
//use to log request data or the last chance to change some data //use to log request data or the last chance to change some data
config.invokeBeforePublishHook(request); //CommonTopicRequest丢失了一些需要记录的内容,把这些内容封到PublishRequest交出去
PublishRequest wrapRequest = new CommonTopicRequestWrapper<T>(clazz,topic, request, config);
config.invokeBeforePublishHook(wrapRequest);
//注册barrier //注册barrier
String identity = publishBarrier.generateIdentity(request); //提供栅栏标识 String identity = publishBarrier.generateIdentity(request); //提供栅栏标识
@ -130,7 +131,7 @@ public class MqttGatewayPublish {
if(log.isDebugEnabled()){ log.debug("等待{}指令返回",identity); }; if(log.isDebugEnabled()){ log.debug("等待{}指令返回",identity); };
PublishBarrierResult result = publishBarrier.await(identity,config.getTimeout()); PublishBarrierResult result = publishBarrier.await(identity,config.getTimeout());
config.invokeAfterPublishReplyHook(request, result); config.invokeAfterPublishReplyHook(wrapRequest, result);
if(result.isTimeout()){ if(result.isTimeout()){
throw new CloudSDKException("Timeout"); //TODO: 换个更明确的异常更好 throw new CloudSDKException("Timeout"); //TODO: 换个更明确的异常更好
@ -163,4 +164,36 @@ public class MqttGatewayPublish {
} }
return config; return config;
} }
static class CommonTopicRequestWrapper<T> implements PublishRequest{
final CommonTopicRequest request;
final String topic;
final Class<T> clazz;
final ReadonlyPublishConfiguration config;
public CommonTopicRequestWrapper(Class<T> 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;
}
}
} }
Loading…
Cancel
Save