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; @@ -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 { @@ -35,7 +35,7 @@ public class PublishBarrierResult {
return timeout;
}
public <T> CommonTopicResponse<T> getData(){
public CommonTopicResponse getData(){
return data;
}
}

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

@ -7,13 +7,11 @@ @@ -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 { @@ -21,9 +19,9 @@ public class PublishConfiguration {
//默认超时
int timeout = 3;
//请求发送前调用
Consumer<CommonTopicRequest> beforePublishHook = null;
Consumer<PublishRequest> beforePublishHook = null;
//收到请求回信后调用
BiConsumer<CommonTopicRequest, PublishBarrierResult> afterPublishHook = null;
BiConsumer<PublishRequest, PublishBarrierResult> afterPublishHook = null;
public String getBid() {
@ -50,15 +48,15 @@ public class PublishConfiguration { @@ -50,15 +48,15 @@ public class PublishConfiguration {
this.timeout = timeout;
}
public void setBeforePublishHook(Consumer<CommonTopicRequest> callback) {
public void setBeforePublishHook(Consumer<PublishRequest> callback) {
beforePublishHook = callback;
}
public void setAfterPublishReplyHook(BiConsumer<CommonTopicRequest, PublishBarrierResult> callback) {
public void setAfterPublishReplyHook(BiConsumer<PublishRequest, PublishBarrierResult> 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 { @@ -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);

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

@ -7,8 +7,6 @@ @@ -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 { @@ -44,13 +42,13 @@ public class PublishOption {
return this;
}
public PublishOption beforePublish(Consumer<CommonTopicRequest> callback){
public PublishOption beforePublish(Consumer<PublishRequest> callback){
if(Objects.nonNull(callback)){
configuration.setBeforePublishHook(callback);
}
return this;
}
public PublishOption afterPublishReply(BiConsumer<CommonTopicRequest, PublishBarrierResult> callback){
public PublishOption afterPublishReply(BiConsumer<PublishRequest, PublishBarrierResult> callback){
if(Objects.nonNull(callback)){
configuration.setAfterPublishReplyHook(callback);
}

20
src/main/java/com/dji/sdk/common/PublishRequest.java

@ -0,0 +1,20 @@ @@ -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 @@ @@ -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 @@ @@ -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; @@ -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 { @@ -42,12 +42,12 @@ public class DefaultBeanConfiguration {
}
@Override
public Consumer<CommonTopicRequest> defaultBeforePublishHook() {
public Consumer<PublishRequest> defaultBeforePublishHook() {
return null;
}
@Override
public BiConsumer<CommonTopicRequest, PublishBarrierResult> defaultAfterPublishHook() {
public BiConsumer<PublishRequest, PublishBarrierResult> defaultAfterPublishHook() {
return null;
}
};

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

@ -8,6 +8,7 @@ @@ -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 { @@ -17,7 +18,7 @@ public interface GlobalPublishOption {
Supplier<String> defaultTransactionId();
Supplier<String> defaultBizId();
Consumer<CommonTopicRequest> defaultBeforePublishHook();
BiConsumer<CommonTopicRequest, PublishBarrierResult> defaultAfterPublishHook();
Consumer<PublishRequest> defaultBeforePublishHook();
BiConsumer<PublishRequest, PublishBarrierResult> defaultAfterPublishHook();
}

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

@ -16,7 +16,6 @@ import javax.annotation.Resource; @@ -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 { @@ -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<T>(clazz,topic, request, config);
config.invokeBeforePublishHook(wrapRequest);
//注册barrier
String identity = publishBarrier.generateIdentity(request); //提供栅栏标识
@ -130,7 +131,7 @@ public class MqttGatewayPublish { @@ -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 { @@ -163,4 +164,36 @@ public class MqttGatewayPublish {
}
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