Lwm2m: RPC finish
This commit is contained in:
parent
a8dd25a7c8
commit
89c1743fa0
@ -104,6 +104,7 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.L
|
|||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.READ;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.READ;
|
||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES;
|
||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_REPLACE;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_REPLACE;
|
||||||
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_UPDATE;
|
||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertJsonArrayToSet;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertJsonArrayToSet;
|
||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromIdVerToObjectId;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromIdVerToObjectId;
|
||||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromObjectIdToIdVer;
|
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertPathFromObjectIdToIdVer;
|
||||||
@ -455,9 +456,23 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler
|
|||||||
lwm2mClientRpcRequest.setValue(rpcRequest.get(lwm2mClientRpcRequest.valueKey).getAsString());
|
lwm2mClientRpcRequest.setValue(rpcRequest.get(lwm2mClientRpcRequest.valueKey).getAsString());
|
||||||
}
|
}
|
||||||
if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonObject()) {
|
if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonObject()) {
|
||||||
lwm2mClientRpcRequest.setParams(new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey)
|
ConcurrentHashMap<String, Object> params = new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey)
|
||||||
.getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() {
|
.getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() {
|
||||||
}.getType()));
|
}.getType());
|
||||||
|
if (WRITE_UPDATE == lwm2mClientRpcRequest.getTypeOper()) {
|
||||||
|
ConcurrentHashMap<String, Object> paramsResourceId = convertParamsToResourceId (params, sessionInfo);
|
||||||
|
if (paramsResourceId.size() > 0) {
|
||||||
|
lwm2mClientRpcRequest.setParams(paramsResourceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lwm2mClientRpcRequest.setParams(params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (rpcRequest.has(lwm2mClientRpcRequest.paramsKey) && rpcRequest.get(lwm2mClientRpcRequest.paramsKey).isJsonArray()) {
|
||||||
|
new Gson().fromJson(rpcRequest.get(lwm2mClientRpcRequest.paramsKey)
|
||||||
|
.getAsJsonObject().toString(), new TypeToken<ConcurrentHashMap<String, Object>>() {
|
||||||
|
}.getType());
|
||||||
}
|
}
|
||||||
lwm2mClientRpcRequest.setSessionInfo(sessionInfo);
|
lwm2mClientRpcRequest.setSessionInfo(sessionInfo);
|
||||||
if (OBSERVE_READ_ALL != lwm2mClientRpcRequest.getTypeOper() && lwm2mClientRpcRequest.getTargetIdVer() == null) {
|
if (OBSERVE_READ_ALL != lwm2mClientRpcRequest.getTypeOper() && lwm2mClientRpcRequest.getTargetIdVer() == null) {
|
||||||
@ -484,6 +499,21 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler
|
|||||||
return lwm2mClientRpcRequest;
|
return lwm2mClientRpcRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ConcurrentHashMap<String, Object> convertParamsToResourceId (ConcurrentHashMap<String, Object> params,
|
||||||
|
SessionInfoProto sessionInfo) {
|
||||||
|
ConcurrentHashMap<String, Object> paramsIdVer = new ConcurrentHashMap<>();
|
||||||
|
params.forEach((k, v) -> {
|
||||||
|
String targetIdVer = this.getPresentPathIntoProfile(sessionInfo, k);
|
||||||
|
if (targetIdVer != null ) {
|
||||||
|
LwM2mPath targetId = new LwM2mPath(convertPathFromIdVerToObjectId(targetIdVer));
|
||||||
|
if (targetId.isResource()) {
|
||||||
|
paramsIdVer.put(String.valueOf(targetId.getResourceId()), v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return paramsIdVer;
|
||||||
|
}
|
||||||
|
|
||||||
public void sentRpcRequest(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) {
|
public void sentRpcRequest(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) {
|
||||||
rpcRequest.setResponseCode(requestCode);
|
rpcRequest.setResponseCode(requestCode);
|
||||||
if (LOG_LW2M_ERROR.equals(typeMsg)) {
|
if (LOG_LW2M_ERROR.equals(typeMsg)) {
|
||||||
|
|||||||
@ -197,8 +197,18 @@ public class LwM2mTransportRequest {
|
|||||||
targetIdVer, params,
|
targetIdVer, params,
|
||||||
this.config.getModelProvider(),
|
this.config.getModelProvider(),
|
||||||
this.converter);
|
this.converter);
|
||||||
request = new WriteRequest(WriteRequest.Mode.UPDATE, contentFormat, resultIds.getObjectId(),
|
if (resources.size()>0) {
|
||||||
resultIds.getObjectInstanceId(), resources);
|
request = new WriteRequest(WriteRequest.Mode.UPDATE, contentFormat, resultIds.getObjectId(),
|
||||||
|
resultIds.getObjectInstanceId(), resources);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Lwm2mClientRpcRequest rpcRequestClone = (Lwm2mClientRpcRequest) rpcRequest.clone();
|
||||||
|
if (rpcRequestClone != null) {
|
||||||
|
String errorMsg = String.format("Path %s params is not valid", targetIdVer);
|
||||||
|
serviceImpl.sentRpcRequest(rpcRequestClone, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR);
|
||||||
|
rpcRequest = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (resultIds.getObjectId() >= 0) {
|
} else if (resultIds.getObjectId() >= 0) {
|
||||||
request = new ObserveRequest(resultIds.getObjectId());
|
request = new ObserveRequest(resultIds.getObjectId());
|
||||||
@ -218,7 +228,8 @@ public class LwM2mTransportRequest {
|
|||||||
} catch (ClientSleepingException e) {
|
} catch (ClientSleepingException e) {
|
||||||
DownlinkRequest finalRequest = request;
|
DownlinkRequest finalRequest = request;
|
||||||
long finalTimeoutInMs = timeoutInMs;
|
long finalTimeoutInMs = timeoutInMs;
|
||||||
lwM2MClient.getQueuedRequests().add(() -> sendRequest(registration, lwM2MClient, finalRequest, finalTimeoutInMs, rpcRequest));
|
Lwm2mClientRpcRequest finalRpcRequest = rpcRequest;
|
||||||
|
lwM2MClient.getQueuedRequests().add(() -> sendRequest(registration, lwM2MClient, finalRequest, finalTimeoutInMs, finalRpcRequest));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[{}] [{}] [{}] Failed to send downlink.", registration.getEndpoint(), targetIdVer, typeOper.name(), e);
|
log.error("[{}] [{}] [{}] Failed to send downlink.", registration.getEndpoint(), targetIdVer, typeOper.name(), e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -107,4 +107,14 @@ public class Lwm2mClientRpcRequest {
|
|||||||
.setRequestId(this.requestId)
|
.setRequestId(this.requestId)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object clone() {
|
||||||
|
try {
|
||||||
|
return super.clone();
|
||||||
|
} catch (CloneNotSupportedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user