Browse Source

feat: 使栅栏标识可由用户自定义标识生成

pull/41/head
Vincent 1 year ago
parent
commit
6e92736e61
  1. 10
      src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java
  2. 4
      src/main/java/com/dji/sdk/common/PublishBarrier.java
  3. 10
      src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java
  4. 2
      src/main/java/com/dji/sdk/mqtt/MqttGatewayPublish.java
  5. 5
      src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java
  6. 5
      src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java

10
src/main/java/com/dji/sdk/common/JDKLockBarrierImpl.java

@ -21,6 +21,16 @@ public class JDKLockBarrierImpl implements PublishBarrier{ @@ -21,6 +21,16 @@ public class JDKLockBarrierImpl implements PublishBarrier{
*/
private final ConcurrentHashMap<String, JDKHolder> 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)){

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

@ -12,6 +12,10 @@ import com.dji.sdk.mqtt.CommonTopicResponse; @@ -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);

10
src/main/java/com/dji/sdk/mqtt/ChanBarrierAdapter.java

@ -13,6 +13,16 @@ import com.dji.sdk.common.PublishBarrierResult; @@ -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);

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

@ -122,7 +122,7 @@ public class MqttGatewayPublish { @@ -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(()->{

5
src/main/java/com/dji/sdk/mqtt/property/PropertySetReplyHandler.java

@ -42,13 +42,14 @@ public class PropertySetReplyHandler { @@ -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);
}
}

5
src/main/java/com/dji/sdk/mqtt/services/ServicesReplyHandler.java

@ -42,14 +42,15 @@ public class ServicesReplyHandler { @@ -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<FileUploadListResponse>() {}));
}
barrier.put(receiver.getTid(), receiver);
barrier.put(identity, receiver);
//chan.put(receiver);
}
}

Loading…
Cancel
Save