Commit 89c1743fa0549034767a45ee740f8f53114f0ead
Committed by
Andrew Shvayka
1 parent
a8dd25a7
Lwm2m: RPC finish
Showing
3 changed files
with
56 additions
and
5 deletions
@@ -104,6 +104,7 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.L | @@ -104,6 +104,7 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.L | ||
104 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.READ; | 104 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.READ; |
105 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES; | 105 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES; |
106 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_REPLACE; | 106 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_REPLACE; |
107 | +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_UPDATE; | ||
107 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertJsonArrayToSet; | 108 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertJsonArrayToSet; |
108 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromIdVerToObjectId; | 109 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromIdVerToObjectId; |
109 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromObjectIdToIdVer; | 110 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromObjectIdToIdVer; |
@@ -455,9 +456,23 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler | @@ -455,9 +456,23 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler | ||
455 | lwm2mClientRpcRequest.setValue(rpcRequest.get(lwm2mClientRpcRequest.valueKey).getAsString()); | 456 | lwm2mClientRpcRequest.setValue(rpcRequest.get(lwm2mClientRpcRequest.valueKey).getAsString()); |
456 | } | 457 | } |
457 | if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonObject()) { | 458 | if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonObject()) { |
458 | - lwm2mClientRpcRequest.setParams(new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey) | 459 | + ConcurrentHashMap<String, Object> params = new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey) |
459 | .getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() { | 460 | .getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() { |
460 | - }.getType())); | 461 | + }.getType()); |
462 | + if (WRITE_UPDATE == lwm2mClientRpcRequest.getTypeOper()) { | ||
463 | + ConcurrentHashMap<String, Object> paramsResourceId = convertParamsToResourceId (params, sessionInfo); | ||
464 | + if (paramsResourceId.size() > 0) { | ||
465 | + lwm2mClientRpcRequest.setParams(paramsResourceId); | ||
466 | + } | ||
467 | + } | ||
468 | + else { | ||
469 | + lwm2mClientRpcRequest.setParams(params); | ||
470 | + } | ||
471 | + } | ||
472 | + else if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonArray()) { | ||
473 | + new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey) | ||
474 | + .getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() { | ||
475 | + }.getType()); | ||
461 | } | 476 | } |
462 | lwm2mClientRpcRequest.setSessionInfo(sessionInfo); | 477 | lwm2mClientRpcRequest.setSessionInfo(sessionInfo); |
463 | if (OBSERVE_READ_ALL != lwm2mClientRpcRequest.getTypeOper() && lwm2mClientRpcRequest.getTargetIdVer() == null) { | 478 | if (OBSERVE_READ_ALL != lwm2mClientRpcRequest.getTypeOper() && lwm2mClientRpcRequest.getTargetIdVer() == null) { |
@@ -484,6 +499,21 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler | @@ -484,6 +499,21 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler | ||
484 | return lwm2mClientRpcRequest; | 499 | return lwm2mClientRpcRequest; |
485 | } | 500 | } |
486 | 501 | ||
502 | + private ConcurrentHashMap<String, Object> convertParamsToResourceId (ConcurrentHashMap<String, Object> params, | ||
503 | + SessionInfoProto sessionInfo) { | ||
504 | + ConcurrentHashMap<String, Object> paramsIdVer = new ConcurrentHashMap<>(); | ||
505 | + params.forEach((k, v) -> { | ||
506 | + String targetIdVer = this.getPresentPathIntoProfile(sessionInfo, k); | ||
507 | + if (targetIdVer != null ) { | ||
508 | + LwM2mPath targetId = new LwM2mPath(convertPathFromIdVerToObjectId(targetIdVer)); | ||
509 | + if (targetId.isResource()) { | ||
510 | + paramsIdVer.put(String.valueOf(targetId.getResourceId()), v); | ||
511 | + } | ||
512 | + } | ||
513 | + }); | ||
514 | + return paramsIdVer; | ||
515 | + } | ||
516 | + | ||
487 | public void sentRpcRequest(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) { | 517 | public void sentRpcRequest(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) { |
488 | rpcRequest.setResponseCode(requestCode); | 518 | rpcRequest.setResponseCode(requestCode); |
489 | if (LOG_LW2M_ERROR.equals(typeMsg)) { | 519 | if (LOG_LW2M_ERROR.equals(typeMsg)) { |
@@ -197,8 +197,18 @@ public class LwM2mTransportRequest { | @@ -197,8 +197,18 @@ public class LwM2mTransportRequest { | ||
197 | targetIdVer, params, | 197 | targetIdVer, params, |
198 | this.config.getModelProvider(), | 198 | this.config.getModelProvider(), |
199 | this.converter); | 199 | this.converter); |
200 | - request = new WriteRequest(WriteRequest.Mode.UPDATE, contentFormat, resultIds.getObjectId(), | ||
201 | - resultIds.getObjectInstanceId(), resources); | 200 | + if (resources.size()>0) { |
201 | + request = new WriteRequest(WriteRequest.Mode.UPDATE, contentFormat, resultIds.getObjectId(), | ||
202 | + resultIds.getObjectInstanceId(), resources); | ||
203 | + } | ||
204 | + else { | ||
205 | + Lwm2mClientRpcRequest rpcRequestClone = (Lwm2mClientRpcRequest) rpcRequest.clone(); | ||
206 | + if (rpcRequestClone != null) { | ||
207 | + String errorMsg = String.format("Path %s params is not valid", targetIdVer); | ||
208 | + serviceImpl.sentRpcRequest(rpcRequestClone, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | ||
209 | + rpcRequest = null; | ||
210 | + } | ||
211 | + } | ||
202 | } | 212 | } |
203 | } else if (resultIds.getObjectId() >= 0) { | 213 | } else if (resultIds.getObjectId() >= 0) { |
204 | request = new ObserveRequest(resultIds.getObjectId()); | 214 | request = new ObserveRequest(resultIds.getObjectId()); |
@@ -218,7 +228,8 @@ public class LwM2mTransportRequest { | @@ -218,7 +228,8 @@ public class LwM2mTransportRequest { | ||
218 | } catch (ClientSleepingException e) { | 228 | } catch (ClientSleepingException e) { |
219 | DownlinkRequest finalRequest = request; | 229 | DownlinkRequest finalRequest = request; |
220 | long finalTimeoutInMs = timeoutInMs; | 230 | long finalTimeoutInMs = timeoutInMs; |
221 | - lwM2MClient.getQueuedRequests().add(() -> sendRequest(registration, lwM2MClient, finalRequest, finalTimeoutInMs, rpcRequest)); | 231 | + Lwm2mClientRpcRequest finalRpcRequest = rpcRequest; |
232 | + lwM2MClient.getQueuedRequests().add(() -> sendRequest(registration, lwM2MClient, finalRequest, finalTimeoutInMs, finalRpcRequest)); | ||
222 | } catch (Exception e) { | 233 | } catch (Exception e) { |
223 | log.error("[{}] [{}] [{}] Failed to send downlink.", registration.getEndpoint(), targetIdVer, typeOper.name(), e); | 234 | log.error("[{}] [{}] [{}] Failed to send downlink.", registration.getEndpoint(), targetIdVer, typeOper.name(), e); |
224 | } | 235 | } |
@@ -107,4 +107,14 @@ public class Lwm2mClientRpcRequest { | @@ -107,4 +107,14 @@ public class Lwm2mClientRpcRequest { | ||
107 | .setRequestId(this.requestId) | 107 | .setRequestId(this.requestId) |
108 | .build(); | 108 | .build(); |
109 | } | 109 | } |
110 | + | ||
111 | + @Override | ||
112 | + public Object clone() { | ||
113 | + try { | ||
114 | + return super.clone(); | ||
115 | + } catch (CloneNotSupportedException e) { | ||
116 | + e.printStackTrace(); | ||
117 | + } | ||
118 | + return null; | ||
119 | + } | ||
110 | } | 120 | } |