diff --git a/src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java b/src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java index 85e8483..e7d5ae8 100644 --- a/src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java +++ b/src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java @@ -21,6 +21,16 @@ public class JDKLockBarrierImpl implements PublishBarrier{ */ private final ConcurrentHashMap container = new ConcurrentHashMap<>(); + @Override + public String generateIdentity(CommonTopicRequest requestData) { + return requestData.getTid(); + } + + @Override + public String generateIdentity(CommonTopicResponse receiveData) { + return receiveData.getTid(); + } + @Override public void put(String identity, CommonTopicResponse receiveData) { if(hasIdentity(identity)){ diff --git a/src/main/java/com/dji/sdk/common/PublishBarrier.java b/src/main/java/com/dji/sdk/common/PublishBarrier.java index 55221c4..e5b0071 100644 --- a/src/main/java/com/dji/sdk/common/PublishBarrier.java +++ b/src/main/java/com/dji/sdk/common/PublishBarrier.java @@ -12,6 +12,10 @@ import com.dji.sdk.mqtt.CommonTopicResponse; public interface PublishBarrier { + //构建栅栏标识方法 + String generateIdentity(CommonTopicRequest requestData); + String generateIdentity(CommonTopicResponse receiveData); + void put(String identity, CommonTopicResponse receiveData); void registerRequest(String identity, CommonTopicRequest requestData); diff --git a/src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java b/src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java index 0238202..368db35 100644 --- a/src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java +++ b/src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java @@ -13,6 +13,16 @@ import com.dji.sdk.common.PublishBarrierResult; import java.util.Objects; public class ChanBarrierAdapter implements PublishBarrier { + @Override + public String generateIdentity(CommonTopicRequest requestData) { + return requestData.getTid(); + } + + @Override + public String generateIdentity(CommonTopicResponse receiveData) { + return receiveData.getTid(); + } + @Override public void put(String identity, CommonTopicResponse receiveData) { Chan instance = Chan.getInstance(identity, false); diff --git a/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java b/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java index e2d1b88..ceeaf97 100644 --- a/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java +++ b/src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java @@ -122,7 +122,7 @@ public class MqttGatewayPublish { config.invokeBeforePublishHook(request); //注册barrier - String identity = request.getTid(); //提供栅栏标识 + String identity = publishBarrier.generateIdentity(request); //提供栅栏标识 publishBarrier.registerRequest(identity, request); return CompletableFuture.supplyAsync(()->{ diff --git a/src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java b/src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java index dc15147..11c171e 100644 --- a/src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java +++ b/src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java @@ -42,13 +42,14 @@ public class PropertySetReplyHandler { // if (Objects.isNull(chan)) { // return; // } - if(!barrier.hasIdentity(receiver.getTid())) { + String identity = barrier.generateIdentity(receiver); + if(!barrier.hasIdentity(identity)) { return; } receiver.setData(PropertySetReplyResultEnum.find( Common.getObjectMapper().convertValue(receiver.getData(), JsonNode.class).findValue(RESULT_KEY).intValue())); // Put the message to the chan object. //chan.put(receiver); - barrier.put(receiver.getTid(), receiver); + barrier.put(identity, receiver); } } diff --git a/src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java b/src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java index 6e80d24..1ea2af3 100644 --- a/src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java +++ b/src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java @@ -42,14 +42,15 @@ public class ServicesReplyHandler { // if (Objects.isNull(chan)) { // return; // } - if(!barrier.hasIdentity(receiver.getTid())){ + String identity = barrier.generateIdentity(receiver); + if(!barrier.hasIdentity(identity)){ return; } if (LogMethodEnum.FILE_UPLOAD_LIST.getMethod().equals(receiver.getMethod())) { receiver.getData().setOutput(Common.getObjectMapper().convertValue(receiver.getData(), new TypeReference() {})); } - barrier.put(receiver.getTid(), receiver); + barrier.put(identity, receiver); //chan.put(receiver); } }