Commit fa0e55f15b7675b2915f007afc03ba7d4f0498a2

Authored by YevhenBondarenko
1 parent 33c6aecc

process event onDeviceDeleted

@@ -19,13 +19,12 @@ import io.netty.util.concurrent.Future; @@ -19,13 +19,12 @@ import io.netty.util.concurrent.Future;
19 import io.netty.util.concurrent.GenericFutureListener; 19 import io.netty.util.concurrent.GenericFutureListener;
20 import lombok.RequiredArgsConstructor; 20 import lombok.RequiredArgsConstructor;
21 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
22 -import org.jetbrains.annotations.NotNull;  
23 import org.thingsboard.server.common.data.Device; 22 import org.thingsboard.server.common.data.Device;
24 import org.thingsboard.server.common.data.DeviceProfile; 23 import org.thingsboard.server.common.data.DeviceProfile;
25 import org.thingsboard.server.common.data.ResourceType; 24 import org.thingsboard.server.common.data.ResourceType;
  25 +import org.thingsboard.server.common.data.id.DeviceId;
26 import org.thingsboard.server.common.transport.SessionMsgListener; 26 import org.thingsboard.server.common.transport.SessionMsgListener;
27 import org.thingsboard.server.common.transport.TransportService; 27 import org.thingsboard.server.common.transport.TransportService;
28 -import org.thingsboard.server.common.transport.TransportServiceCallback;  
29 import org.thingsboard.server.gen.transport.TransportProtos; 28 import org.thingsboard.server.gen.transport.TransportProtos;
30 import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg; 29 import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg;
31 import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg; 30 import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg;
@@ -109,4 +108,14 @@ public class LwM2mSessionMsgListener implements GenericFutureListener<Future<? s @@ -109,4 +108,14 @@ public class LwM2mSessionMsgListener implements GenericFutureListener<Future<? s
109 this.handler.onResourceDelete(resourceDeleteMsgOpt); 108 this.handler.onResourceDelete(resourceDeleteMsgOpt);
110 } 109 }
111 } 110 }
  111 +
  112 + @Override
  113 + public void onDeviceDeleted(DeviceId deviceId) {
  114 + log.trace("[{}] Device on delete", deviceId);
  115 + try{
  116 + this.handler.onDeviceDelete(deviceId);
  117 + } catch (Exception e) {
  118 + log.error("", e);
  119 + }
  120 + }
112 } 121 }
@@ -46,6 +46,7 @@ import org.thingsboard.server.common.data.device.data.lwm2m.ObjectAttributes; @@ -46,6 +46,7 @@ import org.thingsboard.server.common.data.device.data.lwm2m.ObjectAttributes;
46 import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration; 46 import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
47 import org.thingsboard.server.common.data.device.data.lwm2m.TelemetryMappingConfiguration; 47 import org.thingsboard.server.common.data.device.data.lwm2m.TelemetryMappingConfiguration;
48 import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration; 48 import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
  49 +import org.thingsboard.server.common.data.id.DeviceId;
49 import org.thingsboard.server.common.data.id.TenantId; 50 import org.thingsboard.server.common.data.id.TenantId;
50 import org.thingsboard.server.common.data.ota.OtaPackageUtil; 51 import org.thingsboard.server.common.data.ota.OtaPackageUtil;
51 import org.thingsboard.server.common.transport.TransportService; 52 import org.thingsboard.server.common.transport.TransportService;
@@ -73,6 +74,8 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObser @@ -73,6 +74,8 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObser
73 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest; 74 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest;
74 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback; 75 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback;
75 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverRequest; 76 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverRequest;
  77 +import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MExecuteCallback;
  78 +import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MExecuteRequest;
76 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback; 79 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback;
77 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveCallback; 80 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveCallback;
78 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveRequest; 81 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveRequest;
@@ -82,7 +85,6 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteAttrib @@ -82,7 +85,6 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteAttrib
82 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteAttributesRequest; 85 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MWriteAttributesRequest;
83 import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogService; 86 import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogService;
84 import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService; 87 import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService;
85 -import org.thingsboard.server.transport.lwm2m.server.rpc.LwM2MRpcRequestHandler;  
86 import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager; 88 import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager;
87 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore; 89 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore;
88 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl; 90 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl;
@@ -131,6 +133,8 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -131,6 +133,8 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
131 133
132 public LwM2mValueConverterImpl converter; 134 public LwM2mValueConverterImpl converter;
133 135
  136 + private static final String REBOOT_ID = "/3/0/4";
  137 +
134 private final TransportService transportService; 138 private final TransportService transportService;
135 private final LwM2mTransportContext context; 139 private final LwM2mTransportContext context;
136 private final LwM2MAttributesService attributesService; 140 private final LwM2MAttributesService attributesService;
@@ -275,26 +279,30 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -275,26 +279,30 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
275 public void unReg(Registration registration, Collection<Observation> observations) { 279 public void unReg(Registration registration, Collection<Observation> observations) {
276 executor.submit(() -> { 280 executor.submit(() -> {
277 LwM2mClient client = clientContext.getClientByEndpoint(registration.getEndpoint()); 281 LwM2mClient client = clientContext.getClientByEndpoint(registration.getEndpoint());
278 - try {  
279 - logService.log(client, LOG_LWM2M_INFO + ": Client unRegistration");  
280 - clientContext.unregister(client, registration);  
281 - SessionInfoProto sessionInfo = client.getSession();  
282 - if (sessionInfo != null) {  
283 - sessionManager.deregister(sessionInfo);  
284 - sessionStore.remove(registration.getEndpoint());  
285 - log.info("Client close session: [{}] unReg [{}] name [{}] profile ", registration.getId(), registration.getEndpoint(), sessionInfo.getDeviceType());  
286 - } else {  
287 - log.error("Client close session: [{}] unReg [{}] name [{}] sessionInfo ", registration.getId(), registration.getEndpoint(), null);  
288 - }  
289 - } catch (LwM2MClientStateException stateException) {  
290 - log.info("[{}] delete registration: [{}] {}.", registration.getEndpoint(), stateException.getState(), stateException.getMessage());  
291 - } catch (Throwable t) {  
292 - log.error("[{}] endpoint [{}] error Unable un registration.", registration.getEndpoint(), t);  
293 - logService.log(client, LOG_LWM2M_ERROR + String.format(": Client Unable un Registration, %s", t.getMessage()));  
294 - } 282 + logService.log(client, LOG_LWM2M_INFO + ": Client unRegistration");
  283 + doUnReg(registration, client);
295 }); 284 });
296 } 285 }
297 286
  287 + private void doUnReg(Registration registration, LwM2mClient client) {
  288 + try {
  289 + clientContext.unregister(client, registration);
  290 + SessionInfoProto sessionInfo = client.getSession();
  291 + if (sessionInfo != null) {
  292 + sessionManager.deregister(sessionInfo);
  293 + sessionStore.remove(registration.getEndpoint());
  294 + log.info("Client close session: [{}] unReg [{}] name [{}] profile ", registration.getId(), registration.getEndpoint(), sessionInfo.getDeviceType());
  295 + } else {
  296 + log.error("Client close session: [{}] unReg [{}] name [{}] sessionInfo ", registration.getId(), registration.getEndpoint(), null);
  297 + }
  298 + } catch (LwM2MClientStateException stateException) {
  299 + log.info("[{}] delete registration: [{}] {}.", registration.getEndpoint(), stateException.getState(), stateException.getMessage());
  300 + } catch (Throwable t) {
  301 + log.error("[{}] endpoint [{}] error Unable un registration.", registration.getEndpoint(), t);
  302 + logService.log(client, LOG_LWM2M_ERROR + String.format(": Client Unable un Registration, %s", t.getMessage()));
  303 + }
  304 + }
  305 +
298 @Override 306 @Override
299 public void onSleepingDev(Registration registration) { 307 public void onSleepingDev(Registration registration) {
300 log.debug("[{}] [{}] Received endpoint sleeping event", registration.getId(), registration.getEndpoint()); 308 log.debug("[{}] [{}] Received endpoint sleeping event", registration.getId(), registration.getEndpoint());
@@ -391,6 +399,14 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -391,6 +399,14 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
391 } 399 }
392 400
393 @Override 401 @Override
  402 + public void onDeviceDelete(DeviceId deviceId) {
  403 + LwM2mClient client = clientContext.getClientByDeviceId(deviceId.getId());
  404 + TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(REBOOT_ID).timeout(clientContext.getRequestTimeout(client)).build();
  405 + defaultLwM2MDownlinkMsgHandler.sendExecuteRequest(client, request, new TbLwM2MExecuteCallback(logService, client, REBOOT_ID));
  406 + doUnReg(client.getRegistration(), client);
  407 + }
  408 +
  409 + @Override
394 public void onResourceUpdate(TransportProtos.ResourceUpdateMsg resourceUpdateMsgOpt) { 410 public void onResourceUpdate(TransportProtos.ResourceUpdateMsg resourceUpdateMsgOpt) {
395 String idVer = resourceUpdateMsgOpt.getResourceKey(); 411 String idVer = resourceUpdateMsgOpt.getResourceKey();
396 TenantId tenantId = new TenantId(new UUID(resourceUpdateMsgOpt.getTenantIdMSB(), resourceUpdateMsgOpt.getTenantIdLSB())); 412 TenantId tenantId = new TenantId(new UUID(resourceUpdateMsgOpt.getTenantIdMSB(), resourceUpdateMsgOpt.getTenantIdLSB()));
@@ -23,6 +23,7 @@ import org.eclipse.leshan.core.response.ReadResponse; @@ -23,6 +23,7 @@ import org.eclipse.leshan.core.response.ReadResponse;
23 import org.eclipse.leshan.server.registration.Registration; 23 import org.eclipse.leshan.server.registration.Registration;
24 import org.thingsboard.server.common.data.Device; 24 import org.thingsboard.server.common.data.Device;
25 import org.thingsboard.server.common.data.DeviceProfile; 25 import org.thingsboard.server.common.data.DeviceProfile;
  26 +import org.thingsboard.server.common.data.id.DeviceId;
26 import org.thingsboard.server.gen.transport.TransportProtos; 27 import org.thingsboard.server.gen.transport.TransportProtos;
27 import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig; 28 import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
28 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient; 29 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
@@ -48,6 +49,8 @@ public interface LwM2mUplinkMsgHandler { @@ -48,6 +49,8 @@ public interface LwM2mUplinkMsgHandler {
48 49
49 void onDeviceUpdate(TransportProtos.SessionInfoProto sessionInfo, Device device, Optional<DeviceProfile> deviceProfileOpt); 50 void onDeviceUpdate(TransportProtos.SessionInfoProto sessionInfo, Device device, Optional<DeviceProfile> deviceProfileOpt);
50 51
  52 + void onDeviceDelete(DeviceId deviceId);
  53 +
51 void onResourceUpdate(TransportProtos.ResourceUpdateMsg resourceUpdateMsgOpt); 54 void onResourceUpdate(TransportProtos.ResourceUpdateMsg resourceUpdateMsgOpt);
52 55
53 void onResourceDelete(TransportProtos.ResourceDeleteMsg resourceDeleteMsgOpt); 56 void onResourceDelete(TransportProtos.ResourceDeleteMsg resourceDeleteMsgOpt);