persistent rpc improvements
This commit is contained in:
parent
9720dfac47
commit
0fbb347b27
@ -515,7 +515,8 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
systemContext.getTbCoreDeviceRpcService().processRpcResponseFromDeviceActor(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(),
|
||||
responseMsg.getPayload(), null));
|
||||
if (requestMd.getMsg().getMsg().isPersisted()) {
|
||||
systemContext.getTbRpcService().save(tenantId, new RpcId(requestMd.getMsg().getMsg().getId()), RpcStatus.SUCCESSFUL, JacksonUtil.toJsonNode(responseMsg.getPayload()));
|
||||
RpcStatus status = responseMsg.getFailed() ? RpcStatus.FAILED : RpcStatus.SUCCESSFUL;
|
||||
systemContext.getTbRpcService().save(tenantId, new RpcId(requestMd.getMsg().getMsg().getId()), status, JacksonUtil.toJsonNode(responseMsg.getPayload()));
|
||||
}
|
||||
} else {
|
||||
log.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId());
|
||||
|
||||
@ -339,6 +339,7 @@ message ToDeviceRpcRequestMsg {
|
||||
message ToDeviceRpcResponseMsg {
|
||||
int32 requestId = 1;
|
||||
string payload = 2;
|
||||
bool failed = 3;
|
||||
}
|
||||
|
||||
message UplinkNotificationMsg {
|
||||
|
||||
@ -84,7 +84,6 @@ public class LwM2mSessionMsgListener implements GenericFutureListener<Future<? s
|
||||
public void onToDeviceRpcRequest(UUID sessionId, ToDeviceRpcRequestMsg toDeviceRequest) {
|
||||
log.trace("[{}] Received RPC command to device", sessionId);
|
||||
this.rpcHandler.onToDeviceRpcRequest(toDeviceRequest, this.sessionInfo);
|
||||
transportService.process(sessionInfo, toDeviceRequest, false, TransportServiceCallback.EMPTY);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -314,7 +314,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
|
||||
|
||||
private void sendErrorRpcResponse(TransportProtos.SessionInfoProto sessionInfo, int requestId, String result, String error) {
|
||||
String payload = JacksonUtil.toString(JacksonUtil.newObjectNode().put("result", result).put("error", error));
|
||||
TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(payload).build();
|
||||
TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(payload).setFailed(true).build();
|
||||
transportService.process(sessionInfo, msg, null);
|
||||
}
|
||||
|
||||
|
||||
@ -16,12 +16,16 @@
|
||||
package org.thingsboard.server.transport.lwm2m.server.rpc;
|
||||
|
||||
import org.eclipse.leshan.core.ResponseCode;
|
||||
import org.eclipse.leshan.core.request.exception.ClientSleepingException;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.TransportServiceCallback;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
|
||||
import org.thingsboard.server.transport.lwm2m.server.downlink.DownlinkRequestCallback;
|
||||
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkRequestCallback<R, T> {
|
||||
|
||||
private final TransportService transportService;
|
||||
@ -39,6 +43,7 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR
|
||||
|
||||
@Override
|
||||
public void onSuccess(R request, T response) {
|
||||
transportService.process(client.getSession(), this.request, false, TransportServiceCallback.EMPTY);
|
||||
sendRpcReplyOnSuccess(response);
|
||||
if (callback != null) {
|
||||
callback.onSuccess(request, response);
|
||||
@ -55,16 +60,23 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR
|
||||
|
||||
@Override
|
||||
public void onError(String params, Exception e) {
|
||||
sendRpcReplyOnError(e);
|
||||
if (!(e instanceof TimeoutException || e instanceof ClientSleepingException)) {
|
||||
sendRpcReplyOnError(e);
|
||||
}
|
||||
if (callback != null) {
|
||||
callback.onError(params, e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void reply(LwM2MRpcResponseBody response) {
|
||||
reply(response, false);
|
||||
}
|
||||
|
||||
protected void reply(LwM2MRpcResponseBody response, boolean failed) {
|
||||
TransportProtos.ToDeviceRpcResponseMsg msg = TransportProtos.ToDeviceRpcResponseMsg.newBuilder()
|
||||
.setPayload(JacksonUtil.toString(response))
|
||||
.setRequestId(request.getRequestId())
|
||||
.setFailed(failed)
|
||||
.build();
|
||||
transportService.process(client.getSession(), msg, null);
|
||||
}
|
||||
@ -72,11 +84,11 @@ public abstract class RpcDownlinkRequestCallbackProxy<R, T> implements DownlinkR
|
||||
abstract protected void sendRpcReplyOnSuccess(T response);
|
||||
|
||||
protected void sendRpcReplyOnValidationError(String msg) {
|
||||
reply(LwM2MRpcResponseBody.builder().result(ResponseCode.BAD_REQUEST.getName()).error(msg).build());
|
||||
reply(LwM2MRpcResponseBody.builder().result(ResponseCode.BAD_REQUEST.getName()).error(msg).build(), true);
|
||||
}
|
||||
|
||||
protected void sendRpcReplyOnError(Exception e) {
|
||||
reply(LwM2MRpcResponseBody.builder().result(ResponseCode.INTERNAL_SERVER_ERROR.getName()).error(e.getMessage()).build());
|
||||
reply(LwM2MRpcResponseBody.builder().result(ResponseCode.INTERNAL_SERVER_ERROR.getName()).error(e.getMessage()).build(), true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user