From a9b09da1e60731b100b3781830867ee51d36b05f Mon Sep 17 00:00:00 2001 From: Andrew Shvayka Date: Wed, 18 Apr 2018 15:49:56 +0300 Subject: [PATCH] Implemented Transport support for the new rule engine --- .../server/actors/ActorSystemContext.java | 25 +- .../server/actors/app/AppActor.java | 71 ++--- .../server/actors/device/DeviceActor.java | 68 ++--- .../device/DeviceActorMessageProcessor.java | 251 +++++++++++------- .../device/DeviceActorToRuleEngineMsg.java | 38 +++ .../actors/device/PendingSessionMsgData.java | 36 +++ .../device/RuleEngineQueuePutAckMsg.java | 36 +++ .../device/ToDeviceRpcRequestMetadata.java | 4 +- .../server/actors/plugin/PluginActor.java | 5 +- .../plugin/PluginActorMessageProcessor.java | 9 +- .../plugin/PluginProcessingContext.java | 1 + .../plugin/SharedPluginProcessingContext.java | 11 +- .../actors/rpc/BasicRpcSessionListener.java | 4 +- .../actors/ruleChain/RuleChainActor.java | 12 +- .../RuleChainActorMessageProcessor.java | 19 +- .../ruleChain/RuleChainManagerActor.java | 10 +- .../actors/service/DefaultActorService.java | 4 +- .../actors/session/ASyncMsgProcessor.java | 11 +- .../AbstractSessionActorMsgProcessor.java | 26 +- .../actors/session/SyncMsgProcessor.java | 4 +- .../server/actors/tenant/TenantActor.java | 71 ++--- .../install/ThingsboardInstallService.java | 4 +- .../cluster/rpc/ClusterGrpcService.java | 7 +- .../cluster/rpc/ClusterRpcService.java | 6 +- .../service/cluster/rpc/RpcMsgListener.java | 6 +- .../DefaultSystemDataLoaderService.java | 4 +- .../service/rpc/DefaultDeviceRpcService.java | 13 + .../server/service/rpc/DeviceRpcService.java | 3 + .../service/rpc/ToDeviceRpcRequestMsg.java | 6 + .../src/main/resources/thingsboard.yml | 16 +- .../server/common/msg/MsgType.java | 44 ++- .../server/common/msg/TbMsgMetaData.java | 4 +- .../common/msg/cluster/ClusterEventMsg.java | 8 +- .../msg/core/AttributesSubscribeMsg.java | 6 +- .../msg/core/AttributesUnsubscribeMsg.java | 7 +- .../core/AttributesUpdateNotification.java | 8 +- .../msg/core/BasicCommandAckResponse.java | 13 +- .../msg/core/BasicGetAttributesRequest.java | 7 +- .../msg/core/BasicGetAttributesResponse.java | 11 +- .../common/msg/core/BasicResponseMsg.java | 18 +- .../msg/core/BasicStatusCodeResponse.java | 13 +- .../msg/core/BasicTelemetryUploadRequest.java | 7 +- .../core/BasicUpdateAttributesRequest.java | 7 +- .../server/common/msg/core/ResponseMsg.java | 4 +- .../common/msg/core/RpcSubscribeMsg.java | 7 +- .../common/msg/core/RpcUnsubscribeMsg.java | 7 +- .../common/msg/core/RuleEngineError.java | 2 +- .../common/msg/core/RuleEngineErrorMsg.java | 12 +- .../common/msg/core/SessionCloseMsg.java | 7 +- .../msg/core/SessionCloseNotification.java | 8 +- .../common/msg/core/SessionOpenMsg.java | 7 +- .../msg/core/ToDeviceRpcRequestMsg.java | 8 +- .../msg/core/ToDeviceRpcResponseMsg.java | 7 +- .../msg/core/ToServerRpcRequestMsg.java | 6 +- .../msg/core/ToServerRpcResponseMsg.java | 8 +- ....java => BasicDeviceToDeviceActorMsg.java} | 20 +- ...orMsg.java => DeviceToDeviceActorMsg.java} | 5 +- .../common/msg/session/FromDeviceMsg.java | 2 +- .../{MsgType.java => SessionMsgType.java} | 6 +- .../common/msg/session/ToDeviceMsg.java | 2 +- .../timeout/DeviceActorQueueTimeoutMsg.java | 15 +- .../msg/timeout/DeviceActorRpcTimeoutMsg.java | 12 +- .../common/msg/timeout}/TimeoutMsg.java | 5 +- .../common/transport/TransportAdaptor.java | 4 +- .../server/dao/rule/BaseRuleChainService.java | 2 + .../DeviceAttributesEventNotificationMsg.java | 5 + ...eviceCredentialsUpdateNotificationMsg.java | 5 + .../api/device/DeviceNameOrTypeUpdateMsg.java | 6 + .../device/ToDeviceActorNotificationMsg.java | 3 +- .../api/plugins/AbstractPlugin.java | 2 +- .../server/extensions/api/plugins/Plugin.java | 2 +- .../extensions/api/plugins/PluginAction.java | 4 +- .../extensions/api/plugins/PluginContext.java | 1 + .../handlers/DefaultRuleMsgHandler.java | 7 +- .../msg/ToDeviceRpcRequestPluginMsg.java | 63 ----- .../extensions/api/rules/RuleFilter.java | 4 +- .../extensions/api/rules/RuleProcessor.java | 6 +- .../core/action/mail/SendMailAction.java | 6 +- .../core/action/rpc/RpcPluginAction.java | 15 +- .../action/rpc/ServerSideRpcCallAction.java | 6 +- .../telemetry/TelemetryPluginAction.java | 27 +- .../AbstractTemplatePluginAction.java | 8 +- .../extensions/core/filter/BasicJsFilter.java | 7 +- .../core/filter/DeviceAttributesFilter.java | 4 +- .../core/filter/DeviceTelemetryFilter.java | 4 +- .../core/filter/DeviceTypeFilter.java | 7 +- .../core/filter/MethodNameFilter.java | 6 +- .../extensions/core/filter/MsgTypeFilter.java | 25 +- .../AlarmDeduplicationProcessor.java | 4 +- .../core/processor/AlarmProcessor.java | 4 +- .../kafka/action/KafkaActionPayload.java | 5 +- .../kafka/action/KafkaPluginAction.java | 4 +- .../mqtt/action/MqttActionPayload.java | 4 +- .../mqtt/action/MqttPluginAction.java | 4 +- .../action/RabbitMqActionPayload.java | 4 +- .../rabbitmq/action/RabbitMqPluginAction.java | 4 +- .../rest/action/RestApiCallActionPayload.java | 5 +- .../rest/action/RestApiCallPluginAction.java | 4 +- .../sns/action/SnsTopicActionPayload.java | 4 +- .../sns/action/SnsTopicPluginAction.java | 4 +- .../fifo/SqsFifoQueueActionPayload.java | 4 +- .../action/fifo/SqsFifoQueuePluginAction.java | 7 +- .../SqsStandardQueueActionPayload.java | 5 +- .../SqsStandardQueuePluginAction.java | 4 +- .../sqs/plugin/SqsMessageHandler.java | 2 +- .../engine/telemetry/TbMsgTelemetryNode.java | 4 +- .../transport/coap/CoapTransportResource.java | 20 +- .../coap/adaptors/JsonCoapAdaptor.java | 15 +- .../server/transport/coap/CoapServerTest.java | 4 +- .../http/session/HttpSessionCtx.java | 6 +- .../transport/mqtt/MqttTransportHandler.java | 2 +- .../mqtt/adaptors/JsonMqttAdaptor.java | 10 +- .../mqtt/session/GatewayDeviceSessionCtx.java | 6 +- 113 files changed, 805 insertions(+), 647 deletions(-) create mode 100644 application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java create mode 100644 application/src/main/java/org/thingsboard/server/actors/device/PendingSessionMsgData.java create mode 100644 application/src/main/java/org/thingsboard/server/actors/device/RuleEngineQueuePutAckMsg.java rename common/message/src/main/java/org/thingsboard/server/common/msg/device/{BasicToDeviceActorMsg.java => BasicDeviceToDeviceActorMsg.java} (76%) rename common/message/src/main/java/org/thingsboard/server/common/msg/device/{ToDeviceActorMsg.java => DeviceToDeviceActorMsg.java} (84%) rename common/message/src/main/java/org/thingsboard/server/common/msg/session/{MsgType.java => SessionMsgType.java} (93%) rename extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutIntMsg.java => common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorQueueTimeoutMsg.java (61%) rename extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutUUIDMsg.java => common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorRpcTimeoutMsg.java (66%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg => common/message/src/main/java/org/thingsboard/server/common/msg/timeout}/TimeoutMsg.java (81%) delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToDeviceRpcRequestPluginMsg.java diff --git a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java index 50d2530b53..63029639a4 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java @@ -61,6 +61,7 @@ import org.thingsboard.server.service.cluster.rpc.ClusterRpcService; import org.thingsboard.server.service.component.ComponentDiscoveryService; import org.thingsboard.server.service.executors.DbCallbackExecutorService; import org.thingsboard.server.service.mail.MailExecutorService; +import org.thingsboard.server.service.rpc.DeviceRpcService; import org.thingsboard.server.service.script.JsExecutorService; import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; @@ -161,6 +162,10 @@ public class ActorSystemContext { @Getter private TelemetrySubscriptionService tsSubService; + @Autowired + @Getter + private DeviceRpcService deviceRpcService; + @Autowired @Getter @Setter @@ -186,17 +191,13 @@ public class ActorSystemContext { @Getter private long syncSessionTimeout; - @Value("${actors.plugin.termination.delay}") - @Getter - private long pluginActorTerminationDelay; - - @Value("${actors.plugin.processing.timeout}") + @Value("${actors.queue.enabled}") @Getter - private long pluginProcessingTimeout; + private boolean queuePersistenceEnabled; - @Value("${actors.plugin.error_persist_frequency}") + @Value("${actors.queue.timeout}") @Getter - private long pluginErrorPersistFrequency; + private long queuePersistenceTimeout; @Value("${actors.rule.chain.error_persist_frequency}") @Getter @@ -206,14 +207,6 @@ public class ActorSystemContext { @Getter private long ruleNodeErrorPersistFrequency; - @Value("${actors.rule.termination.delay}") - @Getter - private long ruleActorTerminationDelay; - - @Value("${actors.rule.error_persist_frequency}") - @Getter - private long ruleErrorPersistFrequency; - @Value("${actors.statistics.enabled}") @Getter private boolean statisticsEnabled; diff --git a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java index a75158f2dd..07ff89e6b6 100644 --- a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java @@ -29,13 +29,12 @@ import org.thingsboard.server.actors.shared.plugin.SystemPluginManager; import org.thingsboard.server.actors.shared.rulechain.SystemRuleChainManager; import org.thingsboard.server.actors.tenant.TenantActor; import org.thingsboard.server.common.data.Tenant; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.PageDataIterable; import org.thingsboard.server.common.msg.TbActorMsg; -import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; +import org.thingsboard.server.common.msg.aware.TenantAwareMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg; import org.thingsboard.server.dao.model.ModelConstants; @@ -90,12 +89,22 @@ public class AppActor extends RuleChainManagerActor { @Override protected boolean process(TbActorMsg msg) { switch (msg.getMsgType()) { + case CLUSTER_EVENT_MSG: + broadcast(msg); + break; case COMPONENT_LIFE_CYCLE_MSG: onComponentLifecycleMsg((ComponentLifecycleMsg) msg); break; case SERVICE_TO_RULE_ENGINE_MSG: onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg); break; + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG: + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG: + onToDeviceActorMsg((DeviceToDeviceActorMsg) msg); + break; default: return false; } @@ -110,48 +119,12 @@ public class AppActor extends RuleChainManagerActor { } } - -// @Override -// public void onReceive(Object msg) throws Exception { -// logger.debug("Received message: {}", msg); -// if (msg instanceof ToDeviceActorMsg) { -// processDeviceMsg((ToDeviceActorMsg) msg); -// } else if (msg instanceof ToPluginActorMsg) { -// onToPluginMsg((ToPluginActorMsg) msg); -// } else if (msg instanceof ToDeviceActorNotificationMsg) { -// onToDeviceActorMsg((ToDeviceActorNotificationMsg) msg); -// } else if (msg instanceof Terminated) { -// processTermination((Terminated) msg); -// } else if (msg instanceof ClusterEventMsg) { -// broadcast(msg); -// } else if (msg instanceof ComponentLifecycleMsg) { -// onComponentLifecycleMsg((ComponentLifecycleMsg) msg); -// } else if (msg instanceof PluginTerminationMsg) { -// onPluginTerminated((PluginTerminationMsg) msg); -// } else { -// logger.warning("Unknown message: {}!", msg); -// } -// } - - private void onPluginTerminated(PluginTerminationMsg msg) { - pluginManager.remove(msg.getId()); - } - - private void broadcast(Object msg) { - pluginManager.broadcast(msg); + @Override + protected void broadcast(Object msg) { + super.broadcast(msg); tenantActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender())); } - private void onToPluginMsg(ToPluginActorMsg msg) { - ActorRef target; - if (SYSTEM_TENANT.equals(msg.getPluginTenantId())) { - target = pluginManager.getOrCreateActor(this.context(), msg.getPluginId()); - } else { - target = getOrCreateTenantActor(msg.getPluginTenantId()); - } - target.tell(msg, ActorRef.noSender()); - } - private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) { ActorRef target; if (SYSTEM_TENANT.equals(msg.getTenantId())) { @@ -166,17 +139,17 @@ public class AppActor extends RuleChainManagerActor { } } - private void onToDeviceActorMsg(ToDeviceActorNotificationMsg msg) { + private void onToDeviceActorMsg(TenantAwareMsg msg) { getOrCreateTenantActor(msg.getTenantId()).tell(msg, ActorRef.noSender()); } - private void processDeviceMsg(ToDeviceActorMsg toDeviceActorMsg) { - TenantId tenantId = toDeviceActorMsg.getTenantId(); + private void processDeviceMsg(DeviceToDeviceActorMsg deviceToDeviceActorMsg) { + TenantId tenantId = deviceToDeviceActorMsg.getTenantId(); ActorRef tenantActor = getOrCreateTenantActor(tenantId); - if (toDeviceActorMsg.getPayload().getMsgType().requiresRulesProcessing()) { -// tenantActor.tell(new RuleChainDeviceMsg(toDeviceActorMsg, ruleManager.getRuleChain(this.context())), context().self()); + if (deviceToDeviceActorMsg.getPayload().getMsgType().requiresRulesProcessing()) { +// tenantActor.tell(new RuleChainDeviceMsg(deviceToDeviceActorMsg, ruleManager.getRuleChain(this.context())), context().self()); } else { - tenantActor.tell(toDeviceActorMsg, context().self()); + tenantActor.tell(deviceToDeviceActorMsg, context().self()); } } diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java index 87bc9926d4..dfae339417 100644 --- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java @@ -24,59 +24,59 @@ import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.TbActorMsg; import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; +import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg; +import org.thingsboard.server.common.msg.timeout.DeviceActorRpcTimeoutMsg; import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; -import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg; import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; -import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; +import org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg; public class DeviceActor extends ContextAwareActor { private final LoggingAdapter logger = Logging.getLogger(getContext().system(), this); - private final TenantId tenantId; - private final DeviceId deviceId; private final DeviceActorMessageProcessor processor; private DeviceActor(ActorSystemContext systemContext, TenantId tenantId, DeviceId deviceId) { super(systemContext); - this.tenantId = tenantId; - this.deviceId = deviceId; - this.processor = new DeviceActorMessageProcessor(systemContext, logger, deviceId); + this.processor = new DeviceActorMessageProcessor(systemContext, logger, tenantId, deviceId); } @Override protected boolean process(TbActorMsg msg) { - return false; - } - - @Override - public void onReceive(Object msg) throws Exception { -// if (msg instanceof RuleChainDeviceMsg) { -// processor.process(context(), (RuleChainDeviceMsg) msg); -// } else if (msg instanceof RulesProcessedMsg) { -// processor.onRulesProcessedMsg(context(), (RulesProcessedMsg) msg); - if (msg instanceof ToDeviceActorMsg) { - processor.process(context(), (ToDeviceActorMsg) msg); - } else if (msg instanceof ToDeviceActorNotificationMsg) { - if (msg instanceof DeviceAttributesEventNotificationMsg) { + switch (msg.getMsgType()) { + case CLUSTER_EVENT_MSG: + processor.processClusterEventMsg((ClusterEventMsg) msg); + break; + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG: + processor.process(context(), (DeviceToDeviceActorMsg) msg); + break; + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG: processor.processAttributesUpdate(context(), (DeviceAttributesEventNotificationMsg) msg); - } else if (msg instanceof ToDeviceRpcRequestPluginMsg) { - processor.processRpcRequest(context(), (ToDeviceRpcRequestPluginMsg) msg); - } else if (msg instanceof DeviceCredentialsUpdateNotificationMsg){ + break; + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG: processor.processCredentialsUpdate(); - } else if (msg instanceof DeviceNameOrTypeUpdateMsg){ + break; + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG: processor.processNameOrTypeUpdate((DeviceNameOrTypeUpdateMsg) msg); - } - } else if (msg instanceof TimeoutMsg) { - processor.processTimeout(context(), (TimeoutMsg) msg); - } else if (msg instanceof ClusterEventMsg) { - processor.processClusterEventMsg((ClusterEventMsg) msg); - } else { - logger.debug("[{}][{}] Unknown msg type.", tenantId, deviceId, msg.getClass().getName()); + break; + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG: + processor.processRpcRequest(context(), (ToDeviceRpcRequestMsg) msg); + break; + case DEVICE_ACTOR_RPC_TIMEOUT_MSG: + processor.processRpcTimeout(context(), (DeviceActorRpcTimeoutMsg) msg); + break; + case DEVICE_ACTOR_QUEUE_TIMEOUT_MSG: + processor.processQueueTimeout(context(), (DeviceActorQueueTimeoutMsg) msg); + break; + case RULE_ENGINE_QUEUE_PUT_ACK_MSG: + processor.processQueueAck(context(), (RuleEngineQueuePutAckMsg) msg); + break; + default: + return false; } + return true; } public static class ActorCreator extends ContextBasedCreator { diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java index 07b6b9b836..e289f13e4d 100644 --- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java @@ -18,31 +18,63 @@ package org.thingsboard.server.actors.device; import akka.actor.ActorContext; import akka.actor.ActorRef; import akka.event.LoggingAdapter; +import com.datastax.driver.core.utils.UUIDs; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import org.thingsboard.server.actors.ActorSystemContext; import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.SessionId; +import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.AttributeKey; import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; +import org.thingsboard.server.common.msg.TbMsg; +import org.thingsboard.server.common.msg.TbMsgDataType; +import org.thingsboard.server.common.msg.TbMsgMetaData; import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.common.msg.core.*; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.core.AttributesUpdateNotification; +import org.thingsboard.server.common.msg.core.BasicCommandAckResponse; +import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse; +import org.thingsboard.server.common.msg.core.BasicToDeviceSessionActorMsg; +import org.thingsboard.server.common.msg.core.RuleEngineError; +import org.thingsboard.server.common.msg.core.RuleEngineErrorMsg; +import org.thingsboard.server.common.msg.core.SessionCloseMsg; +import org.thingsboard.server.common.msg.core.SessionCloseNotification; +import org.thingsboard.server.common.msg.core.SessionOpenMsg; +import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; +import org.thingsboard.server.common.msg.core.ToDeviceRpcRequestMsg; +import org.thingsboard.server.common.msg.core.ToDeviceRpcResponseMsg; +import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.SessionType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; -import org.thingsboard.server.extensions.api.device.DeviceAttributes; +import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg; +import org.thingsboard.server.common.msg.timeout.DeviceActorRpcTimeoutMsg; import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; -import org.thingsboard.server.extensions.api.plugins.msg.*; - -import java.util.*; +import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; +import org.thingsboard.server.extensions.api.plugins.msg.RpcError; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; @@ -54,25 +86,30 @@ import java.util.stream.Collectors; */ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { + private final TenantId tenantId; private final DeviceId deviceId; private final Map sessions; private final Map attributeSubscriptions; private final Map rpcSubscriptions; - private final Map rpcPendingMap; + private final Map pendingMsgs; + + private final Gson gson = new Gson(); private int rpcSeq = 0; private String deviceName; private String deviceType; - private DeviceAttributes deviceAttributes; + private TbMsgMetaData defaultMetaData; - public DeviceActorMessageProcessor(ActorSystemContext systemContext, LoggingAdapter logger, DeviceId deviceId) { + public DeviceActorMessageProcessor(ActorSystemContext systemContext, LoggingAdapter logger, TenantId tenantId, DeviceId deviceId) { super(systemContext, logger); + this.tenantId = tenantId; this.deviceId = deviceId; this.sessions = new HashMap<>(); this.attributeSubscriptions = new HashMap<>(); this.rpcSubscriptions = new HashMap<>(); this.rpcPendingMap = new HashMap<>(); + this.pendingMsgs = new HashMap<>(); initAttributes(); } @@ -81,19 +118,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso Device device = systemContext.getDeviceService().findDeviceById(deviceId); this.deviceName = device.getName(); this.deviceType = device.getType(); - this.deviceAttributes = new DeviceAttributes(fetchAttributes(DataConstants.CLIENT_SCOPE), - fetchAttributes(DataConstants.SERVER_SCOPE), fetchAttributes(DataConstants.SHARED_SCOPE)); + this.defaultMetaData = new TbMsgMetaData(); + this.defaultMetaData.putValue("deviceName", deviceName); + this.defaultMetaData.putValue("deviceType", deviceType); } - private void refreshAttributes(DeviceAttributesEventNotificationMsg msg) { - if (msg.isDeleted()) { - msg.getDeletedKeys().forEach(key -> deviceAttributes.remove(key)); - } else { - deviceAttributes.update(msg.getScope(), msg.getValues()); - } - } - - void processRpcRequest(ActorContext context, ToDeviceRpcRequestPluginMsg msg) { + void processRpcRequest(ActorContext context, org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg msg) { ToDeviceRpcRequest request = msg.getMsg(); ToDeviceRpcRequestBody body = request.getBody(); ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg( @@ -120,9 +150,8 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso syncSessionSet.forEach(rpcSubscriptions::remove); if (request.isOneway() && sent) { - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(msg, (String) null); - context.parent().tell(responsePluginMsg, ActorRef.noSender()); logger.debug("[{}] Rpc command response sent [{}]!", deviceId, request.getId()); + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(msg.getMsg().getId(), null, null)); } else { registerPendingRpcRequest(context, msg, sent, rpcRequest, timeout); } @@ -134,18 +163,36 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso } - private void registerPendingRpcRequest(ActorContext context, ToDeviceRpcRequestPluginMsg msg, boolean sent, ToDeviceRpcRequestMsg rpcRequest, long timeout) { + private void registerPendingRpcRequest(ActorContext context, org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg msg, boolean sent, ToDeviceRpcRequestMsg rpcRequest, long timeout) { rpcPendingMap.put(rpcRequest.getRequestId(), new ToDeviceRpcRequestMetadata(msg, sent)); - TimeoutIntMsg timeoutMsg = new TimeoutIntMsg(rpcRequest.getRequestId(), timeout); + DeviceActorRpcTimeoutMsg timeoutMsg = new DeviceActorRpcTimeoutMsg(rpcRequest.getRequestId(), timeout); scheduleMsgWithDelay(context, timeoutMsg, timeoutMsg.getTimeout()); } - public void processTimeout(ActorContext context, TimeoutMsg msg) { + void processRpcTimeout(ActorContext context, DeviceActorRpcTimeoutMsg msg) { ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(msg.getId()); if (requestMd != null) { logger.debug("[{}] RPC request [{}] timeout detected!", deviceId, msg.getId()); - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(requestMd.getMsg(), requestMd.isSent() ? RpcError.TIMEOUT : RpcError.NO_ACTIVE_CONNECTION); - context.parent().tell(responsePluginMsg, ActorRef.noSender()); + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(), + null, requestMd.isSent() ? RpcError.TIMEOUT : RpcError.NO_ACTIVE_CONNECTION)); + } + } + + void processQueueTimeout(ActorContext context, DeviceActorQueueTimeoutMsg msg) { + PendingSessionMsgData data = pendingMsgs.remove(msg.getId()); + if (data != null) { + logger.debug("[{}] Queue put [{}] timeout detected!", deviceId, msg.getId()); + ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(data.getSessionMsgType(), RuleEngineError.QUEUE_PUT_TIMEOUT); + sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress()); + } + } + + void processQueueAck(ActorContext context, RuleEngineQueuePutAckMsg msg) { + PendingSessionMsgData data = pendingMsgs.remove(msg.getId()); + if (data != null) { + logger.debug("[{}] Queue put [{}] ack detected!", deviceId, msg.getId()); + ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onSuccess(data.getSessionMsgType(), data.getRequestId()); + sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress()); } } @@ -175,8 +222,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso ToDeviceRpcRequestBody body = request.getBody(); if (request.isOneway()) { sentOneWayIds.add(entry.getKey()); - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(entry.getValue().getMsg(), (String) null); - context.parent().tell(responsePluginMsg, ActorRef.noSender()); + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(request.getId(), null, null)); } ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg( entry.getKey(), @@ -188,14 +234,70 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso }; } - void process(ActorContext context, ToDeviceActorMsg msg) { + void process(ActorContext context, DeviceToDeviceActorMsg msg) { processSubscriptionCommands(context, msg); processRpcResponses(context, msg); processSessionStateMsgs(msg); + SessionMsgType sessionMsgType = msg.getPayload().getMsgType(); + if (sessionMsgType.requiresRulesProcessing()) { + switch (sessionMsgType) { + case GET_ATTRIBUTES_REQUEST: + handleGetAttributesRequest(msg); + break; + case POST_ATTRIBUTES_REQUEST: + break; + case POST_TELEMETRY_REQUEST: + handlePostTelemetryRequest(context, msg); + break; + case TO_SERVER_RPC_REQUEST: + break; + //TODO: push to queue and start processing! + } + } + } + + private void handleGetAttributesRequest(DeviceToDeviceActorMsg msg) { + + } + + private void handlePostTelemetryRequest(ActorContext context, DeviceToDeviceActorMsg src) { + TelemetryUploadRequest telemetry = (TelemetryUploadRequest) src.getPayload(); + + Map> tsData = telemetry.getData(); + + JsonArray json = new JsonArray(); + for (Map.Entry> entry : tsData.entrySet()) { + JsonObject ts = new JsonObject(); + ts.addProperty("ts", entry.getKey()); + JsonObject values = new JsonObject(); + for (KvEntry kv : entry.getValue()) { + kv.getBooleanValue().ifPresent(v -> values.addProperty(kv.getKey(), v)); + kv.getLongValue().ifPresent(v -> values.addProperty(kv.getKey(), v)); + kv.getDoubleValue().ifPresent(v -> values.addProperty(kv.getKey(), v)); + kv.getStrValue().ifPresent(v -> values.addProperty(kv.getKey(), v)); + } + ts.add("values", values); + json.add(ts); + } + + TbMsg tbMsg = new TbMsg(UUIDs.timeBased(), SessionMsgType.POST_TELEMETRY_REQUEST.name(), deviceId, defaultMetaData, TbMsgDataType.JSON, gson.toJson(json)); + pushToRuleEngineWithTimeout(context, tbMsg, src, telemetry); + } + + private void pushToRuleEngineWithTimeout(ActorContext context, TbMsg tbMsg, DeviceToDeviceActorMsg src, FromDeviceRequestMsg fromDeviceRequestMsg) { + SessionMsgType sessionMsgType = fromDeviceRequestMsg.getMsgType(); + int requestId = fromDeviceRequestMsg.getRequestId(); + if (systemContext.isQueuePersistenceEnabled()) { + pendingMsgs.put(tbMsg.getId(), new PendingSessionMsgData(src.getSessionId(), src.getServerAddress(), sessionMsgType, requestId)); + scheduleMsgWithDelay(context, new DeviceActorQueueTimeoutMsg(tbMsg.getId(), systemContext.getQueuePersistenceTimeout()), systemContext.getQueuePersistenceTimeout()); + } else { + ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(BasicStatusCodeResponse.onSuccess(sessionMsgType, requestId), src.getSessionId()); + sendMsgToSessionActor(response, src.getServerAddress()); + } + context.parent().tell(new DeviceActorToRuleEngineMsg(context.self(), tbMsg), context.self()); } void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) { - refreshAttributes(msg); if (attributeSubscriptions.size() > 0) { ToDeviceMsg notification = null; if (msg.isDeleted()) { @@ -225,50 +327,29 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso } } -// void process(ActorContext context, RuleChainDeviceMsg srcMsg) { -// ChainProcessingMetaData md = new ChainProcessingMetaData(srcMsg.getRuleChain(), -// srcMsg.getToDeviceActorMsg(), new DeviceMetaData(deviceId, deviceName, deviceType, deviceAttributes), context.self()); -// ChainProcessingContext ctx = new ChainProcessingContext(md); -// if (ctx.getChainLength() > 0) { -// RuleProcessingMsg msg = new RuleProcessingMsg(ctx); -// ActorRef ruleActorRef = ctx.getCurrentActor(); -// ruleActorRef.tell(msg, ActorRef.noSender()); -// } else { -// context.self().tell(new RulesProcessedMsg(ctx), context.self()); -// } -// } - - void processRpcResponses(ActorContext context, ToDeviceActorMsg msg) { + private void processRpcResponses(ActorContext context, DeviceToDeviceActorMsg msg) { SessionId sessionId = msg.getSessionId(); FromDeviceMsg inMsg = msg.getPayload(); - if (inMsg.getMsgType() == MsgType.TO_DEVICE_RPC_RESPONSE) { + if (inMsg.getMsgType() == SessionMsgType.TO_DEVICE_RPC_RESPONSE) { logger.debug("[{}] Processing rpc command response [{}]", deviceId, sessionId); ToDeviceRpcResponseMsg responseMsg = (ToDeviceRpcResponseMsg) inMsg; ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(responseMsg.getRequestId()); boolean success = requestMd != null; if (success) { - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(requestMd.getMsg(), responseMsg.getData()); - Optional pluginServerAddress = requestMd.getMsg().getServerAddress(); - if (pluginServerAddress.isPresent()) { - systemContext.getRpcService().tell(pluginServerAddress.get(), responsePluginMsg); - logger.debug("[{}] Rpc command response sent to remote plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId()); - } else { - context.parent().tell(responsePluginMsg, ActorRef.noSender()); - logger.debug("[{}] Rpc command response sent to local plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId()); - } + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(), responseMsg.getData(), null)); } else { logger.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId()); } if (msg.getSessionType() == SessionType.SYNC) { BasicCommandAckResponse response = success - ? BasicCommandAckResponse.onSuccess(MsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId()) - : BasicCommandAckResponse.onError(MsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException()); + ? BasicCommandAckResponse.onSuccess(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId()) + : BasicCommandAckResponse.onError(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException()); sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(response, msg.getSessionId()), msg.getServerAddress()); } } } - public void processClusterEventMsg(ClusterEventMsg msg) { + void processClusterEventMsg(ClusterEventMsg msg) { if (!msg.isAdded()) { logger.debug("[{}] Clearing attributes/rpc subscription for server [{}]", deviceId, msg.getServerAddress()); Predicate> filter = e -> e.getValue().getServer() @@ -278,59 +359,27 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso } } - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, String data) { - return toPluginRpcResponseMsg(requestMsg, data, null); - } - - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, RpcError error) { - return toPluginRpcResponseMsg(requestMsg, null, error); - } - - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, String data, RpcError error) { - return new ToPluginRpcResponseDeviceMsg( - requestMsg.getPluginId(), - requestMsg.getPluginTenantId(), - new FromDeviceRpcResponse(requestMsg.getMsg().getId(), - data, - error - ) - ); - } - -// void onRulesProcessedMsg(ActorContext context, RulesProcessedMsg msg) { -// ChainProcessingContext ctx = msg.getCtx(); -// ToDeviceActorMsg inMsg = ctx.getInMsg(); -// SessionId sid = inMsg.getSessionId(); -// ToDeviceSessionActorMsg response; -// if (ctx.getResponse() != null) { -// response = new BasicToDeviceSessionActorMsg(ctx.getResponse(), sid); -// } else { -// response = new BasicToDeviceSessionActorMsg(ctx.getError(), sid); -// } -// sendMsgToSessionActor(response, inMsg.getServerAddress()); -// } - - private void processSubscriptionCommands(ActorContext context, ToDeviceActorMsg msg) { + private void processSubscriptionCommands(ActorContext context, DeviceToDeviceActorMsg msg) { SessionId sessionId = msg.getSessionId(); SessionType sessionType = msg.getSessionType(); FromDeviceMsg inMsg = msg.getPayload(); - if (inMsg.getMsgType() == MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) { + if (inMsg.getMsgType() == SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) { logger.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId); attributeSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress())); - } else if (inMsg.getMsgType() == MsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST) { + } else if (inMsg.getMsgType() == SessionMsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST) { logger.debug("[{}] Canceling attributes subscription for session [{}]", deviceId, sessionId); attributeSubscriptions.remove(sessionId); - } else if (inMsg.getMsgType() == MsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST) { + } else if (inMsg.getMsgType() == SessionMsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST) { logger.debug("[{}] Registering rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType); rpcSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress())); sendPendingRequests(context, sessionId, sessionType, msg.getServerAddress()); - } else if (inMsg.getMsgType() == MsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST) { + } else if (inMsg.getMsgType() == SessionMsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST) { logger.debug("[{}] Canceling rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType); rpcSubscriptions.remove(sessionId); } } - private void processSessionStateMsgs(ToDeviceActorMsg msg) { + private void processSessionStateMsgs(DeviceToDeviceActorMsg msg) { SessionId sessionId = msg.getSessionId(); FromDeviceMsg inMsg = msg.getPayload(); if (inMsg instanceof SessionOpenMsg) { @@ -364,7 +413,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso } } - public void processCredentialsUpdate() { + void processCredentialsUpdate() { sessions.forEach((k, v) -> { sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer()); }); @@ -372,8 +421,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso rpcSubscriptions.clear(); } - public void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) { + void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) { this.deviceName = msg.getDeviceName(); this.deviceType = msg.getDeviceType(); + this.defaultMetaData = new TbMsgMetaData(); + this.defaultMetaData.putValue("deviceName", deviceName); + this.defaultMetaData.putValue("deviceType", deviceType); } + } diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java new file mode 100644 index 0000000000..1426644bce --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java @@ -0,0 +1,38 @@ +/** + * Copyright © 2016-2018 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.actors.device; + +import akka.actor.ActorRef; +import lombok.Data; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.msg.MsgType; +import org.thingsboard.server.common.msg.TbActorMsg; +import org.thingsboard.server.common.msg.TbMsg; + +/** + * Created by ashvayka on 15.03.18. + */ +@Data +public final class DeviceActorToRuleEngineMsg implements TbActorMsg { + + private final ActorRef callbackRef; + private final TbMsg tbMsg; + + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_ACTOR_TO_RULE_ENGINE_MSG; + } +} diff --git a/application/src/main/java/org/thingsboard/server/actors/device/PendingSessionMsgData.java b/application/src/main/java/org/thingsboard/server/actors/device/PendingSessionMsgData.java new file mode 100644 index 0000000000..b3f381d94f --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/actors/device/PendingSessionMsgData.java @@ -0,0 +1,36 @@ +/** + * Copyright © 2016-2018 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.actors.device; + +import lombok.Data; +import org.thingsboard.server.common.data.id.SessionId; +import org.thingsboard.server.common.msg.cluster.ServerAddress; +import org.thingsboard.server.common.msg.session.SessionMsgType; + +import java.util.Optional; + +/** + * Created by ashvayka on 17.04.18. + */ +@Data +public final class PendingSessionMsgData { + + private final SessionId sessionId; + private final Optional serverAddress; + private final SessionMsgType sessionMsgType; + private final int requestId; + +} diff --git a/application/src/main/java/org/thingsboard/server/actors/device/RuleEngineQueuePutAckMsg.java b/application/src/main/java/org/thingsboard/server/actors/device/RuleEngineQueuePutAckMsg.java new file mode 100644 index 0000000000..0b6fe54c4a --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/actors/device/RuleEngineQueuePutAckMsg.java @@ -0,0 +1,36 @@ +/** + * Copyright © 2016-2018 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.actors.device; + +import lombok.Data; +import org.thingsboard.server.common.msg.MsgType; +import org.thingsboard.server.common.msg.TbActorMsg; + +import java.util.UUID; + +/** + * Created by ashvayka on 15.03.18. + */ +@Data +public final class RuleEngineQueuePutAckMsg implements TbActorMsg { + + private final UUID id; + + @Override + public MsgType getMsgType() { + return MsgType.RULE_ENGINE_QUEUE_PUT_ACK_MSG; + } +} diff --git a/application/src/main/java/org/thingsboard/server/actors/device/ToDeviceRpcRequestMetadata.java b/application/src/main/java/org/thingsboard/server/actors/device/ToDeviceRpcRequestMetadata.java index 01342fd866..4ee9a201f8 100644 --- a/application/src/main/java/org/thingsboard/server/actors/device/ToDeviceRpcRequestMetadata.java +++ b/application/src/main/java/org/thingsboard/server/actors/device/ToDeviceRpcRequestMetadata.java @@ -16,13 +16,13 @@ package org.thingsboard.server.actors.device; import lombok.Data; -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; +import org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg; /** * @author Andrew Shvayka */ @Data public class ToDeviceRpcRequestMetadata { - private final ToDeviceRpcRequestPluginMsg msg; + private final ToDeviceRpcRequestMsg msg; private final boolean sent; } diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java index 88278f316d..7cb31610eb 100644 --- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java @@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.TbActorMsg; import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; @@ -153,6 +153,7 @@ public class PluginActor extends ComponentActor } catch (Exception ex) { logger.debug("[{}] Failed to process RuleToPlugin msg: [{}] [{}]", tenantId, msg.getMsg(), ex); RuleToPluginMsg ruleMsg = msg.getMsg(); - MsgType responceMsgType = MsgType.RULE_ENGINE_ERROR; + SessionMsgType responceMsgType = SessionMsgType.RULE_ENGINE_ERROR; Integer requestId = 0; if (ruleMsg.getPayload() instanceof FromDeviceRequestMsg) { requestId = ((FromDeviceRequestMsg) ruleMsg.getPayload()).getRequestId(); @@ -216,7 +217,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor @Override public void onStop(ActorContext context) { onStop(); - scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay()); +// scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay()); } private void onStop() { diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java index 7862d23ed1..5e16aabd32 100644 --- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java @@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleMetaData; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; import org.thingsboard.server.extensions.api.plugins.PluginCallback; diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java b/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java index ad3fef519c..dcabedc88d 100644 --- a/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java +++ b/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java @@ -19,10 +19,12 @@ import akka.actor.ActorRef; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.actors.ActorSystemContext; import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.PluginId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.cluster.ServerAddress; +import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint; -import org.thingsboard.server.common.data.id.PluginId; import org.thingsboard.server.dao.asset.AssetService; import org.thingsboard.server.dao.attributes.AttributesService; import org.thingsboard.server.dao.audit.AuditLogService; @@ -35,9 +37,6 @@ import org.thingsboard.server.dao.rule.RuleService; import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.timeseries.TimeseriesService; import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; import org.thingsboard.server.service.cluster.routing.ClusterRoutingService; import org.thingsboard.server.service.cluster.rpc.ClusterRpcService; import scala.concurrent.duration.Duration; @@ -106,8 +105,8 @@ public final class SharedPluginProcessingContext { public void sendRpcRequest(ToDeviceRpcRequest msg) { log.trace("[{}] Forwarding msg {} to device actor!", pluginId, msg); - ToDeviceRpcRequestPluginMsg rpcMsg = new ToDeviceRpcRequestPluginMsg(pluginId, tenantId, msg); - forward(msg.getDeviceId(), rpcMsg, rpcService::tell); +// ToDeviceRpcRequestPluginMsg rpcMsg = new ToDeviceRpcRequestPluginMsg(pluginId, tenantId, msg); +// forward(msg.getDeviceId(), rpcMsg, rpcService::tell); } private void forward(DeviceId deviceId, T msg, BiConsumer rpcFunction) { diff --git a/application/src/main/java/org/thingsboard/server/actors/rpc/BasicRpcSessionListener.java b/application/src/main/java/org/thingsboard/server/actors/rpc/BasicRpcSessionListener.java index 22fce84586..65cbc229e7 100644 --- a/application/src/main/java/org/thingsboard/server/actors/rpc/BasicRpcSessionListener.java +++ b/application/src/main/java/org/thingsboard/server/actors/rpc/BasicRpcSessionListener.java @@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; import org.thingsboard.server.extensions.api.plugins.msg.*; @@ -86,7 +86,7 @@ public class BasicRpcSessionListener implements GrpcSessionListener { @Override public void onToDeviceActorRpcMsg(GrpcSession session, ClusterAPIProtos.ToDeviceActorRpcMessage msg) { log.trace("{} session [{}] received device actor msg {}", getType(session), session.getRemoteServer(), msg); - service.onMsg((ToDeviceActorMsg) deserialize(msg.getData().toByteArray())); + service.onMsg((DeviceToDeviceActorMsg) deserialize(msg.getData().toByteArray())); } @Override diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainActor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainActor.java index f539e32a3c..f60e7dd14c 100644 --- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainActor.java @@ -1,12 +1,12 @@ /** * Copyright © 2016-2018 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 - * + *

+ * 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. @@ -18,6 +18,7 @@ package org.thingsboard.server.actors.ruleChain; import akka.actor.OneForOneStrategy; import akka.actor.SupervisorStrategy; import org.thingsboard.server.actors.ActorSystemContext; +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg; import org.thingsboard.server.actors.service.ComponentActor; import org.thingsboard.server.actors.service.ContextBasedCreator; import org.thingsboard.server.common.data.id.RuleChainId; @@ -44,6 +45,9 @@ public class RuleChainActor extends ComponentActor * 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 - * + *

+ * 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. @@ -20,6 +20,8 @@ import akka.actor.ActorRef; import akka.actor.Props; import akka.event.LoggingAdapter; import org.thingsboard.server.actors.ActorSystemContext; +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg; +import org.thingsboard.server.actors.device.RuleEngineQueuePutAckMsg; import org.thingsboard.server.actors.service.DefaultActorService; import org.thingsboard.server.actors.shared.ComponentMsgProcessor; import org.thingsboard.server.common.data.EntityType; @@ -157,6 +159,14 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor pendingMap = new HashMap<>(); + private Map pendingMap = new HashMap<>(); private Optional currentTargetServer; private boolean subscribedToAttributeUpdates; private boolean subscribedToRpcCommands; @@ -53,7 +52,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m)); firstMsg = false; } - ToDeviceActorMsg pendingMsg = toDeviceMsg(msg); + DeviceToDeviceActorMsg pendingMsg = toDeviceMsg(msg); FromDeviceMsg fromDeviceMsg = pendingMsg.getPayload(); switch (fromDeviceMsg.getMsgType()) { case POST_TELEMETRY_REQUEST: @@ -86,8 +85,8 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { @Override public void processToDeviceMsg(ActorContext context, ToDeviceMsg msg) { try { - if (msg.getMsgType() != MsgType.SESSION_CLOSE) { - switch (msg.getMsgType()) { + if (msg.getSessionMsgType() != SessionMsgType.SESSION_CLOSE) { + switch (msg.getSessionMsgType()) { case STATUS_CODE_RESPONSE: case GET_ATTRIBUTES_RESPONSE: ResponseMsg responseMsg = (ResponseMsg) msg; diff --git a/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java index 96526dda88..bbaef5d8e5 100644 --- a/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java @@ -22,8 +22,8 @@ import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.SessionId; import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.common.msg.device.BasicToDeviceActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.BasicDeviceToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.*; import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; @@ -37,7 +37,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP protected final SessionId sessionId; protected SessionContext sessionCtx; - protected ToDeviceActorMsg toDeviceActorMsgPrototype; + protected DeviceToDeviceActorMsg deviceToDeviceActorMsgPrototype; protected AbstractSessionActorMsgProcessor(ActorSystemContext ctx, LoggingAdapter logger, SessionId sessionId) { super(ctx, logger); @@ -64,29 +64,29 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP protected void updateSessionCtx(ToDeviceActorSessionMsg msg, SessionType type) { sessionCtx = msg.getSessionMsg().getSessionContext(); - toDeviceActorMsgPrototype = new BasicToDeviceActorMsg(msg, type); + deviceToDeviceActorMsgPrototype = new BasicDeviceToDeviceActorMsg(msg, type); } - protected ToDeviceActorMsg toDeviceMsg(ToDeviceActorSessionMsg msg) { + protected DeviceToDeviceActorMsg toDeviceMsg(ToDeviceActorSessionMsg msg) { AdaptorToSessionActorMsg adaptorMsg = msg.getSessionMsg(); - return new BasicToDeviceActorMsg(toDeviceActorMsgPrototype, adaptorMsg.getMsg()); + return new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, adaptorMsg.getMsg()); } - protected Optional toDeviceMsg(FromDeviceMsg msg) { - if (toDeviceActorMsgPrototype != null) { - return Optional.of(new BasicToDeviceActorMsg(toDeviceActorMsgPrototype, msg)); + protected Optional toDeviceMsg(FromDeviceMsg msg) { + if (deviceToDeviceActorMsgPrototype != null) { + return Optional.of(new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, msg)); } else { return Optional.empty(); } } - protected Optional forwardToAppActor(ActorContext ctx, ToDeviceActorMsg toForward) { + protected Optional forwardToAppActor(ActorContext ctx, DeviceToDeviceActorMsg toForward) { Optional address = systemContext.getRoutingService().resolveById(toForward.getDeviceId()); forwardToAppActor(ctx, toForward, address); return address; } - protected Optional forwardToAppActorIfAdressChanged(ActorContext ctx, ToDeviceActorMsg toForward, Optional oldAddress) { + protected Optional forwardToAppActorIfAdressChanged(ActorContext ctx, DeviceToDeviceActorMsg toForward, Optional oldAddress) { Optional newAddress = systemContext.getRoutingService().resolveById(toForward.getDeviceId()); if (!newAddress.equals(oldAddress)) { if (newAddress.isPresent()) { @@ -99,7 +99,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP return newAddress; } - protected void forwardToAppActor(ActorContext ctx, ToDeviceActorMsg toForward, Optional address) { + protected void forwardToAppActor(ActorContext ctx, DeviceToDeviceActorMsg toForward, Optional address) { if (address.isPresent()) { systemContext.getRpcService().tell(address.get(), toForward.toOtherAddress(systemContext.getRoutingService().getCurrentServer())); @@ -114,6 +114,6 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP } public DeviceId getDeviceId() { - return toDeviceActorMsgPrototype.getDeviceId(); + return deviceToDeviceActorMsgPrototype.getDeviceId(); } } diff --git a/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java index d69650347b..7f520b51e1 100644 --- a/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java @@ -20,7 +20,7 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg; import org.thingsboard.server.common.data.id.SessionId; import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.*; import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; @@ -32,7 +32,7 @@ import akka.event.LoggingAdapter; import java.util.Optional; class SyncMsgProcessor extends AbstractSessionActorMsgProcessor { - private ToDeviceActorMsg pendingMsg; + private DeviceToDeviceActorMsg pendingMsg; private Optional currentTargetServer; private boolean pendingResponse; diff --git a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java index d53c054414..fb38134114 100644 --- a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java @@ -17,10 +17,9 @@ package org.thingsboard.server.actors.tenant; import akka.actor.ActorRef; import akka.actor.Props; -import akka.event.Logging; -import akka.event.LoggingAdapter; import org.thingsboard.server.actors.ActorSystemContext; import org.thingsboard.server.actors.device.DeviceActor; +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg; import org.thingsboard.server.actors.plugin.PluginTerminationMsg; import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor; import org.thingsboard.server.actors.service.ContextBasedCreator; @@ -30,7 +29,8 @@ import org.thingsboard.server.actors.shared.rulechain.TenantRuleChainManager; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.TbActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; @@ -64,63 +64,47 @@ public class TenantActor extends RuleChainManagerActor { @Override protected boolean process(TbActorMsg msg) { switch (msg.getMsgType()) { + case CLUSTER_EVENT_MSG: + broadcast(msg); + break; case COMPONENT_LIFE_CYCLE_MSG: onComponentLifecycleMsg((ComponentLifecycleMsg) msg); break; case SERVICE_TO_RULE_ENGINE_MSG: onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg); break; + case DEVICE_ACTOR_TO_RULE_ENGINE_MSG: + onDeviceActorToRuleEngineMsg((DeviceActorToRuleEngineMsg) msg); + break; + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG: + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG: + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG: + onToDeviceActorMsg((DeviceToDeviceActorMsg) msg); + break; default: return false; } return true; } - private void onServiceToRuleEngineMsg(ServiceToRuleEngineMsg msg) { - ruleChainManager.getRootChainActor().tell(msg, self()); - } - - -// @Override -// public void onReceive(Object msg) throws Exception { -// logger.debug("[{}] Received message: {}", tenantId, msg); -// if (msg instanceof ToDeviceActorMsg) { -// onToDeviceActorMsg((ToDeviceActorMsg) msg); -// } else if (msg instanceof ToPluginActorMsg) { -// onToPluginMsg((ToPluginActorMsg) msg); -// } else if (msg instanceof ToDeviceActorNotificationMsg) { -// onToDeviceActorMsg((ToDeviceActorNotificationMsg) msg); -// } else if (msg instanceof ClusterEventMsg) { -// broadcast(msg); -// } else if (msg instanceof ComponentLifecycleMsg) { -// onComponentLifecycleMsg((ComponentLifecycleMsg) msg); -// } else if (msg instanceof PluginTerminationMsg) { -// onPluginTerminated((PluginTerminationMsg) msg); -// } else { -// logger.warning("[{}] Unknown message: {}!", tenantId, msg); -// } -// } - - private void broadcast(Object msg) { - pluginManager.broadcast(msg); + @Override + protected void broadcast(Object msg) { + super.broadcast(msg); deviceActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender())); } - private void onToDeviceActorMsg(ToDeviceActorMsg msg) { - getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender()); + private void onServiceToRuleEngineMsg(ServiceToRuleEngineMsg msg) { + ruleChainManager.getRootChainActor().tell(msg, self()); } - private void onToDeviceActorMsg(ToDeviceActorNotificationMsg msg) { - getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender()); + private void onDeviceActorToRuleEngineMsg(DeviceActorToRuleEngineMsg msg) { + ruleChainManager.getRootChainActor().tell(msg, self()); } - private void onToPluginMsg(ToPluginActorMsg msg) { - if (msg.getPluginTenantId().equals(tenantId)) { - ActorRef pluginActor = pluginManager.getOrCreateActor(this.context(), msg.getPluginId()); - pluginActor.tell(msg, ActorRef.noSender()); - } else { - context().parent().tell(msg, ActorRef.noSender()); - } + private void onToDeviceActorMsg(DeviceAwareMsg msg) { + getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender()); } private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) { @@ -132,11 +116,6 @@ public class TenantActor extends RuleChainManagerActor { } } - private void onPluginTerminated(PluginTerminationMsg msg) { - pluginManager.remove(msg.getId()); - } - - private ActorRef getOrCreateDeviceActor(DeviceId deviceId) { return deviceActors.computeIfAbsent(deviceId, k -> context().actorOf(Props.create(new DeviceActor.ActorCreator(systemContext, tenantId, deviceId)) .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), deviceId.toString())); diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index 1835a937e7..38e48e14de 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -131,8 +131,8 @@ public class ThingsboardInstallService { systemDataLoaderService.createSysAdmin(); systemDataLoaderService.createAdminSettings(); systemDataLoaderService.loadSystemWidgets(); - systemDataLoaderService.loadSystemPlugins(); - systemDataLoaderService.loadSystemRules(); +// systemDataLoaderService.loadSystemPlugins(); +// systemDataLoaderService.loadSystemRules(); if (loadDemo) { log.info("Loading demo data..."); diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java index f73c5ebe08..cdf8842f5a 100644 --- a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java @@ -30,11 +30,10 @@ import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; import org.thingsboard.server.gen.cluster.ClusterAPIProtos; @@ -119,7 +118,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI } @Override - public void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward) { + public void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward) { ClusterAPIProtos.ToRpcServerMessage msg = ClusterAPIProtos.ToRpcServerMessage.newBuilder() .setToDeviceActorRpcMsg(toProtoMsg(toForward)).build(); tell(serverAddress, msg); @@ -185,7 +184,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI } } - private static ClusterAPIProtos.ToDeviceActorRpcMessage toProtoMsg(ToDeviceActorMsg msg) { + private static ClusterAPIProtos.ToDeviceActorRpcMessage toProtoMsg(DeviceToDeviceActorMsg msg) { return ClusterAPIProtos.ToDeviceActorRpcMessage.newBuilder().setData( ByteString.copyFrom(SerializationUtils.serialize(msg)) ).build(); diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterRpcService.java b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterRpcService.java index b2b9e88cbc..e5a04346c3 100644 --- a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterRpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterRpcService.java @@ -19,10 +19,8 @@ import io.grpc.stub.StreamObserver; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; import org.thingsboard.server.gen.cluster.ClusterAPIProtos; @@ -37,7 +35,7 @@ public interface ClusterRpcService { void init(RpcMsgListener listener); - void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward); + void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward); void tell(ServerAddress serverAddress, ToDeviceSessionActorMsg toForward); diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/RpcMsgListener.java b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/RpcMsgListener.java index a5c31513be..5d26fae1c5 100644 --- a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/RpcMsgListener.java +++ b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/RpcMsgListener.java @@ -20,18 +20,16 @@ import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg; import org.thingsboard.server.actors.rpc.RpcSessionTellMsg; import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg; -import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; -import org.thingsboard.server.gen.cluster.ClusterAPIProtos; /** * @author Andrew Shvayka */ public interface RpcMsgListener { - void onMsg(ToDeviceActorMsg msg); + void onMsg(DeviceToDeviceActorMsg msg); void onMsg(ToDeviceActorNotificationMsg msg); diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java index 908faf2315..9f7f0442a7 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java @@ -181,7 +181,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { @Override public void loadSystemPlugins() throws Exception { - loadPlugins(Paths.get(dataDir, JSON_DIR, SYSTEM_DIR, PLUGINS_DIR), null); +// loadPlugins(Paths.get(dataDir, JSON_DIR, SYSTEM_DIR, PLUGINS_DIR), null); } @@ -227,7 +227,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { createDevice(demoTenant.getId(), null, DEFAULT_DEVICE_TYPE, "Raspberry Pi Demo Device", "RASPBERRY_PI_DEMO_TOKEN", "Demo device that is used in " + "Raspberry Pi GPIO control sample application"); - loadPlugins(Paths.get(dataDir, JSON_DIR, DEMO_DIR, PLUGINS_DIR), demoTenant.getId()); +// loadPlugins(Paths.get(dataDir, JSON_DIR, DEMO_DIR, PLUGINS_DIR), demoTenant.getId()); // loadRules(Paths.get(dataDir, JSON_DIR, DEMO_DIR, RULES_DIR), demoTenant.getId()); loadDashboards(Paths.get(dataDir, JSON_DIR, DEMO_DIR, DASHBOARDS_DIR), demoTenant.getId(), null); } diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java index c394a57783..018f415510 100644 --- a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.service.rpc; +import akka.actor.ActorRef; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -104,8 +105,20 @@ public class DefaultDeviceRpcService implements DeviceRpcService { }, timeout, TimeUnit.MILLISECONDS); } + @Override + public void process(ToDeviceRpcRequest request, ServerAddress originator) { +// if (pluginServerAddress.isPresent()) { +// systemContext.getRpcService().tell(pluginServerAddress.get(), responsePluginMsg); +// logger.debug("[{}] Rpc command response sent to remote plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId()); +// } else { +// context.parent().tell(responsePluginMsg, ActorRef.noSender()); +// logger.debug("[{}] Rpc command response sent to local plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId()); +// } + } + @Override public void process(FromDeviceRpcResponse response) { + //TODO: send to another server if needed. UUID requestId = response.getId(); LocalRequestMetaData md = localRpcRequests.remove(requestId); if (md != null) { diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java b/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java index bf585a43a4..f58db7f7fa 100644 --- a/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java @@ -17,6 +17,7 @@ package org.thingsboard.server.service.rpc; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; +import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; import org.thingsboard.server.extensions.api.plugins.msg.RpcError; @@ -31,6 +32,8 @@ public interface DeviceRpcService { void process(ToDeviceRpcRequest request, LocalRequestMetaData metaData); + void process(ToDeviceRpcRequest request, ServerAddress originator); + void process(FromDeviceRpcResponse response); void logRpcCall(SecurityUser user, EntityId entityId, ToDeviceRpcRequestBody body, boolean oneWay, Optional rpcError, Throwable e); diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestMsg.java b/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestMsg.java index 4ff2a7ca70..ea77333445 100644 --- a/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestMsg.java +++ b/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestMsg.java @@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor; import lombok.ToString; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; @@ -54,4 +55,9 @@ public class ToDeviceRpcRequestMsg implements ToDeviceActorNotificationMsg { public TenantId getTenantId() { return msg.getTenantId(); } + + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG; + } } diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index a9e47de87e..043b8dae3e 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -207,18 +207,7 @@ actors: sync: # Default timeout for processing request using synchronous session (HTTP, CoAP) in milliseconds timeout: "${ACTORS_SESSION_SYNC_TIMEOUT:10000}" - plugin: - # Default timeout for termination of the plugin actor after it is stopped - termination.delay: "${ACTORS_PLUGIN_TERMINATION_DELAY:60000}" - # Default timeout for processing of particular message by particular plugin - processing.timeout: "${ACTORS_PLUGIN_TIMEOUT:60000}" - # Errors for particular actor are persisted once per specified amount of milliseconds - error_persist_frequency: "${ACTORS_PLUGIN_ERROR_FREQUENCY:3000}" rule: - # Default timeout for termination of the rule actor after it is stopped - termination.delay: "${ACTORS_RULE_TERMINATION_DELAY:30000}" - # Errors for particular actor are persisted once per specified amount of milliseconds - error_persist_frequency: "${ACTORS_RULE_ERROR_FREQUENCY:3000}" # Specify thread pool size for database request callbacks executor service db_callback_thread_pool_size: "${ACTORS_RULE_DB_CALLBACK_THREAD_POOL_SIZE:1}" # Specify thread pool size for javascript executor service @@ -235,6 +224,11 @@ actors: # Enable/disable actor statistics enabled: "${ACTORS_STATISTICS_ENABLED:true}" persist_frequency: "${ACTORS_STATISTICS_PERSIST_FREQUENCY:3600000}" + queue: + # Enable/disable persistence of un-processed messages to the queue + enabled: "${ACTORS_QUEUE_ENABLED:true}" + # Maximum allowed timeout for persistence into the queue + timeout: "${ACTORS_QUEUE_PERSISTENCE_TIMEOUT:30000}" cache: # caffeine or redis diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/MsgType.java b/common/message/src/main/java/org/thingsboard/server/common/msg/MsgType.java index f8f204403a..6bde7fa332 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/MsgType.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/MsgType.java @@ -18,27 +18,30 @@ package org.thingsboard.server.common.msg; /** * Created by ashvayka on 15.03.18. */ +//TODO: add all "See" references public enum MsgType { + /** + * ADDED/UPDATED/DELETED events for server nodes. + * + * See {@link org.thingsboard.server.common.msg.cluster.ClusterEventMsg} + */ + CLUSTER_EVENT_MSG, + /** * ADDED/UPDATED/DELETED events for main entities. * - * @See {@link org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg} + * See {@link org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg} */ COMPONENT_LIFE_CYCLE_MSG, /** * Misc messages from the REST API/SERVICE layer to the new rule engine. * - * @See {@link org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg} + * See {@link org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg} */ SERVICE_TO_RULE_ENGINE_MSG, - - SESSION_TO_DEVICE_ACTOR_MSG, - DEVICE_ACTOR_TO_SESSION_MSG, - - /** * Message that is sent by RuleChainActor to RuleActor with command to process TbMsg. */ @@ -59,4 +62,31 @@ public enum MsgType { */ RULE_TO_SELF_MSG, + /** + * Message that is sent by Session Actor to Device Actor. Represents messages from the device itself. + */ + DEVICE_SESSION_TO_DEVICE_ACTOR_MSG, + + DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG, + + DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG, + + DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG, + + DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG, + + DEVICE_ACTOR_RPC_TIMEOUT_MSG, + + DEVICE_ACTOR_QUEUE_TIMEOUT_MSG, + + /** + * Message that is sent from the Device Actor to Rule Engine. Requires acknowledgement + */ + DEVICE_ACTOR_TO_RULE_ENGINE_MSG, + + /** + * Message that is sent from Rule Engine to the Device Actor when message is successfully pushed to queue. + */ + RULE_ENGINE_QUEUE_PUT_ACK_MSG; + } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/TbMsgMetaData.java b/common/message/src/main/java/org/thingsboard/server/common/msg/TbMsgMetaData.java index 4b7314c233..e157aaa0d4 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/TbMsgMetaData.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/TbMsgMetaData.java @@ -31,10 +31,10 @@ import java.util.concurrent.ConcurrentHashMap; @NoArgsConstructor public final class TbMsgMetaData implements Serializable { - private Map data = new ConcurrentHashMap<>(); + private final Map data = new ConcurrentHashMap<>(); public TbMsgMetaData(Map data) { - this.data = data; + this.data.putAll(data); } public String getValue(String key) { diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/cluster/ClusterEventMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/cluster/ClusterEventMsg.java index 67f4de7066..7d157f66a9 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/cluster/ClusterEventMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/cluster/ClusterEventMsg.java @@ -16,14 +16,20 @@ package org.thingsboard.server.common.msg.cluster; import lombok.Data; +import org.thingsboard.server.common.msg.MsgType; +import org.thingsboard.server.common.msg.TbActorMsg; /** * @author Andrew Shvayka */ @Data -public final class ClusterEventMsg { +public final class ClusterEventMsg implements TbActorMsg { private final ServerAddress serverAddress; private final boolean added; + @Override + public MsgType getMsgType() { + return MsgType.CLUSTER_EVENT_MSG; + } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesSubscribeMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesSubscribeMsg.java index 6894ac54eb..cadaf3ce56 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesSubscribeMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesSubscribeMsg.java @@ -16,14 +16,14 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class AttributesSubscribeMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUnsubscribeMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUnsubscribeMsg.java index e3fcd6fc79..c98ad2ae26 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUnsubscribeMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUnsubscribeMsg.java @@ -16,14 +16,15 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class AttributesUnsubscribeMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUpdateNotification.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUpdateNotification.java index 13294891ed..1f0f9ddc99 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUpdateNotification.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/AttributesUpdateNotification.java @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; import lombok.ToString; import org.thingsboard.server.common.msg.kv.AttributesKVMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; @ToString @@ -36,9 +37,8 @@ public class AttributesUpdateNotification implements ToDeviceMsg { return true; } - @Override - public MsgType getMsgType() { - return MsgType.ATTRIBUTES_UPDATE_NOTIFICATION; + public SessionMsgType getSessionMsgType() { + return SessionMsgType.ATTRIBUTES_UPDATE_NOTIFICATION; } public AttributesKVMsg getData() { diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicCommandAckResponse.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicCommandAckResponse.java index ef772c3f17..3ee04ba216 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicCommandAckResponse.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicCommandAckResponse.java @@ -15,26 +15,27 @@ */ package org.thingsboard.server.common.msg.core; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; public class BasicCommandAckResponse extends BasicResponseMsg implements StatusCodeResponse { private static final long serialVersionUID = 1L; - public static BasicCommandAckResponse onSuccess(MsgType requestMsgType, Integer requestId) { + public static BasicCommandAckResponse onSuccess(SessionMsgType requestMsgType, Integer requestId) { return BasicCommandAckResponse.onSuccess(requestMsgType, requestId, 200); } - public static BasicCommandAckResponse onSuccess(MsgType requestMsgType, Integer requestId, Integer code) { + public static BasicCommandAckResponse onSuccess(SessionMsgType requestMsgType, Integer requestId, Integer code) { return new BasicCommandAckResponse(requestMsgType, requestId, true, null, code); } - public static BasicCommandAckResponse onError(MsgType requestMsgType, Integer requestId, Exception error) { + public static BasicCommandAckResponse onError(SessionMsgType requestMsgType, Integer requestId, Exception error) { return new BasicCommandAckResponse(requestMsgType, requestId, false, error, null); } - private BasicCommandAckResponse(MsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) { - super(requestMsgType, requestId, MsgType.TO_DEVICE_RPC_RESPONSE_ACK, success, error, code); + private BasicCommandAckResponse(SessionMsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) { + super(requestMsgType, requestId, SessionMsgType.TO_DEVICE_RPC_RESPONSE_ACK, success, error, code); } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesRequest.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesRequest.java index b431c14d28..e0f6d7ecc4 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesRequest.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesRequest.java @@ -16,7 +16,8 @@ package org.thingsboard.server.common.msg.core; import lombok.ToString; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.util.Collections; import java.util.Optional; @@ -41,8 +42,8 @@ public class BasicGetAttributesRequest extends BasicRequest implements GetAttrib } @Override - public MsgType getMsgType() { - return MsgType.GET_ATTRIBUTES_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.GET_ATTRIBUTES_REQUEST; } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesResponse.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesResponse.java index 5072de25f7..e3eb15d807 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesResponse.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicGetAttributesResponse.java @@ -17,23 +17,24 @@ package org.thingsboard.server.common.msg.core; import lombok.ToString; import org.thingsboard.server.common.msg.kv.AttributesKVMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; @ToString public class BasicGetAttributesResponse extends BasicResponseMsg implements GetAttributesResponse { private static final long serialVersionUID = 1L; - public static BasicGetAttributesResponse onSuccess(MsgType requestMsgType, int requestId, AttributesKVMsg code) { + public static BasicGetAttributesResponse onSuccess(SessionMsgType requestMsgType, int requestId, AttributesKVMsg code) { return new BasicGetAttributesResponse(requestMsgType, requestId, true, null, code); } - public static BasicGetAttributesResponse onError(MsgType requestMsgType, int requestId, Exception error) { + public static BasicGetAttributesResponse onError(SessionMsgType requestMsgType, int requestId, Exception error) { return new BasicGetAttributesResponse(requestMsgType, requestId, false, error, null); } - private BasicGetAttributesResponse(MsgType requestMsgType, int requestId, boolean success, Exception error, AttributesKVMsg code) { - super(requestMsgType, requestId, MsgType.GET_ATTRIBUTES_RESPONSE, success, error, code); + private BasicGetAttributesResponse(SessionMsgType requestMsgType, int requestId, boolean success, Exception error, AttributesKVMsg code) { + super(requestMsgType, requestId, SessionMsgType.GET_ATTRIBUTES_RESPONSE, success, error, code); } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicResponseMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicResponseMsg.java index caaa15cb1b..c61d8e5e03 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicResponseMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicResponseMsg.java @@ -18,32 +18,33 @@ package org.thingsboard.server.common.msg.core; import java.io.Serializable; import java.util.Optional; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; public class BasicResponseMsg implements ResponseMsg { private static final long serialVersionUID = 1L; - private final MsgType requestMsgType; + private final SessionMsgType requestMsgType; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; private final boolean success; private final T data; private final Exception error; - protected BasicResponseMsg(MsgType requestMsgType, Integer requestId, MsgType msgType, boolean success, Exception error, T data) { + protected BasicResponseMsg(SessionMsgType requestMsgType, Integer requestId, SessionMsgType sessionMsgType, boolean success, Exception error, T data) { super(); this.requestMsgType = requestMsgType; this.requestId = requestId; - this.msgType = msgType; + this.sessionMsgType = sessionMsgType; this.success = success; this.error = error; this.data = data; } @Override - public MsgType getRequestMsgType() { + public SessionMsgType getRequestMsgType() { return requestMsgType; } @@ -72,8 +73,7 @@ public class BasicResponseMsg implements ResponseMsg return "BasicResponseMsg [success=" + success + ", data=" + data + ", error=" + error + "]"; } - @Override - public MsgType getMsgType() { - return msgType; + public SessionMsgType getSessionMsgType() { + return sessionMsgType; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicStatusCodeResponse.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicStatusCodeResponse.java index 22b525bab6..f21aa857bf 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicStatusCodeResponse.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicStatusCodeResponse.java @@ -16,26 +16,27 @@ package org.thingsboard.server.common.msg.core; import lombok.ToString; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; @ToString public class BasicStatusCodeResponse extends BasicResponseMsg implements StatusCodeResponse { private static final long serialVersionUID = 1L; - public static BasicStatusCodeResponse onSuccess(MsgType requestMsgType, Integer requestId) { + public static BasicStatusCodeResponse onSuccess(SessionMsgType requestMsgType, Integer requestId) { return BasicStatusCodeResponse.onSuccess(requestMsgType, requestId, 0); } - public static BasicStatusCodeResponse onSuccess(MsgType requestMsgType, Integer requestId, Integer code) { + public static BasicStatusCodeResponse onSuccess(SessionMsgType requestMsgType, Integer requestId, Integer code) { return new BasicStatusCodeResponse(requestMsgType, requestId, true, null, code); } - public static BasicStatusCodeResponse onError(MsgType requestMsgType, Integer requestId, Exception error) { + public static BasicStatusCodeResponse onError(SessionMsgType requestMsgType, Integer requestId, Exception error) { return new BasicStatusCodeResponse(requestMsgType, requestId, false, error, null); } - private BasicStatusCodeResponse(MsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) { - super(requestMsgType, requestId, MsgType.STATUS_CODE_RESPONSE, success, error, code); + private BasicStatusCodeResponse(SessionMsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) { + super(requestMsgType, requestId, SessionMsgType.STATUS_CODE_RESPONSE, success, error, code); } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicTelemetryUploadRequest.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicTelemetryUploadRequest.java index 1d96a65e29..60faeb1829 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicTelemetryUploadRequest.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicTelemetryUploadRequest.java @@ -21,7 +21,8 @@ import java.util.List; import java.util.Map; import org.thingsboard.server.common.data.kv.KvEntry; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; public class BasicTelemetryUploadRequest extends BasicRequest implements TelemetryUploadRequest { @@ -48,8 +49,8 @@ public class BasicTelemetryUploadRequest extends BasicRequest implements Telemet } @Override - public MsgType getMsgType() { - return MsgType.POST_TELEMETRY_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.POST_TELEMETRY_REQUEST; } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicUpdateAttributesRequest.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicUpdateAttributesRequest.java index 994fe5e5d0..ee65ae4ce1 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicUpdateAttributesRequest.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/BasicUpdateAttributesRequest.java @@ -20,7 +20,8 @@ import java.util.LinkedHashSet; import java.util.Set; import org.thingsboard.server.common.data.kv.AttributeKvEntry; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; public class BasicUpdateAttributesRequest extends BasicRequest implements UpdateAttributesRequest { @@ -46,8 +47,8 @@ public class BasicUpdateAttributesRequest extends BasicRequest implements Update } @Override - public MsgType getMsgType() { - return MsgType.POST_ATTRIBUTES_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.POST_ATTRIBUTES_REQUEST; } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ResponseMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ResponseMsg.java index 2eb0959eec..3e70460dcb 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ResponseMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ResponseMsg.java @@ -18,12 +18,12 @@ package org.thingsboard.server.common.msg.core; import java.io.Serializable; import java.util.Optional; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; public interface ResponseMsg extends ToDeviceMsg { - MsgType getRequestMsgType(); + SessionMsgType getRequestMsgType(); Integer getRequestId(); diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcSubscribeMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcSubscribeMsg.java index d4fc1d7e07..f8f24e8d20 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcSubscribeMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcSubscribeMsg.java @@ -16,14 +16,15 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class RpcSubscribeMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcUnsubscribeMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcUnsubscribeMsg.java index b1532d7b3b..23eb238d79 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcUnsubscribeMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RpcUnsubscribeMsg.java @@ -16,14 +16,15 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class RpcUnsubscribeMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineError.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineError.java index bc8ceb4dbc..978d5858e4 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineError.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineError.java @@ -21,7 +21,7 @@ package org.thingsboard.server.common.msg.core; public enum RuleEngineError { - NO_RULES, NO_ACTIVE_RULES, NO_FILTERS_MATCHED, NO_REQUEST_FROM_ACTIONS, NO_TWO_WAY_ACTIONS, NO_RESPONSE_FROM_ACTIONS, PLUGIN_TIMEOUT(true); + NO_RULES, NO_ACTIVE_RULES, NO_FILTERS_MATCHED, NO_REQUEST_FROM_ACTIONS, NO_TWO_WAY_ACTIONS, NO_RESPONSE_FROM_ACTIONS, QUEUE_PUT_TIMEOUT(true); private final boolean critical; diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineErrorMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineErrorMsg.java index 5cb3314e1d..540f629b24 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineErrorMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/RuleEngineErrorMsg.java @@ -16,7 +16,8 @@ package org.thingsboard.server.common.msg.core; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; /** @@ -25,7 +26,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceMsg; @Data public class RuleEngineErrorMsg implements ToDeviceMsg { - private final MsgType inMsgType; + private final SessionMsgType inSessionMsgType; private final RuleEngineError error; @Override @@ -33,9 +34,8 @@ public class RuleEngineErrorMsg implements ToDeviceMsg { return false; } - @Override - public MsgType getMsgType() { - return MsgType.RULE_ENGINE_ERROR; + public SessionMsgType getSessionMsgType() { + return SessionMsgType.RULE_ENGINE_ERROR; } public String getErrorMsg() { @@ -52,7 +52,7 @@ public class RuleEngineErrorMsg implements ToDeviceMsg { return "Rule filters match, but no rule with two-way action configured!"; case NO_RESPONSE_FROM_ACTIONS: return "Rule filters match, message processed by plugin, but no response produced by rule action!"; - case PLUGIN_TIMEOUT: + case QUEUE_PUT_TIMEOUT: return "Timeout during processing of message by plugin!"; default: throw new RuntimeException("Error " + error + " is not supported!"); diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseMsg.java index 738bc6e138..6d3ad5e8be 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseMsg.java @@ -16,14 +16,15 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class SessionCloseMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.SESSION_CLOSE; + public SessionMsgType getMsgType() { + return SessionMsgType.SESSION_CLOSE; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseNotification.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseNotification.java index bf3c982922..bf36a9b3c3 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseNotification.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionCloseNotification.java @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; import lombok.ToString; import org.thingsboard.server.common.msg.kv.AttributesKVMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; @ToString @@ -30,9 +31,8 @@ public class SessionCloseNotification implements ToDeviceMsg { return true; } - @Override - public MsgType getMsgType() { - return MsgType.SESSION_CLOSE; + public SessionMsgType getSessionMsgType() { + return SessionMsgType.SESSION_CLOSE; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionOpenMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionOpenMsg.java index f3a7bc7bae..c121a71584 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionOpenMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/SessionOpenMsg.java @@ -16,14 +16,15 @@ package org.thingsboard.server.common.msg.core; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka */ public class SessionOpenMsg implements FromDeviceMsg { @Override - public MsgType getMsgType() { - return MsgType.SESSION_OPEN; + public SessionMsgType getMsgType() { + return SessionMsgType.SESSION_OPEN; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcRequestMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcRequestMsg.java index c9eeb4ef1a..d1a1f96451 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcRequestMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcRequestMsg.java @@ -16,7 +16,8 @@ package org.thingsboard.server.common.msg.core; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; /** @@ -29,9 +30,8 @@ public class ToDeviceRpcRequestMsg implements ToDeviceMsg { private final String method; private final String params; - @Override - public MsgType getMsgType() { - return MsgType.TO_DEVICE_RPC_REQUEST; + public SessionMsgType getSessionMsgType() { + return SessionMsgType.TO_DEVICE_RPC_REQUEST; } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcResponseMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcResponseMsg.java index ec739b379c..4fa3024947 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcResponseMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToDeviceRpcResponseMsg.java @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; import lombok.Data; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka @@ -29,7 +30,7 @@ public class ToDeviceRpcResponseMsg implements FromDeviceMsg { private final String data; @Override - public MsgType getMsgType() { - return MsgType.TO_DEVICE_RPC_RESPONSE; + public SessionMsgType getMsgType() { + return SessionMsgType.TO_DEVICE_RPC_RESPONSE; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcRequestMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcRequestMsg.java index 87708a759f..3823acac70 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcRequestMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcRequestMsg.java @@ -17,7 +17,7 @@ package org.thingsboard.server.common.msg.core; import lombok.Data; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; /** * @author Andrew Shvayka @@ -30,7 +30,7 @@ public class ToServerRpcRequestMsg implements FromDeviceRequestMsg { private final String params; @Override - public MsgType getMsgType() { - return MsgType.TO_SERVER_RPC_REQUEST; + public SessionMsgType getMsgType() { + return SessionMsgType.TO_SERVER_RPC_REQUEST; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcResponseMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcResponseMsg.java index b9a43d13a9..82f44e9113 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcResponseMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/core/ToServerRpcResponseMsg.java @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; import lombok.Data; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; /** @@ -29,9 +30,8 @@ public class ToServerRpcResponseMsg implements ToDeviceMsg { private final int requestId; private final String data; - @Override - public MsgType getMsgType() { - return MsgType.TO_SERVER_RPC_RESPONSE; + public SessionMsgType getSessionMsgType() { + return SessionMsgType.TO_SERVER_RPC_RESPONSE; } @Override diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicToDeviceActorMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicDeviceToDeviceActorMsg.java similarity index 76% rename from common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicToDeviceActorMsg.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicDeviceToDeviceActorMsg.java index 959da7c4b3..1da19cb3cb 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicToDeviceActorMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicDeviceToDeviceActorMsg.java @@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.SessionId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.session.FromDeviceMsg; import org.thingsboard.server.common.msg.session.SessionType; @@ -28,7 +29,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; import java.util.Optional; @ToString -public class BasicToDeviceActorMsg implements ToDeviceActorMsg { +public class BasicDeviceToDeviceActorMsg implements DeviceToDeviceActorMsg { private static final long serialVersionUID = -1866795134993115408L; @@ -40,16 +41,16 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg { private final ServerAddress serverAddress; private final FromDeviceMsg msg; - public BasicToDeviceActorMsg(ToDeviceActorMsg other, FromDeviceMsg msg) { + public BasicDeviceToDeviceActorMsg(DeviceToDeviceActorMsg other, FromDeviceMsg msg) { this(null, other.getTenantId(), other.getCustomerId(), other.getDeviceId(), other.getSessionId(), other.getSessionType(), msg); } - public BasicToDeviceActorMsg(ToDeviceActorSessionMsg msg, SessionType sessionType) { + public BasicDeviceToDeviceActorMsg(ToDeviceActorSessionMsg msg, SessionType sessionType) { this(null, msg.getTenantId(), msg.getCustomerId(), msg.getDeviceId(), msg.getSessionId(), sessionType, msg.getSessionMsg().getMsg()); } - private BasicToDeviceActorMsg(ServerAddress serverAddress, TenantId tenantId, CustomerId customerId, DeviceId deviceId, SessionId sessionId, SessionType sessionType, - FromDeviceMsg msg) { + private BasicDeviceToDeviceActorMsg(ServerAddress serverAddress, TenantId tenantId, CustomerId customerId, DeviceId deviceId, SessionId sessionId, SessionType sessionType, + FromDeviceMsg msg) { super(); this.serverAddress = serverAddress; this.tenantId = tenantId; @@ -95,7 +96,12 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg { } @Override - public ToDeviceActorMsg toOtherAddress(ServerAddress otherAddress) { - return new BasicToDeviceActorMsg(otherAddress, tenantId, customerId, deviceId, sessionId, sessionType, msg); + public DeviceToDeviceActorMsg toOtherAddress(ServerAddress otherAddress) { + return new BasicDeviceToDeviceActorMsg(otherAddress, tenantId, customerId, deviceId, sessionId, sessionType, msg); + } + + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_SESSION_TO_DEVICE_ACTOR_MSG; } } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/device/ToDeviceActorMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/device/DeviceToDeviceActorMsg.java similarity index 84% rename from common/message/src/main/java/org/thingsboard/server/common/msg/device/ToDeviceActorMsg.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/device/DeviceToDeviceActorMsg.java index 72e552d85b..fe8d9f2c21 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/device/ToDeviceActorMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/device/DeviceToDeviceActorMsg.java @@ -19,6 +19,7 @@ import java.io.Serializable; import java.util.Optional; import org.thingsboard.server.common.data.id.SessionId; +import org.thingsboard.server.common.msg.TbActorMsg; import org.thingsboard.server.common.msg.aware.CustomerAwareMsg; import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; import org.thingsboard.server.common.msg.aware.TenantAwareMsg; @@ -26,7 +27,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.session.FromDeviceMsg; import org.thingsboard.server.common.msg.session.SessionType; -public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, Serializable { +public interface DeviceToDeviceActorMsg extends TbActorMsg, DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, Serializable { SessionId getSessionId(); @@ -36,5 +37,5 @@ public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, Tena FromDeviceMsg getPayload(); - ToDeviceActorMsg toOtherAddress(ServerAddress otherAddress); + DeviceToDeviceActorMsg toOtherAddress(ServerAddress otherAddress); } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/session/FromDeviceMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/session/FromDeviceMsg.java index 19d45a7095..71b605712f 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/session/FromDeviceMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/session/FromDeviceMsg.java @@ -19,6 +19,6 @@ import java.io.Serializable; public interface FromDeviceMsg extends Serializable { - MsgType getMsgType(); + SessionMsgType getMsgType(); } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/session/MsgType.java b/common/message/src/main/java/org/thingsboard/server/common/msg/session/SessionMsgType.java similarity index 93% rename from common/message/src/main/java/org/thingsboard/server/common/msg/session/MsgType.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/session/SessionMsgType.java index ddc5149d14..c7109c9703 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/session/MsgType.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/session/SessionMsgType.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.common.msg.session; -public enum MsgType { +public enum SessionMsgType { GET_ATTRIBUTES_REQUEST(true), POST_ATTRIBUTES_REQUEST(true), GET_ATTRIBUTES_RESPONSE, SUBSCRIBE_ATTRIBUTES_REQUEST, UNSUBSCRIBE_ATTRIBUTES_REQUEST, ATTRIBUTES_UPDATE_NOTIFICATION, @@ -32,11 +32,11 @@ public enum MsgType { private final boolean requiresRulesProcessing; - MsgType() { + SessionMsgType() { this(false); } - MsgType(boolean requiresRulesProcessing) { + SessionMsgType(boolean requiresRulesProcessing) { this.requiresRulesProcessing = requiresRulesProcessing; } diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/session/ToDeviceMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/session/ToDeviceMsg.java index 31ec1fa7f9..705e86420b 100644 --- a/common/message/src/main/java/org/thingsboard/server/common/msg/session/ToDeviceMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/session/ToDeviceMsg.java @@ -21,6 +21,6 @@ public interface ToDeviceMsg extends Serializable { boolean isSuccess(); - MsgType getMsgType(); + SessionMsgType getSessionMsgType(); } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutIntMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorQueueTimeoutMsg.java similarity index 61% rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutIntMsg.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorQueueTimeoutMsg.java index e25d5d7dd2..0277983d8b 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutIntMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorQueueTimeoutMsg.java @@ -13,15 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.extensions.api.plugins.msg; +package org.thingsboard.server.common.msg.timeout; + +import org.thingsboard.server.common.msg.MsgType; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; + +import java.util.UUID; /** * @author Andrew Shvayka */ -public final class TimeoutIntMsg extends TimeoutMsg { +public final class DeviceActorQueueTimeoutMsg extends TimeoutMsg { - public TimeoutIntMsg(Integer id, long timeout) { + public DeviceActorQueueTimeoutMsg(UUID id, long timeout) { super(id, timeout); } + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_ACTOR_QUEUE_TIMEOUT_MSG; + } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutUUIDMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorRpcTimeoutMsg.java similarity index 66% rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutUUIDMsg.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorRpcTimeoutMsg.java index d6a697e64e..725db385c4 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutUUIDMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorRpcTimeoutMsg.java @@ -13,17 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.extensions.api.plugins.msg; +package org.thingsboard.server.common.msg.timeout; -import java.util.UUID; +import org.thingsboard.server.common.msg.MsgType; /** * @author Andrew Shvayka */ -public final class TimeoutUUIDMsg extends TimeoutMsg { +public final class DeviceActorRpcTimeoutMsg extends TimeoutMsg { - public TimeoutUUIDMsg(UUID id, long timeout) { + public DeviceActorRpcTimeoutMsg(Integer id, long timeout) { super(id, timeout); } + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_ACTOR_RPC_TIMEOUT_MSG; + } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/TimeoutMsg.java similarity index 81% rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutMsg.java rename to common/message/src/main/java/org/thingsboard/server/common/msg/timeout/TimeoutMsg.java index 03b2cd70ac..503188b006 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutMsg.java +++ b/common/message/src/main/java/org/thingsboard/server/common/msg/timeout/TimeoutMsg.java @@ -13,15 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.extensions.api.plugins.msg; +package org.thingsboard.server.common.msg.timeout; import lombok.Data; +import org.thingsboard.server.common.msg.TbActorMsg; /** * @author Andrew Shvayka */ @Data -public class TimeoutMsg { +public abstract class TimeoutMsg implements TbActorMsg { private final T id; private final long timeout; } diff --git a/common/transport/src/main/java/org/thingsboard/server/common/transport/TransportAdaptor.java b/common/transport/src/main/java/org/thingsboard/server/common/transport/TransportAdaptor.java index 93a6e9965f..080f874efb 100644 --- a/common/transport/src/main/java/org/thingsboard/server/common/transport/TransportAdaptor.java +++ b/common/transport/src/main/java/org/thingsboard/server/common/transport/TransportAdaptor.java @@ -16,7 +16,7 @@ package org.thingsboard.server.common.transport; import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.SessionActorToAdaptorMsg; import org.thingsboard.server.common.msg.session.SessionContext; import org.thingsboard.server.common.transport.adaptor.AdaptorException; @@ -25,7 +25,7 @@ import java.util.Optional; public interface TransportAdaptor { - AdaptorToSessionActorMsg convertToActorMsg(C ctx, MsgType type, T inbound) throws AdaptorException; + AdaptorToSessionActorMsg convertToActorMsg(C ctx, SessionMsgType type, T inbound) throws AdaptorException; Optional convertToAdaptorMsg(C ctx, SessionActorToAdaptorMsg msg) throws AdaptorException; diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 9ce1fbebbc..a7e7362a44 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -75,6 +75,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC log.trace("Save system rule chain with predefined id {}", SYSTEM_TENANT); ruleChain.setTenantId(SYSTEM_TENANT); } + //TODO: Temporary Hack to continue tests; + ruleChain.setRoot(true); RuleChain savedRuleChain = ruleChainDao.save(ruleChain); if (ruleChain.isRoot() && ruleChain.getTenantId() != null && ruleChain.getId() == null) { try { diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceAttributesEventNotificationMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceAttributesEventNotificationMsg.java index 2fcf559852..a470784b32 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceAttributesEventNotificationMsg.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceAttributesEventNotificationMsg.java @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.AttributeKey; import org.thingsboard.server.common.data.kv.AttributeKvEntry; +import org.thingsboard.server.common.msg.MsgType; import java.util.List; import java.util.Set; @@ -54,4 +55,8 @@ public class DeviceAttributesEventNotificationMsg implements ToDeviceActorNotifi return new DeviceAttributesEventNotificationMsg(tenantId, deviceId, keys, null, null, true); } + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG; + } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceCredentialsUpdateNotificationMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceCredentialsUpdateNotificationMsg.java index 937018e655..b634a8298f 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceCredentialsUpdateNotificationMsg.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceCredentialsUpdateNotificationMsg.java @@ -21,6 +21,7 @@ import lombok.ToString; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.kv.AttributeKey; +import org.thingsboard.server.common.msg.MsgType; import java.util.Set; @@ -33,4 +34,8 @@ public class DeviceCredentialsUpdateNotificationMsg implements ToDeviceActorNoti private final TenantId tenantId; private final DeviceId deviceId; + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG; + } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceNameOrTypeUpdateMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceNameOrTypeUpdateMsg.java index 908319082f..1823e3b335 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceNameOrTypeUpdateMsg.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/DeviceNameOrTypeUpdateMsg.java @@ -19,6 +19,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.msg.MsgType; @Data @AllArgsConstructor @@ -27,4 +28,9 @@ public class DeviceNameOrTypeUpdateMsg implements ToDeviceActorNotificationMsg { private final DeviceId deviceId; private final String deviceName; private final String deviceType; + + @Override + public MsgType getMsgType() { + return MsgType.DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG; + } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/ToDeviceActorNotificationMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/ToDeviceActorNotificationMsg.java index 892d53eee9..5cd5d82946 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/ToDeviceActorNotificationMsg.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/device/ToDeviceActorNotificationMsg.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.extensions.api.device; +import org.thingsboard.server.common.msg.TbActorMsg; import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; import org.thingsboard.server.common.msg.aware.TenantAwareMsg; @@ -23,6 +24,6 @@ import java.io.Serializable; /** * @author Andrew Shvayka */ -public interface ToDeviceActorNotificationMsg extends TenantAwareMsg, DeviceAwareMsg, Serializable { +public interface ToDeviceActorNotificationMsg extends TbActorMsg, TenantAwareMsg, DeviceAwareMsg, Serializable { } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java index 34f4ce794a..6d54f3edb3 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java @@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.extensions.api.plugins.handlers.*; import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java index a41f3c14e2..20d74c3ba4 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java @@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.extensions.api.component.ConfigurableComponent; import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java index 3c19571560..69bee5ca97 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.api.plugins; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.component.ConfigurableComponent; import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; @@ -28,7 +28,7 @@ import java.util.Optional; public interface PluginAction extends ConfigurableComponent, RuleLifecycleComponent { - Optional convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd); + Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd); Optional convert(PluginToRuleMsg response); diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java index 4cd645675f..42fd747155 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java @@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; import org.thingsboard.server.common.msg.cluster.ServerAddress; import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; +import org.thingsboard.server.common.msg.timeout.TimeoutMsg; import org.thingsboard.server.extensions.api.plugins.msg.*; import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java index 27b476d0c0..42dbbf9052 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java @@ -18,7 +18,8 @@ package org.thingsboard.server.extensions.api.plugins.handlers; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.common.data.id.RuleId; import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.extensions.api.plugins.PluginContext; import org.thingsboard.server.extensions.api.plugins.msg.GetAttributesRequestRuleToPluginMsg; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -56,8 +57,8 @@ public class DefaultRuleMsgHandler implements RuleMsgHandler { msgTypeNotSupported(msg.getPayload().getMsgType()); } - private void msgTypeNotSupported(MsgType msgType) { - throw new RuntimeException("Not supported msg type: " + msgType + "!"); + private void msgTypeNotSupported(SessionMsgType sessionMsgType) { + throw new RuntimeException("Not supported msg type: " + sessionMsgType + "!"); } } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToDeviceRpcRequestPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToDeviceRpcRequestPluginMsg.java deleted file mode 100644 index b71bcb93a5..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToDeviceRpcRequestPluginMsg.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright © 2016-2018 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.extensions.api.plugins.msg; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.ToString; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; -import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; - -import java.util.Optional; - -/** - * @author Andrew Shvayka - */ -@ToString -@RequiredArgsConstructor -public class ToDeviceRpcRequestPluginMsg implements ToDeviceActorNotificationMsg { - - private final ServerAddress serverAddress; - @Getter - private final PluginId pluginId; - @Getter - private final TenantId pluginTenantId; - @Getter - private final ToDeviceRpcRequest msg; - - public ToDeviceRpcRequestPluginMsg(PluginId pluginId, TenantId pluginTenantId, ToDeviceRpcRequest msg) { - this(null, pluginId, pluginTenantId, msg); - } - - public Optional getServerAddress() { - return Optional.ofNullable(serverAddress); - } - - @Override - public DeviceId getDeviceId() { - return msg.getDeviceId(); - } - - @Override - public TenantId getTenantId() { - return msg.getTenantId(); - } -} - diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java index 9489a539ca..f0e986ec13 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.api.rules; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.component.ConfigurableComponent; /** @@ -23,6 +23,6 @@ import org.thingsboard.server.extensions.api.component.ConfigurableComponent; */ public interface RuleFilter extends ConfigurableComponent, RuleLifecycleComponent { - boolean filter(RuleContext ctx, ToDeviceActorMsg msg); + boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg); } diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java index 3fd5e96318..5e72dbe445 100644 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java +++ b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java @@ -15,15 +15,13 @@ */ package org.thingsboard.server.extensions.api.rules; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.component.ConfigurableComponent; -import javax.script.ScriptException; - /** * @author Andrew Shvayka */ public interface RuleProcessor extends ConfigurableComponent, RuleLifecycleComponent { - RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg msg) throws RuleException; + RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException; } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java index f765a121e1..0258cf161c 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java @@ -20,7 +20,7 @@ import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.runtime.parser.ParseException; import org.springframework.util.StringUtils; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.PluginAction; @@ -74,7 +74,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug } @Override - public Optional convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData metadata) { + public Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData metadata) { String sendFlag = configuration.getSendFlag(); if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) { VelocityContext context = VelocityUtils.createContext(metadata); @@ -86,7 +86,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug bccTemplate.ifPresent(t -> builder.bcc(VelocityUtils.merge(t, context))); subjectTemplate.ifPresent(t -> builder.subject(VelocityUtils.merge(t, context))); bodyTemplate.ifPresent(t -> builder.body(VelocityUtils.merge(t, context))); - return Optional.of(new SendMailRuleToPluginActionMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), toDeviceActorMsg.getDeviceId(), + return Optional.of(new SendMailRuleToPluginActionMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), deviceToDeviceActorMsg.getDeviceId(), builder.build())); } else { return Optional.empty(); diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/RpcPluginAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/RpcPluginAction.java index b1959822b5..8bd9e25e4e 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/RpcPluginAction.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/RpcPluginAction.java @@ -16,9 +16,10 @@ package org.thingsboard.server.extensions.core.action.rpc; import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration; @@ -41,12 +42,12 @@ public class RpcPluginAction extends SimpleRuleLifecycleComponent implements Plu } @Override - public Optional convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) { - FromDeviceMsg msg = toDeviceActorMsg.getPayload(); - if (msg.getMsgType() == MsgType.TO_SERVER_RPC_REQUEST) { + public Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) { + FromDeviceMsg msg = deviceToDeviceActorMsg.getPayload(); + if (msg.getMsgType() == SessionMsgType.TO_SERVER_RPC_REQUEST) { ToServerRpcRequestMsg payload = (ToServerRpcRequestMsg) msg; - return Optional.of(new RpcRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), - toDeviceActorMsg.getDeviceId(), payload)); + return Optional.of(new RpcRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), + deviceToDeviceActorMsg.getDeviceId(), payload)); } else { return Optional.empty(); } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallAction.java index 80c8efba68..4e129dbf0a 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallAction.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallAction.java @@ -20,7 +20,7 @@ import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.runtime.parser.ParseException; import org.springframework.util.StringUtils; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.PluginAction; @@ -64,7 +64,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem } @Override - public Optional convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData metadata) { + public Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData metadata) { String sendFlag = configuration.getSendFlag(); if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) { VelocityContext context = VelocityUtils.createContext(metadata); @@ -77,7 +77,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem rpcCallMethodTemplate.ifPresent(t -> builder.rpcCallMethod(VelocityUtils.merge(t, context))); rpcCallBodyTemplate.ifPresent(t -> builder.rpcCallBody(VelocityUtils.merge(t, context))); builder.rpcCallTimeoutInSec(configuration.getRpcCallTimeoutInSec()); - return Optional.of(new ServerSideRpcCallRuleToPluginActionMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), toDeviceActorMsg.getDeviceId(), + return Optional.of(new ServerSideRpcCallRuleToPluginActionMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), deviceToDeviceActorMsg.getDeviceId(), builder.build())); } else { return Optional.empty(); diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginAction.java index b36aced45e..514eb0b38c 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginAction.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginAction.java @@ -19,9 +19,10 @@ import org.springframework.util.StringUtils; import org.thingsboard.server.common.msg.core.GetAttributesRequest; import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.PluginAction; @@ -50,20 +51,20 @@ public class TelemetryPluginAction extends SimpleRuleLifecycleComponent implemen } @Override - public Optional convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) { - FromDeviceMsg msg = toDeviceActorMsg.getPayload(); - if (msg.getMsgType() == MsgType.POST_TELEMETRY_REQUEST) { + public Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) { + FromDeviceMsg msg = deviceToDeviceActorMsg.getPayload(); + if (msg.getMsgType() == SessionMsgType.POST_TELEMETRY_REQUEST) { TelemetryUploadRequest payload = (TelemetryUploadRequest) msg; - return Optional.of(new TelemetryUploadRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), - toDeviceActorMsg.getDeviceId(), payload, ttl)); - } else if (msg.getMsgType() == MsgType.POST_ATTRIBUTES_REQUEST) { + return Optional.of(new TelemetryUploadRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), + deviceToDeviceActorMsg.getDeviceId(), payload, ttl)); + } else if (msg.getMsgType() == SessionMsgType.POST_ATTRIBUTES_REQUEST) { UpdateAttributesRequest payload = (UpdateAttributesRequest) msg; - return Optional.of(new UpdateAttributesRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), - toDeviceActorMsg.getDeviceId(), payload)); - } else if (msg.getMsgType() == MsgType.GET_ATTRIBUTES_REQUEST) { + return Optional.of(new UpdateAttributesRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), + deviceToDeviceActorMsg.getDeviceId(), payload)); + } else if (msg.getMsgType() == SessionMsgType.GET_ATTRIBUTES_REQUEST) { GetAttributesRequest payload = (GetAttributesRequest) msg; - return Optional.of(new GetAttributesRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), - toDeviceActorMsg.getDeviceId(), payload)); + return Optional.of(new GetAttributesRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), + deviceToDeviceActorMsg.getDeviceId(), payload)); } else { return Optional.empty(); } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/AbstractTemplatePluginAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/AbstractTemplatePluginAction.java index 6d7f75a031..82efdc51eb 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/AbstractTemplatePluginAction.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/AbstractTemplatePluginAction.java @@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.runtime.parser.ParseException; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.extensions.api.plugins.PluginAction; @@ -52,7 +52,7 @@ public abstract class AbstractTemplatePluginAction convert(RuleContext ctx, ToDeviceActorMsg msg, RuleProcessingMetaData deviceMsgMd) { + public Optional convert(RuleContext ctx, DeviceToDeviceActorMsg msg, RuleProcessingMetaData deviceMsgMd) { FromDeviceRequestMsg payload; if (msg.getPayload() instanceof FromDeviceRequestMsg) { payload = (FromDeviceRequestMsg) msg.getPayload(); @@ -70,14 +70,14 @@ public abstract class AbstractTemplatePluginAction buildRuleToPluginMsg(RuleContext ctx, - ToDeviceActorMsg msg, + DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload); @Override diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/BasicJsFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/BasicJsFilter.java index 9c092dae6e..469c76ae57 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/BasicJsFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/BasicJsFilter.java @@ -16,8 +16,7 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.data.kv.KvEntry; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.rules.RuleContext; import org.thingsboard.server.extensions.api.rules.RuleFilter; @@ -39,7 +38,7 @@ public abstract class BasicJsFilter implements RuleFilter } @Override - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) { try { return doFilter(ctx, msg); } catch (ScriptException e) { @@ -48,7 +47,7 @@ public abstract class BasicJsFilter implements RuleFilter } } - protected abstract boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException; + protected abstract boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException; @Override public void resume() { diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilter.java index db7f8c25d0..468fde28f6 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilter.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; import org.thingsboard.server.extensions.api.component.Filter; import org.thingsboard.server.extensions.api.device.DeviceAttributes; @@ -34,7 +34,7 @@ import javax.script.ScriptException; public class DeviceAttributesFilter extends BasicJsFilter { @Override - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException { + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException { return evaluator.execute(toBindings(ctx.getDeviceMetaData().getDeviceAttributes(), msg != null ? msg.getPayload() : null)); } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTelemetryFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTelemetryFilter.java index cd8f87c2b6..7c2ede54d4 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTelemetryFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTelemetryFilter.java @@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; import org.thingsboard.server.extensions.api.component.Filter; import org.thingsboard.server.extensions.api.rules.RuleContext; @@ -34,7 +34,7 @@ import java.util.List; public class DeviceTelemetryFilter extends BasicJsFilter { @Override - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException { + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException { FromDeviceMsg deviceMsg = msg.getPayload(); if (deviceMsg instanceof TelemetryUploadRequest) { TelemetryUploadRequest telemetryMsg = (TelemetryUploadRequest) deviceMsg; diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilter.java index eb00762eec..406c9fd600 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilter.java @@ -16,8 +16,7 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.component.Filter; import org.thingsboard.server.extensions.api.rules.RuleContext; import org.thingsboard.server.extensions.api.rules.RuleFilter; @@ -27,8 +26,6 @@ import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; -import static org.thingsboard.server.common.msg.session.MsgType.TO_SERVER_RPC_REQUEST; - /** * @author Andrew Shvayka */ @@ -46,7 +43,7 @@ public class DeviceTypeFilter extends SimpleRuleLifecycleComponent implements Ru } @Override - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) { return deviceTypes.contains(ctx.getDeviceMetaData().getDeviceType()); } } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilter.java index e5672b8bca..daacfec3f4 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilter.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.component.Filter; import org.thingsboard.server.extensions.api.rules.RuleContext; import org.thingsboard.server.extensions.api.rules.RuleFilter; @@ -27,7 +27,7 @@ import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; -import static org.thingsboard.server.common.msg.session.MsgType.TO_SERVER_RPC_REQUEST; +import static org.thingsboard.server.common.msg.session.SessionMsgType.TO_SERVER_RPC_REQUEST; /** * @author Andrew Shvayka @@ -46,7 +46,7 @@ public class MethodNameFilter extends SimpleRuleLifecycleComponent implements Ru } @Override - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) { if (msg.getPayload().getMsgType() == TO_SERVER_RPC_REQUEST) { return methods.contains(((ToServerRpcRequestMsg) msg.getPayload()).getMethod()); } else { diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilter.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilter.java index ef0094e8a9..e40abf8bb6 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilter.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilter.java @@ -16,8 +16,9 @@ package org.thingsboard.server.extensions.core.filter; import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.extensions.api.component.Filter; import org.thingsboard.server.extensions.api.rules.RuleContext; import org.thingsboard.server.extensions.api.rules.RuleFilter; @@ -35,30 +36,30 @@ import java.util.stream.Collectors; @Slf4j public class MsgTypeFilter extends SimpleRuleLifecycleComponent implements RuleFilter { - private List msgTypes; + private List sessionMsgTypes; @Override public void init(MsgTypeFilterConfiguration configuration) { - msgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> { + sessionMsgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> { switch (type) { case "GET_ATTRIBUTES": - return MsgType.GET_ATTRIBUTES_REQUEST; + return SessionMsgType.GET_ATTRIBUTES_REQUEST; case "POST_ATTRIBUTES": - return MsgType.POST_ATTRIBUTES_REQUEST; + return SessionMsgType.POST_ATTRIBUTES_REQUEST; case "POST_TELEMETRY": - return MsgType.POST_TELEMETRY_REQUEST; + return SessionMsgType.POST_TELEMETRY_REQUEST; case "RPC_REQUEST": - return MsgType.TO_SERVER_RPC_REQUEST; + return SessionMsgType.TO_SERVER_RPC_REQUEST; default: - throw new InvalidParameterException("Can't map " + type + " to " + MsgType.class.getName() + "!"); + throw new InvalidParameterException("Can't map " + type + " to " + SessionMsgType.class.getName() + "!"); } }).collect(Collectors.toList()); } @Override - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { - for (MsgType msgType : msgTypes) { - if (msgType == msg.getPayload().getMsgType()) { + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) { + for (SessionMsgType sessionMsgType : sessionMsgTypes) { + if (sessionMsgType == msg.getPayload().getMsgType()) { return true; } } diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessor.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessor.java index f7ad2740c3..508ab6f889 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessor.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessor.java @@ -22,7 +22,7 @@ import org.apache.velocity.VelocityContext; import org.apache.velocity.runtime.parser.ParseException; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Event; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.extensions.api.component.Processor; import org.thingsboard.server.extensions.api.rules.*; import org.thingsboard.server.extensions.core.utils.VelocityUtils; @@ -57,7 +57,7 @@ public class AlarmDeduplicationProcessor extends SimpleRuleLifecycleComponent } @Override - public RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg msg) throws RuleException { + public RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException { RuleProcessingMetaData md = new RuleProcessingMetaData(); VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload()); String alarmId = VelocityUtils.merge(alarmIdTemplate, context); diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java index b4e34402ae..711d86ae6c 100644 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java +++ b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java @@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; import org.thingsboard.server.extensions.api.component.Processor; import org.thingsboard.server.extensions.api.rules.RuleContext; @@ -102,7 +102,7 @@ public class AlarmProcessor implements RuleProcessor { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { KafkaActionPayload.KafkaActionPayloadBuilder builder = KafkaActionPayload.builder(); builder.msgType(payload.getMsgType()); builder.requestId(payload.getRequestId()); diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java index cee3ac310a..d7a0537686 100644 --- a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.mqtt.action; import lombok.Builder; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -30,5 +30,5 @@ public class MqttActionPayload implements Serializable { private final String msgBody; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; } diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java index a33fb47186..2a0e78a536 100644 --- a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.mqtt.action; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -28,7 +28,7 @@ import java.util.Optional; public class MqttPluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { MqttActionPayload.MqttActionPayloadBuilder builder = MqttActionPayload.builder(); builder.sync(configuration.isSync()); builder.msgType(payload.getMsgType()); diff --git a/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionPayload.java b/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionPayload.java index 948467323c..68ba7093be 100644 --- a/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionPayload.java +++ b/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionPayload.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.rabbitmq.action; import lombok.Builder; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -35,5 +35,5 @@ public class RabbitMqActionPayload implements Serializable { private final boolean sync; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; } diff --git a/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginAction.java b/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginAction.java index 90c6679590..97d4c63705 100644 --- a/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginAction.java +++ b/extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginAction.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.rabbitmq.action; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -32,7 +32,7 @@ import java.util.Optional; public class RabbitMqPluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { RabbitMqActionPayload.RabbitMqActionPayloadBuilder builder = RabbitMqActionPayload.builder(); builder.sync(configuration.isSync()); builder.exchange(configuration.getExchange()); diff --git a/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionPayload.java b/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionPayload.java index 996ef366ed..8a5a5b776d 100644 --- a/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionPayload.java +++ b/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionPayload.java @@ -19,7 +19,8 @@ import lombok.Builder; import lombok.Data; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -33,5 +34,5 @@ public class RestApiCallActionPayload implements Serializable { private final boolean sync; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; } diff --git a/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginAction.java b/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginAction.java index eec95d1bce..e68607a6d3 100644 --- a/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginAction.java +++ b/extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginAction.java @@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.rest.action; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -33,7 +33,7 @@ import java.util.Optional; public class RestApiCallPluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { RestApiCallActionPayload.RestApiCallActionPayloadBuilder builder = RestApiCallActionPayload.builder(); builder.msgType(payload.getMsgType()); builder.requestId(payload.getRequestId()); diff --git a/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionPayload.java b/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionPayload.java index afc0c45a7a..6b7caaf530 100644 --- a/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionPayload.java +++ b/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionPayload.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.sns.action; import lombok.Builder; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -32,6 +32,6 @@ public class SnsTopicActionPayload implements Serializable { private final String msgBody; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; private final boolean sync; } diff --git a/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginAction.java b/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginAction.java index 13add7db90..212b279fc1 100644 --- a/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginAction.java +++ b/extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginAction.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.sns.action; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -31,7 +31,7 @@ import java.util.Optional; public class SnsTopicPluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { SnsTopicActionPayload.SnsTopicActionPayloadBuilder builder = SnsTopicActionPayload.builder(); builder.msgType(payload.getMsgType()); builder.requestId(payload.getRequestId()); diff --git a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionPayload.java b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionPayload.java index 6c1b40c3bf..deafcc70c7 100644 --- a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionPayload.java +++ b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionPayload.java @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.sqs.action.fifo; import lombok.Builder; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -33,7 +33,7 @@ public class SqsFifoQueueActionPayload implements Serializable { private final String deviceId; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; private final boolean sync; } diff --git a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginAction.java b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginAction.java index e834c6d263..a2db8ac3b6 100644 --- a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginAction.java +++ b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginAction.java @@ -15,15 +15,12 @@ */ package org.thingsboard.server.extensions.sqs.action.fifo; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; import org.thingsboard.server.extensions.api.rules.RuleContext; import org.thingsboard.server.extensions.core.action.template.AbstractTemplatePluginAction; -import org.thingsboard.server.extensions.sqs.action.standard.SqsStandardQueueActionMsg; -import org.thingsboard.server.extensions.sqs.action.standard.SqsStandardQueueActionPayload; -import org.thingsboard.server.extensions.sqs.action.standard.SqsStandardQueuePluginActionConfiguration; import java.util.Optional; @@ -34,7 +31,7 @@ import java.util.Optional; public class SqsFifoQueuePluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { SqsFifoQueueActionPayload.SqsFifoQueueActionPayloadBuilder builder = SqsFifoQueueActionPayload.builder(); builder.msgType(payload.getMsgType()); builder.requestId(payload.getRequestId()); diff --git a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionPayload.java b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionPayload.java index 3e35562de5..d6f81d37fd 100644 --- a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionPayload.java +++ b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionPayload.java @@ -17,7 +17,8 @@ package org.thingsboard.server.extensions.sqs.action.standard; import lombok.Builder; import lombok.Data; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import java.io.Serializable; @@ -33,7 +34,7 @@ public class SqsStandardQueueActionPayload implements Serializable { private final int delaySeconds; private final Integer requestId; - private final MsgType msgType; + private final SessionMsgType sessionMsgType; private final boolean sync; } diff --git a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginAction.java b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginAction.java index 232e26349d..ef7491026a 100644 --- a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginAction.java +++ b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginAction.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.extensions.sqs.action.standard; -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; import org.thingsboard.server.extensions.api.component.Action; import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; @@ -31,7 +31,7 @@ import java.util.Optional; public class SqsStandardQueuePluginAction extends AbstractTemplatePluginAction { @Override - protected Optional buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + protected Optional buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) { SqsStandardQueueActionPayload.SqsStandardQueueActionPayloadBuilder builder = SqsStandardQueueActionPayload.builder(); builder.msgType(payload.getMsgType()); builder.requestId(payload.getRequestId()); diff --git a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsMessageHandler.java b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsMessageHandler.java index d049b57dac..4128013534 100644 --- a/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsMessageHandler.java +++ b/extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsMessageHandler.java @@ -65,7 +65,7 @@ public class SqsMessageHandler implements RuleMsgHandler { sqs.sendMessage(sendMsgRequest); if (payload.isSync()) { ctx.reply(new ResponsePluginToRuleMsg(msg.getUid(), tenantId, ruleId, - BasicStatusCodeResponse.onSuccess(payload.getMsgType(), payload.getRequestId()))); + BasicStatusCodeResponse.onSuccess(payload.getSessionMsgType(), payload.getRequestId()))); } } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgTelemetryNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgTelemetryNode.java index 0e6687fabf..0b9e0863d5 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgTelemetryNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/telemetry/TbMsgTelemetryNode.java @@ -28,8 +28,10 @@ import org.thingsboard.server.common.data.kv.BasicTsKvEntry; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.plugin.ComponentType; +import org.thingsboard.server.common.msg.MsgType; import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.transport.adaptor.JsonConverter; import java.nio.charset.StandardCharsets; @@ -59,7 +61,7 @@ public class TbMsgTelemetryNode implements TbNode { @Override public void onMsg(TbContext ctx, TbMsg msg) { - if (!msg.getType().equals("POST_TELEMETRY")) { + if (!msg.getType().equals(SessionMsgType.POST_TELEMETRY_REQUEST.name())) { ctx.tellError(msg, new IllegalArgumentException("Unsupported msg type: " + msg.getType())); return; } diff --git a/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java b/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java index 7ba5e360ba..7674549ba8 100644 --- a/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java +++ b/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java @@ -90,7 +90,7 @@ public class CoapTransportResource extends CoapResource { } else if (exchange.getRequestOptions().hasObserve()) { processExchangeGetRequest(exchange, featureType.get()); } else if (featureType.get() == FeatureType.ATTRIBUTES) { - processRequest(exchange, MsgType.GET_ATTRIBUTES_REQUEST); + processRequest(exchange, SessionMsgType.GET_ATTRIBUTES_REQUEST); } else { log.trace("Invalid feature type parameter"); exchange.respond(ResponseCode.BAD_REQUEST); @@ -99,13 +99,13 @@ public class CoapTransportResource extends CoapResource { private void processExchangeGetRequest(CoapExchange exchange, FeatureType featureType) { boolean unsubscribe = exchange.getRequestOptions().getObserve() == 1; - MsgType msgType; + SessionMsgType sessionMsgType; if (featureType == FeatureType.RPC) { - msgType = unsubscribe ? MsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST : MsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST; + sessionMsgType = unsubscribe ? SessionMsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST : SessionMsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST; } else { - msgType = unsubscribe ? MsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST : MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST; + sessionMsgType = unsubscribe ? SessionMsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST : SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST; } - Optional sessionId = processRequest(exchange, msgType); + Optional sessionId = processRequest(exchange, sessionMsgType); if (sessionId.isPresent()) { if (exchange.getRequestOptions().getObserve() == 1) { exchange.respond(ResponseCode.VALID); @@ -122,24 +122,24 @@ public class CoapTransportResource extends CoapResource { } else { switch (featureType.get()) { case ATTRIBUTES: - processRequest(exchange, MsgType.POST_ATTRIBUTES_REQUEST); + processRequest(exchange, SessionMsgType.POST_ATTRIBUTES_REQUEST); break; case TELEMETRY: - processRequest(exchange, MsgType.POST_TELEMETRY_REQUEST); + processRequest(exchange, SessionMsgType.POST_TELEMETRY_REQUEST); break; case RPC: Optional requestId = getRequestId(exchange.advanced().getRequest()); if (requestId.isPresent()) { - processRequest(exchange, MsgType.TO_DEVICE_RPC_RESPONSE); + processRequest(exchange, SessionMsgType.TO_DEVICE_RPC_RESPONSE); } else { - processRequest(exchange, MsgType.TO_SERVER_RPC_REQUEST); + processRequest(exchange, SessionMsgType.TO_SERVER_RPC_REQUEST); } break; } } } - private Optional processRequest(CoapExchange exchange, MsgType type) { + private Optional processRequest(CoapExchange exchange, SessionMsgType type) { log.trace("Processing {}", exchange.advanced().getRequest()); exchange.accept(); Exchange advanced = exchange.advanced(); diff --git a/transport/coap/src/main/java/org/thingsboard/server/transport/coap/adaptors/JsonCoapAdaptor.java b/transport/coap/src/main/java/org/thingsboard/server/transport/coap/adaptors/JsonCoapAdaptor.java index e3ef2ccd20..6472dfbb02 100644 --- a/transport/coap/src/main/java/org/thingsboard/server/transport/coap/adaptors/JsonCoapAdaptor.java +++ b/transport/coap/src/main/java/org/thingsboard/server/transport/coap/adaptors/JsonCoapAdaptor.java @@ -28,9 +28,10 @@ import org.thingsboard.server.common.msg.kv.AttributesKVMsg; import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg; import org.thingsboard.server.common.msg.session.BasicAdaptorToSessionActorMsg; import org.thingsboard.server.common.msg.session.FromDeviceMsg; -import org.thingsboard.server.common.msg.session.MsgType; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.SessionActorToAdaptorMsg; import org.thingsboard.server.common.msg.session.SessionContext; +import org.thingsboard.server.common.msg.session.SessionMsgType; import org.thingsboard.server.common.msg.session.ToDeviceMsg; import org.thingsboard.server.common.msg.session.ex.ProcessingTimeoutException; import org.thingsboard.server.common.transport.adaptor.AdaptorException; @@ -48,7 +49,7 @@ import org.thingsboard.server.transport.coap.session.CoapSessionCtx; public class JsonCoapAdaptor implements CoapTransportAdaptor { @Override - public AdaptorToSessionActorMsg convertToActorMsg(CoapSessionCtx ctx, MsgType type, Request inbound) throws AdaptorException { + public AdaptorToSessionActorMsg convertToActorMsg(CoapSessionCtx ctx, SessionMsgType type, Request inbound) throws AdaptorException { FromDeviceMsg msg = null; switch (type) { case POST_TELEMETRY_REQUEST: @@ -104,7 +105,7 @@ public class JsonCoapAdaptor implements CoapTransportAdaptor { @Override public Optional convertToAdaptorMsg(CoapSessionCtx ctx, SessionActorToAdaptorMsg source) throws AdaptorException { ToDeviceMsg msg = source.getMsg(); - switch (msg.getMsgType()) { + switch (msg.getSessionMsgType()) { case STATUS_CODE_RESPONSE: case TO_DEVICE_RPC_RESPONSE_ACK: return Optional.of(convertStatusCodeResponse((StatusCodeResponse) msg)); @@ -119,19 +120,19 @@ public class JsonCoapAdaptor implements CoapTransportAdaptor { case RULE_ENGINE_ERROR: return Optional.of(convertToRuleEngineErrorResponse(ctx, (RuleEngineErrorMsg) msg)); default: - log.warn("[{}] Unsupported msg type: {}!", source.getSessionId(), msg.getMsgType()); - throw new AdaptorException(new IllegalArgumentException("Unsupported msg type: " + msg.getMsgType() + "!")); + log.warn("[{}] Unsupported msg type: {}!", source.getSessionId(), msg.getSessionMsgType()); + throw new AdaptorException(new IllegalArgumentException("Unsupported msg type: " + msg.getSessionMsgType() + "!")); } } private Response convertToRuleEngineErrorResponse(CoapSessionCtx ctx, RuleEngineErrorMsg msg) { ResponseCode status = ResponseCode.INTERNAL_SERVER_ERROR; switch (msg.getError()) { - case PLUGIN_TIMEOUT: + case QUEUE_PUT_TIMEOUT: status = ResponseCode.GATEWAY_TIMEOUT; break; default: - if (msg.getInMsgType() == MsgType.TO_SERVER_RPC_REQUEST) { + if (msg.getInSessionMsgType() == SessionMsgType.TO_SERVER_RPC_REQUEST) { status = ResponseCode.BAD_REQUEST; } break; diff --git a/transport/coap/src/test/java/org/thingsboard/server/transport/coap/CoapServerTest.java b/transport/coap/src/test/java/org/thingsboard/server/transport/coap/CoapServerTest.java index 072c7358ac..60b22206ac 100644 --- a/transport/coap/src/test/java/org/thingsboard/server/transport/coap/CoapServerTest.java +++ b/transport/coap/src/test/java/org/thingsboard/server/transport/coap/CoapServerTest.java @@ -113,9 +113,9 @@ public class CoapServerTest { try { FromDeviceMsg deviceMsg = sessionMsg.getMsg(); ToDeviceMsg toDeviceMsg = null; - if (deviceMsg.getMsgType() == MsgType.POST_TELEMETRY_REQUEST) { + if (deviceMsg.getMsgType() == SessionMsgType.POST_TELEMETRY_REQUEST) { toDeviceMsg = BasicStatusCodeResponse.onSuccess(deviceMsg.getMsgType(), BasicRequest.DEFAULT_REQUEST_ID); - } else if (deviceMsg.getMsgType() == MsgType.GET_ATTRIBUTES_REQUEST) { + } else if (deviceMsg.getMsgType() == SessionMsgType.GET_ATTRIBUTES_REQUEST) { List data = new ArrayList<>(); data.add(new BaseAttributeKvEntry(new StringDataEntry("key1", "value1"), System.currentTimeMillis())); data.add(new BaseAttributeKvEntry(new LongDataEntry("key2", 42L), System.currentTimeMillis())); diff --git a/transport/http/src/main/java/org/thingsboard/server/transport/http/session/HttpSessionCtx.java b/transport/http/src/main/java/org/thingsboard/server/transport/http/session/HttpSessionCtx.java index 743b3e777e..4732785de2 100644 --- a/transport/http/src/main/java/org/thingsboard/server/transport/http/session/HttpSessionCtx.java +++ b/transport/http/src/main/java/org/thingsboard/server/transport/http/session/HttpSessionCtx.java @@ -57,7 +57,7 @@ public class HttpSessionCtx extends DeviceAwareSessionContext { @Override public void onMsg(SessionActorToAdaptorMsg source) throws SessionException { ToDeviceMsg msg = source.getMsg(); - switch (msg.getMsgType()) { + switch (msg.getSessionMsgType()) { case GET_ATTRIBUTES_RESPONSE: reply((GetAttributesResponse) msg); return; @@ -84,11 +84,11 @@ public class HttpSessionCtx extends DeviceAwareSessionContext { private void reply(RuleEngineErrorMsg msg) { HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR; switch (msg.getError()) { - case PLUGIN_TIMEOUT: + case QUEUE_PUT_TIMEOUT: status = HttpStatus.REQUEST_TIMEOUT; break; default: - if (msg.getInMsgType() == MsgType.TO_SERVER_RPC_REQUEST) { + if (msg.getInSessionMsgType() == SessionMsgType.TO_SERVER_RPC_REQUEST) { status = HttpStatus.BAD_REQUEST; } break; diff --git a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java index 8766599eaf..5ccce350ac 100644 --- a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java +++ b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java @@ -53,7 +53,7 @@ import java.util.List; import static io.netty.handler.codec.mqtt.MqttConnectReturnCode.*; import static io.netty.handler.codec.mqtt.MqttMessageType.*; import static io.netty.handler.codec.mqtt.MqttQoS.*; -import static org.thingsboard.server.common.msg.session.MsgType.*; +import static org.thingsboard.server.common.msg.session.SessionMsgType.*; import static org.thingsboard.server.transport.mqtt.MqttTopics.*; /** diff --git a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/JsonMqttAdaptor.java b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/JsonMqttAdaptor.java index 64df6bc148..e35cfd589a 100644 --- a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/JsonMqttAdaptor.java +++ b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/JsonMqttAdaptor.java @@ -53,7 +53,7 @@ public class JsonMqttAdaptor implements MqttTransportAdaptor { private static final ByteBufAllocator ALLOCATOR = new UnpooledByteBufAllocator(false); @Override - public AdaptorToSessionActorMsg convertToActorMsg(DeviceSessionCtx ctx, MsgType type, MqttMessage inbound) throws AdaptorException { + public AdaptorToSessionActorMsg convertToActorMsg(DeviceSessionCtx ctx, SessionMsgType type, MqttMessage inbound) throws AdaptorException { FromDeviceMsg msg; switch (type) { case POST_TELEMETRY_REQUEST: @@ -94,7 +94,7 @@ public class JsonMqttAdaptor implements MqttTransportAdaptor { public Optional convertToAdaptorMsg(DeviceSessionCtx ctx, SessionActorToAdaptorMsg sessionMsg) throws AdaptorException { MqttMessage result = null; ToDeviceMsg msg = sessionMsg.getMsg(); - switch (msg.getMsgType()) { + switch (msg.getSessionMsgType()) { case STATUS_CODE_RESPONSE: case GET_ATTRIBUTES_RESPONSE: ResponseMsg responseMsg = (ResponseMsg) msg; @@ -134,12 +134,12 @@ public class JsonMqttAdaptor implements MqttTransportAdaptor { private MqttMessage convertResponseMsg(DeviceSessionCtx ctx, ToDeviceMsg msg, ResponseMsg responseMsg, Optional responseError) throws AdaptorException { MqttMessage result = null; - MsgType requestMsgType = responseMsg.getRequestMsgType(); + SessionMsgType requestMsgType = responseMsg.getRequestMsgType(); Integer requestId = responseMsg.getRequestId(); if (requestId >= 0) { - if (requestMsgType == MsgType.POST_ATTRIBUTES_REQUEST || requestMsgType == MsgType.POST_TELEMETRY_REQUEST) { + if (requestMsgType == SessionMsgType.POST_ATTRIBUTES_REQUEST || requestMsgType == SessionMsgType.POST_TELEMETRY_REQUEST) { result = MqttTransportHandler.createMqttPubAckMsg(requestId); - } else if (requestMsgType == MsgType.GET_ATTRIBUTES_REQUEST) { + } else if (requestMsgType == SessionMsgType.GET_ATTRIBUTES_REQUEST) { GetAttributesResponse response = (GetAttributesResponse) msg; Optional responseData = response.getData(); if (response.isSuccess() && responseData.isPresent()) { diff --git a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java index 632ab28999..6377fad69d 100644 --- a/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java +++ b/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java @@ -80,13 +80,13 @@ public class GatewayDeviceSessionCtx extends DeviceAwareSessionContext { private Optional getToDeviceMsg(SessionActorToAdaptorMsg sessionMsg) { ToDeviceMsg msg = sessionMsg.getMsg(); - switch (msg.getMsgType()) { + switch (msg.getSessionMsgType()) { case STATUS_CODE_RESPONSE: ResponseMsg responseMsg = (ResponseMsg) msg; if (responseMsg.isSuccess()) { - MsgType requestMsgType = responseMsg.getRequestMsgType(); + SessionMsgType requestMsgType = responseMsg.getRequestMsgType(); Integer requestId = responseMsg.getRequestId(); - if (requestId >= 0 && requestMsgType == MsgType.POST_ATTRIBUTES_REQUEST || requestMsgType == MsgType.POST_TELEMETRY_REQUEST) { + if (requestId >= 0 && requestMsgType == SessionMsgType.POST_ATTRIBUTES_REQUEST || requestMsgType == SessionMsgType.POST_TELEMETRY_REQUEST) { return Optional.of(MqttTransportHandler.createMqttPubAckMsg(requestId)); } }