Browse Source

fixed double sending rpc (private network)

pull/5522/head
YevhenBondarenko 5 years ago
parent
commit
b5da59e3b3
  1. 4
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClient.java
  2. 3
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java
  3. 2
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/RpcDownlinkRequestCallbackProxy.java

4
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/client/LwM2mClient.java

@ -117,6 +117,10 @@ public class LwM2mClient implements Serializable {
@Getter
private final AtomicInteger retryAttempts;
@Getter
@Setter
private Integer lastSentRpcId;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}

3
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/DefaultLwM2MRpcRequestHandler.java

@ -95,6 +95,9 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
this.sendErrorRpcResponse(sessionInfo, rpcRequest.getRequestId(), ResponseCode.INTERNAL_SERVER_ERROR, "Registration is empty");
return;
}
if (client.getLastSentRpcId() != null && client.getLastSentRpcId().equals(rpcRequest.getRequestId())) {
log.info("[{}] Rpc has already sent!", rpcRequest.getRequestId());
}
try {
if (operationType.isHasObjectId()) {
String objectId = getIdFromParameters(client, rpcRequest);

2
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/rpc/RpcDownlinkRequestCallbackProxy.java

@ -45,6 +45,7 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR
@Override
public void onSent(R request) {
client.setLastSentRpcId(this.request.getRequestId());
transportService.process(client.getSession(), this.request, RpcStatus.SENT, TransportServiceCallback.EMPTY);
}
@ -68,6 +69,7 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR
@Override
public void onError(String params, Exception e) {
if (e instanceof TimeoutException || e instanceof org.eclipse.leshan.core.request.exception.TimeoutException) {
client.setLastSentRpcId(null);
transportService.process(client.getSession(), this.request, RpcStatus.TIMEOUT, TransportServiceCallback.EMPTY);
} else if (!(e instanceof ClientSleepingException)) {
sendRpcReplyOnError(e);

Loading…
Cancel
Save