Merge branch 'feature/lwm2m-refactoring-downlink' of https://github.com/YevhenBondarenko/thingsboard into feature/lwm2m-refactoring-downlink
This commit is contained in:
commit
def5fe4c5c
@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2021 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.transport.lwm2m.server.downlink;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class TbLwM2MLatchCallback<R, T> implements DownlinkRequestCallback<R, T> {
|
||||||
|
|
||||||
|
private final CountDownLatch countDownLatch;
|
||||||
|
private final DownlinkRequestCallback<R, T> callback;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(R request, T response) {
|
||||||
|
callback.onSuccess(request, response);
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onValidationError(String params, String msg) {
|
||||||
|
callback.onValidationError(params, msg);
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(String params, Exception e) {
|
||||||
|
callback.onError(params, e);
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -18,8 +18,8 @@ package org.thingsboard.server.transport.lwm2m.server.downlink;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.eclipse.leshan.core.request.ReadRequest;
|
import org.eclipse.leshan.core.request.ReadRequest;
|
||||||
import org.eclipse.leshan.core.response.ReadResponse;
|
import org.eclipse.leshan.core.response.ReadResponse;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.uplink.LwM2mUplinkMsgHandler;
|
|
||||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
|
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
|
||||||
|
import org.thingsboard.server.transport.lwm2m.server.uplink.LwM2mUplinkMsgHandler;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TbLwM2MReadCallback extends TbLwM2MTargetedCallback<ReadRequest, ReadResponse> {
|
public class TbLwM2MReadCallback extends TbLwM2MTargetedCallback<ReadRequest, ReadResponse> {
|
||||||
|
|||||||
@ -28,7 +28,10 @@ import org.eclipse.leshan.core.node.LwM2mObjectInstance;
|
|||||||
import org.eclipse.leshan.core.node.LwM2mPath;
|
import org.eclipse.leshan.core.node.LwM2mPath;
|
||||||
import org.eclipse.leshan.core.node.LwM2mResource;
|
import org.eclipse.leshan.core.node.LwM2mResource;
|
||||||
import org.eclipse.leshan.core.observation.Observation;
|
import org.eclipse.leshan.core.observation.Observation;
|
||||||
|
import org.eclipse.leshan.core.request.ObserveRequest;
|
||||||
|
import org.eclipse.leshan.core.request.ReadRequest;
|
||||||
import org.eclipse.leshan.core.request.WriteRequest;
|
import org.eclipse.leshan.core.request.WriteRequest;
|
||||||
|
import org.eclipse.leshan.core.response.ObserveResponse;
|
||||||
import org.eclipse.leshan.core.response.ReadResponse;
|
import org.eclipse.leshan.core.response.ReadResponse;
|
||||||
import org.eclipse.leshan.server.registration.Registration;
|
import org.eclipse.leshan.server.registration.Registration;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@ -68,7 +71,9 @@ import org.thingsboard.server.transport.lwm2m.server.client.LwM2mFwSwUpdate;
|
|||||||
import org.thingsboard.server.transport.lwm2m.server.client.ParametersAnalyzeResult;
|
import org.thingsboard.server.transport.lwm2m.server.client.ParametersAnalyzeResult;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.client.ResourceValue;
|
import org.thingsboard.server.transport.lwm2m.server.client.ResourceValue;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.client.ResultsAddKeyValueProto;
|
import org.thingsboard.server.transport.lwm2m.server.client.ResultsAddKeyValueProto;
|
||||||
|
import org.thingsboard.server.transport.lwm2m.server.downlink.DownlinkRequestCallback;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.downlink.LwM2mDownlinkMsgHandler;
|
import org.thingsboard.server.transport.lwm2m.server.downlink.LwM2mDownlinkMsgHandler;
|
||||||
|
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveCallback;
|
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveCallback;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest;
|
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest;
|
||||||
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback;
|
import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback;
|
||||||
@ -97,6 +102,7 @@ import java.util.Random;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -451,16 +457,29 @@ public class DefaultLwM2MUplinkMsgHandler implements LwM2mUplinkMsgHandler {
|
|||||||
Set<String> targetIds = new HashSet<>(profile.getObserveAttr().getAttribute());
|
Set<String> targetIds = new HashSet<>(profile.getObserveAttr().getAttribute());
|
||||||
targetIds.addAll(profile.getObserveAttr().getTelemetry());
|
targetIds.addAll(profile.getObserveAttr().getTelemetry());
|
||||||
targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet());
|
targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet());
|
||||||
lwM2MClient.getPendingReadRequests().addAll(targetIds);
|
|
||||||
targetIds.forEach(versionedId -> sendReadRequest(lwM2MClient, versionedId));
|
CountDownLatch latch = new CountDownLatch(targetIds.size());
|
||||||
|
targetIds.forEach(versionedId -> sendReadRequest(lwM2MClient, versionedId,
|
||||||
|
new TbLwM2MLatchCallback<>(latch, new TbLwM2MReadCallback(this, lwM2MClient, versionedId))));
|
||||||
|
try {
|
||||||
|
latch.await();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.error("Failed to await Read requests!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendObserveRequests(LwM2mClient lwM2MClient, Lwm2mDeviceProfileTransportConfiguration profile, Set<String> supportedObjects) {
|
private void sendObserveRequests(LwM2mClient lwM2MClient, Lwm2mDeviceProfileTransportConfiguration profile, Set<String> supportedObjects) {
|
||||||
Set<String> targetIds = profile.getObserveAttr().getObserve();
|
Set<String> targetIds = profile.getObserveAttr().getObserve();
|
||||||
targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet());
|
targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet());
|
||||||
// TODO: why do we need to put observe into pending read requests?
|
|
||||||
// lwM2MClient.getPendingReadRequests().addAll(targetIds);
|
CountDownLatch latch = new CountDownLatch(targetIds.size());
|
||||||
targetIds.forEach(targetId -> sendObserveRequest(lwM2MClient, targetId));
|
targetIds.forEach(targetId -> sendObserveRequest(lwM2MClient, targetId,
|
||||||
|
new TbLwM2MLatchCallback<>(latch, new TbLwM2MObserveCallback(this, lwM2MClient, targetId))));
|
||||||
|
try {
|
||||||
|
latch.await();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.error("Failed to await Observe requests!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendWriteAttributeRequests(LwM2mClient lwM2MClient, Lwm2mDeviceProfileTransportConfiguration profile, Set<String> supportedObjects) {
|
private void sendWriteAttributeRequests(LwM2mClient lwM2MClient, Lwm2mDeviceProfileTransportConfiguration profile, Set<String> supportedObjects) {
|
||||||
@ -485,13 +504,21 @@ public class DefaultLwM2MUplinkMsgHandler implements LwM2mUplinkMsgHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendReadRequest(LwM2mClient lwM2MClient, String versionedId) {
|
private void sendReadRequest(LwM2mClient lwM2MClient, String versionedId) {
|
||||||
|
sendReadRequest(lwM2MClient, versionedId, new TbLwM2MReadCallback(this, lwM2MClient, versionedId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendReadRequest(LwM2mClient lwM2MClient, String versionedId, DownlinkRequestCallback<ReadRequest, ReadResponse> callback) {
|
||||||
TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
|
TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
|
||||||
defaultLwM2MDownlinkMsgHandler.sendReadRequest(lwM2MClient, request, new TbLwM2MReadCallback(this, lwM2MClient, versionedId));
|
defaultLwM2MDownlinkMsgHandler.sendReadRequest(lwM2MClient, request, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendObserveRequest(LwM2mClient lwM2MClient, String versionedId) {
|
private void sendObserveRequest(LwM2mClient lwM2MClient, String versionedId) {
|
||||||
|
sendObserveRequest(lwM2MClient, versionedId, new TbLwM2MObserveCallback(this, lwM2MClient, versionedId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendObserveRequest(LwM2mClient lwM2MClient, String versionedId, DownlinkRequestCallback<ObserveRequest, ObserveResponse> callback) {
|
||||||
TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
|
TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
|
||||||
defaultLwM2MDownlinkMsgHandler.sendObserveRequest(lwM2MClient, request, new TbLwM2MObserveCallback(this, lwM2MClient, versionedId));
|
defaultLwM2MDownlinkMsgHandler.sendObserveRequest(lwM2MClient, request, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendWriteAttributesRequest(LwM2mClient lwM2MClient, String targetId, ObjectAttributes params) {
|
private void sendWriteAttributesRequest(LwM2mClient lwM2MClient, String targetId, ObjectAttributes params) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user