Commit a9b09da1e60731b100b3781830867ee51d36b05f

Authored by Andrew Shvayka
1 parent de38a776

Implemented Transport support for the new rule engine

Showing 100 changed files with 759 additions and 602 deletions

Too many changes to show.

To preserve performance only 100 of 113 files are displayed.

@@ -61,6 +61,7 @@ import org.thingsboard.server.service.cluster.rpc.ClusterRpcService; @@ -61,6 +61,7 @@ import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
61 import org.thingsboard.server.service.component.ComponentDiscoveryService; 61 import org.thingsboard.server.service.component.ComponentDiscoveryService;
62 import org.thingsboard.server.service.executors.DbCallbackExecutorService; 62 import org.thingsboard.server.service.executors.DbCallbackExecutorService;
63 import org.thingsboard.server.service.mail.MailExecutorService; 63 import org.thingsboard.server.service.mail.MailExecutorService;
  64 +import org.thingsboard.server.service.rpc.DeviceRpcService;
64 import org.thingsboard.server.service.script.JsExecutorService; 65 import org.thingsboard.server.service.script.JsExecutorService;
65 import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; 66 import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService;
66 67
@@ -163,6 +164,10 @@ public class ActorSystemContext { @@ -163,6 +164,10 @@ public class ActorSystemContext {
163 164
164 @Autowired 165 @Autowired
165 @Getter 166 @Getter
  167 + private DeviceRpcService deviceRpcService;
  168 +
  169 + @Autowired
  170 + @Getter
166 @Setter 171 @Setter
167 private PluginWebSocketMsgEndpoint wsMsgEndpoint; 172 private PluginWebSocketMsgEndpoint wsMsgEndpoint;
168 173
@@ -186,17 +191,13 @@ public class ActorSystemContext { @@ -186,17 +191,13 @@ public class ActorSystemContext {
186 @Getter 191 @Getter
187 private long syncSessionTimeout; 192 private long syncSessionTimeout;
188 193
189 - @Value("${actors.plugin.termination.delay}")  
190 - @Getter  
191 - private long pluginActorTerminationDelay;  
192 -  
193 - @Value("${actors.plugin.processing.timeout}") 194 + @Value("${actors.queue.enabled}")
194 @Getter 195 @Getter
195 - private long pluginProcessingTimeout; 196 + private boolean queuePersistenceEnabled;
196 197
197 - @Value("${actors.plugin.error_persist_frequency}") 198 + @Value("${actors.queue.timeout}")
198 @Getter 199 @Getter
199 - private long pluginErrorPersistFrequency; 200 + private long queuePersistenceTimeout;
200 201
201 @Value("${actors.rule.chain.error_persist_frequency}") 202 @Value("${actors.rule.chain.error_persist_frequency}")
202 @Getter 203 @Getter
@@ -206,14 +207,6 @@ public class ActorSystemContext { @@ -206,14 +207,6 @@ public class ActorSystemContext {
206 @Getter 207 @Getter
207 private long ruleNodeErrorPersistFrequency; 208 private long ruleNodeErrorPersistFrequency;
208 209
209 - @Value("${actors.rule.termination.delay}")  
210 - @Getter  
211 - private long ruleActorTerminationDelay;  
212 -  
213 - @Value("${actors.rule.error_persist_frequency}")  
214 - @Getter  
215 - private long ruleErrorPersistFrequency;  
216 -  
217 @Value("${actors.statistics.enabled}") 210 @Value("${actors.statistics.enabled}")
218 @Getter 211 @Getter
219 private boolean statisticsEnabled; 212 private boolean statisticsEnabled;
@@ -29,13 +29,12 @@ import org.thingsboard.server.actors.shared.plugin.SystemPluginManager; @@ -29,13 +29,12 @@ import org.thingsboard.server.actors.shared.plugin.SystemPluginManager;
29 import org.thingsboard.server.actors.shared.rulechain.SystemRuleChainManager; 29 import org.thingsboard.server.actors.shared.rulechain.SystemRuleChainManager;
30 import org.thingsboard.server.actors.tenant.TenantActor; 30 import org.thingsboard.server.actors.tenant.TenantActor;
31 import org.thingsboard.server.common.data.Tenant; 31 import org.thingsboard.server.common.data.Tenant;
32 -import org.thingsboard.server.common.data.id.PluginId;  
33 -import org.thingsboard.server.common.data.id.RuleChainId;  
34 import org.thingsboard.server.common.data.id.TenantId; 32 import org.thingsboard.server.common.data.id.TenantId;
35 import org.thingsboard.server.common.data.page.PageDataIterable; 33 import org.thingsboard.server.common.data.page.PageDataIterable;
36 import org.thingsboard.server.common.msg.TbActorMsg; 34 import org.thingsboard.server.common.msg.TbActorMsg;
37 -import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;  
38 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 35 +import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
  36 +import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
  37 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
39 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; 38 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
40 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg; 39 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
41 import org.thingsboard.server.dao.model.ModelConstants; 40 import org.thingsboard.server.dao.model.ModelConstants;
@@ -90,12 +89,22 @@ public class AppActor extends RuleChainManagerActor { @@ -90,12 +89,22 @@ public class AppActor extends RuleChainManagerActor {
90 @Override 89 @Override
91 protected boolean process(TbActorMsg msg) { 90 protected boolean process(TbActorMsg msg) {
92 switch (msg.getMsgType()) { 91 switch (msg.getMsgType()) {
  92 + case CLUSTER_EVENT_MSG:
  93 + broadcast(msg);
  94 + break;
93 case COMPONENT_LIFE_CYCLE_MSG: 95 case COMPONENT_LIFE_CYCLE_MSG:
94 onComponentLifecycleMsg((ComponentLifecycleMsg) msg); 96 onComponentLifecycleMsg((ComponentLifecycleMsg) msg);
95 break; 97 break;
96 case SERVICE_TO_RULE_ENGINE_MSG: 98 case SERVICE_TO_RULE_ENGINE_MSG:
97 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg); 99 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
98 break; 100 break;
  101 + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG:
  102 + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG:
  103 + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG:
  104 + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG:
  105 + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG:
  106 + onToDeviceActorMsg((DeviceToDeviceActorMsg) msg);
  107 + break;
99 default: 108 default:
100 return false; 109 return false;
101 } 110 }
@@ -110,48 +119,12 @@ public class AppActor extends RuleChainManagerActor { @@ -110,48 +119,12 @@ public class AppActor extends RuleChainManagerActor {
110 } 119 }
111 } 120 }
112 121
113 -  
114 -// @Override  
115 -// public void onReceive(Object msg) throws Exception {  
116 -// logger.debug("Received message: {}", msg);  
117 -// if (msg instanceof ToDeviceActorMsg) {  
118 -// processDeviceMsg((ToDeviceActorMsg) msg);  
119 -// } else if (msg instanceof ToPluginActorMsg) {  
120 -// onToPluginMsg((ToPluginActorMsg) msg);  
121 -// } else if (msg instanceof ToDeviceActorNotificationMsg) {  
122 -// onToDeviceActorMsg((ToDeviceActorNotificationMsg) msg);  
123 -// } else if (msg instanceof Terminated) {  
124 -// processTermination((Terminated) msg);  
125 -// } else if (msg instanceof ClusterEventMsg) {  
126 -// broadcast(msg);  
127 -// } else if (msg instanceof ComponentLifecycleMsg) {  
128 -// onComponentLifecycleMsg((ComponentLifecycleMsg) msg);  
129 -// } else if (msg instanceof PluginTerminationMsg) {  
130 -// onPluginTerminated((PluginTerminationMsg) msg);  
131 -// } else {  
132 -// logger.warning("Unknown message: {}!", msg);  
133 -// }  
134 -// }  
135 -  
136 - private void onPluginTerminated(PluginTerminationMsg msg) {  
137 - pluginManager.remove(msg.getId());  
138 - }  
139 -  
140 - private void broadcast(Object msg) {  
141 - pluginManager.broadcast(msg); 122 + @Override
  123 + protected void broadcast(Object msg) {
  124 + super.broadcast(msg);
142 tenantActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender())); 125 tenantActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender()));
143 } 126 }
144 127
145 - private void onToPluginMsg(ToPluginActorMsg msg) {  
146 - ActorRef target;  
147 - if (SYSTEM_TENANT.equals(msg.getPluginTenantId())) {  
148 - target = pluginManager.getOrCreateActor(this.context(), msg.getPluginId());  
149 - } else {  
150 - target = getOrCreateTenantActor(msg.getPluginTenantId());  
151 - }  
152 - target.tell(msg, ActorRef.noSender());  
153 - }  
154 -  
155 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) { 128 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) {
156 ActorRef target; 129 ActorRef target;
157 if (SYSTEM_TENANT.equals(msg.getTenantId())) { 130 if (SYSTEM_TENANT.equals(msg.getTenantId())) {
@@ -166,17 +139,17 @@ public class AppActor extends RuleChainManagerActor { @@ -166,17 +139,17 @@ public class AppActor extends RuleChainManagerActor {
166 } 139 }
167 } 140 }
168 141
169 - private void onToDeviceActorMsg(ToDeviceActorNotificationMsg msg) { 142 + private void onToDeviceActorMsg(TenantAwareMsg msg) {
170 getOrCreateTenantActor(msg.getTenantId()).tell(msg, ActorRef.noSender()); 143 getOrCreateTenantActor(msg.getTenantId()).tell(msg, ActorRef.noSender());
171 } 144 }
172 145
173 - private void processDeviceMsg(ToDeviceActorMsg toDeviceActorMsg) {  
174 - TenantId tenantId = toDeviceActorMsg.getTenantId(); 146 + private void processDeviceMsg(DeviceToDeviceActorMsg deviceToDeviceActorMsg) {
  147 + TenantId tenantId = deviceToDeviceActorMsg.getTenantId();
175 ActorRef tenantActor = getOrCreateTenantActor(tenantId); 148 ActorRef tenantActor = getOrCreateTenantActor(tenantId);
176 - if (toDeviceActorMsg.getPayload().getMsgType().requiresRulesProcessing()) {  
177 -// tenantActor.tell(new RuleChainDeviceMsg(toDeviceActorMsg, ruleManager.getRuleChain(this.context())), context().self()); 149 + if (deviceToDeviceActorMsg.getPayload().getMsgType().requiresRulesProcessing()) {
  150 +// tenantActor.tell(new RuleChainDeviceMsg(deviceToDeviceActorMsg, ruleManager.getRuleChain(this.context())), context().self());
178 } else { 151 } else {
179 - tenantActor.tell(toDeviceActorMsg, context().self()); 152 + tenantActor.tell(deviceToDeviceActorMsg, context().self());
180 } 153 }
181 } 154 }
182 155
@@ -24,59 +24,59 @@ import org.thingsboard.server.common.data.id.DeviceId; @@ -24,59 +24,59 @@ import org.thingsboard.server.common.data.id.DeviceId;
24 import org.thingsboard.server.common.data.id.TenantId; 24 import org.thingsboard.server.common.data.id.TenantId;
25 import org.thingsboard.server.common.msg.TbActorMsg; 25 import org.thingsboard.server.common.msg.TbActorMsg;
26 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 26 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
27 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 27 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
  28 +import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg;
  29 +import org.thingsboard.server.common.msg.timeout.DeviceActorRpcTimeoutMsg;
28 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; 30 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
29 -import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;  
30 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; 31 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
31 -import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;  
32 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg;  
33 -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; 32 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
  33 +import org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg;
34 34
35 public class DeviceActor extends ContextAwareActor { 35 public class DeviceActor extends ContextAwareActor {
36 36
37 private final LoggingAdapter logger = Logging.getLogger(getContext().system(), this); 37 private final LoggingAdapter logger = Logging.getLogger(getContext().system(), this);
38 38
39 - private final TenantId tenantId;  
40 - private final DeviceId deviceId;  
41 private final DeviceActorMessageProcessor processor; 39 private final DeviceActorMessageProcessor processor;
42 40
43 private DeviceActor(ActorSystemContext systemContext, TenantId tenantId, DeviceId deviceId) { 41 private DeviceActor(ActorSystemContext systemContext, TenantId tenantId, DeviceId deviceId) {
44 super(systemContext); 42 super(systemContext);
45 - this.tenantId = tenantId;  
46 - this.deviceId = deviceId;  
47 - this.processor = new DeviceActorMessageProcessor(systemContext, logger, deviceId); 43 + this.processor = new DeviceActorMessageProcessor(systemContext, logger, tenantId, deviceId);
48 } 44 }
49 45
50 @Override 46 @Override
51 protected boolean process(TbActorMsg msg) { 47 protected boolean process(TbActorMsg msg) {
52 - return false;  
53 - }  
54 -  
55 - @Override  
56 - public void onReceive(Object msg) throws Exception {  
57 -// if (msg instanceof RuleChainDeviceMsg) {  
58 -// processor.process(context(), (RuleChainDeviceMsg) msg);  
59 -// } else if (msg instanceof RulesProcessedMsg) {  
60 -// processor.onRulesProcessedMsg(context(), (RulesProcessedMsg) msg);  
61 - if (msg instanceof ToDeviceActorMsg) {  
62 - processor.process(context(), (ToDeviceActorMsg) msg);  
63 - } else if (msg instanceof ToDeviceActorNotificationMsg) {  
64 - if (msg instanceof DeviceAttributesEventNotificationMsg) { 48 + switch (msg.getMsgType()) {
  49 + case CLUSTER_EVENT_MSG:
  50 + processor.processClusterEventMsg((ClusterEventMsg) msg);
  51 + break;
  52 + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG:
  53 + processor.process(context(), (DeviceToDeviceActorMsg) msg);
  54 + break;
  55 + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG:
65 processor.processAttributesUpdate(context(), (DeviceAttributesEventNotificationMsg) msg); 56 processor.processAttributesUpdate(context(), (DeviceAttributesEventNotificationMsg) msg);
66 - } else if (msg instanceof ToDeviceRpcRequestPluginMsg) {  
67 - processor.processRpcRequest(context(), (ToDeviceRpcRequestPluginMsg) msg);  
68 - } else if (msg instanceof DeviceCredentialsUpdateNotificationMsg){ 57 + break;
  58 + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG:
69 processor.processCredentialsUpdate(); 59 processor.processCredentialsUpdate();
70 - } else if (msg instanceof DeviceNameOrTypeUpdateMsg){ 60 + break;
  61 + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG:
71 processor.processNameOrTypeUpdate((DeviceNameOrTypeUpdateMsg) msg); 62 processor.processNameOrTypeUpdate((DeviceNameOrTypeUpdateMsg) msg);
72 - }  
73 - } else if (msg instanceof TimeoutMsg) {  
74 - processor.processTimeout(context(), (TimeoutMsg) msg);  
75 - } else if (msg instanceof ClusterEventMsg) {  
76 - processor.processClusterEventMsg((ClusterEventMsg) msg);  
77 - } else {  
78 - logger.debug("[{}][{}] Unknown msg type.", tenantId, deviceId, msg.getClass().getName()); 63 + break;
  64 + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG:
  65 + processor.processRpcRequest(context(), (ToDeviceRpcRequestMsg) msg);
  66 + break;
  67 + case DEVICE_ACTOR_RPC_TIMEOUT_MSG:
  68 + processor.processRpcTimeout(context(), (DeviceActorRpcTimeoutMsg) msg);
  69 + break;
  70 + case DEVICE_ACTOR_QUEUE_TIMEOUT_MSG:
  71 + processor.processQueueTimeout(context(), (DeviceActorQueueTimeoutMsg) msg);
  72 + break;
  73 + case RULE_ENGINE_QUEUE_PUT_ACK_MSG:
  74 + processor.processQueueAck(context(), (RuleEngineQueuePutAckMsg) msg);
  75 + break;
  76 + default:
  77 + return false;
79 } 78 }
  79 + return true;
80 } 80 }
81 81
82 public static class ActorCreator extends ContextBasedCreator<DeviceActor> { 82 public static class ActorCreator extends ContextBasedCreator<DeviceActor> {
@@ -18,31 +18,63 @@ package org.thingsboard.server.actors.device; @@ -18,31 +18,63 @@ package org.thingsboard.server.actors.device;
18 import akka.actor.ActorContext; 18 import akka.actor.ActorContext;
19 import akka.actor.ActorRef; 19 import akka.actor.ActorRef;
20 import akka.event.LoggingAdapter; 20 import akka.event.LoggingAdapter;
  21 +import com.datastax.driver.core.utils.UUIDs;
  22 +import com.google.gson.Gson;
  23 +import com.google.gson.JsonArray;
  24 +import com.google.gson.JsonObject;
21 import org.thingsboard.server.actors.ActorSystemContext; 25 import org.thingsboard.server.actors.ActorSystemContext;
22 import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor; 26 import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor;
23 import org.thingsboard.server.common.data.DataConstants; 27 import org.thingsboard.server.common.data.DataConstants;
24 import org.thingsboard.server.common.data.Device; 28 import org.thingsboard.server.common.data.Device;
25 import org.thingsboard.server.common.data.id.DeviceId; 29 import org.thingsboard.server.common.data.id.DeviceId;
26 import org.thingsboard.server.common.data.id.SessionId; 30 import org.thingsboard.server.common.data.id.SessionId;
  31 +import org.thingsboard.server.common.data.id.TenantId;
27 import org.thingsboard.server.common.data.kv.AttributeKey; 32 import org.thingsboard.server.common.data.kv.AttributeKey;
28 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 33 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  34 +import org.thingsboard.server.common.data.kv.KvEntry;
29 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; 35 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
  36 +import org.thingsboard.server.common.msg.TbMsg;
  37 +import org.thingsboard.server.common.msg.TbMsgDataType;
  38 +import org.thingsboard.server.common.msg.TbMsgMetaData;
30 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 39 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
31 import org.thingsboard.server.common.msg.cluster.ServerAddress; 40 import org.thingsboard.server.common.msg.cluster.ServerAddress;
32 -import org.thingsboard.server.common.msg.core.*;  
33 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 41 +import org.thingsboard.server.common.msg.core.AttributesUpdateNotification;
  42 +import org.thingsboard.server.common.msg.core.BasicCommandAckResponse;
  43 +import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
  44 +import org.thingsboard.server.common.msg.core.BasicToDeviceSessionActorMsg;
  45 +import org.thingsboard.server.common.msg.core.RuleEngineError;
  46 +import org.thingsboard.server.common.msg.core.RuleEngineErrorMsg;
  47 +import org.thingsboard.server.common.msg.core.SessionCloseMsg;
  48 +import org.thingsboard.server.common.msg.core.SessionCloseNotification;
  49 +import org.thingsboard.server.common.msg.core.SessionOpenMsg;
  50 +import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
  51 +import org.thingsboard.server.common.msg.core.ToDeviceRpcRequestMsg;
  52 +import org.thingsboard.server.common.msg.core.ToDeviceRpcResponseMsg;
  53 +import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
  54 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
34 import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg; 55 import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg;
35 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 56 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
36 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 57 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
37 -import org.thingsboard.server.common.msg.session.MsgType; 58 +import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
  59 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  60 +import org.thingsboard.server.common.msg.session.SessionMsgType;
38 import org.thingsboard.server.common.msg.session.SessionType; 61 import org.thingsboard.server.common.msg.session.SessionType;
39 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 62 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
40 -import org.thingsboard.server.extensions.api.device.DeviceAttributes; 63 +import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg;
  64 +import org.thingsboard.server.common.msg.timeout.DeviceActorRpcTimeoutMsg;
41 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; 65 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
42 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; 66 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
43 -import org.thingsboard.server.extensions.api.plugins.msg.*;  
44 -  
45 -import java.util.*; 67 +import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
  68 +import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
  69 +
  70 +import java.util.ArrayList;
  71 +import java.util.HashMap;
  72 +import java.util.HashSet;
  73 +import java.util.List;
  74 +import java.util.Map;
  75 +import java.util.Optional;
  76 +import java.util.Set;
  77 +import java.util.UUID;
46 import java.util.concurrent.ExecutionException; 78 import java.util.concurrent.ExecutionException;
47 import java.util.concurrent.TimeoutException; 79 import java.util.concurrent.TimeoutException;
48 import java.util.function.Consumer; 80 import java.util.function.Consumer;
@@ -54,25 +86,30 @@ import java.util.stream.Collectors; @@ -54,25 +86,30 @@ import java.util.stream.Collectors;
54 */ 86 */
55 public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { 87 public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
56 88
  89 + private final TenantId tenantId;
57 private final DeviceId deviceId; 90 private final DeviceId deviceId;
58 private final Map<SessionId, SessionInfo> sessions; 91 private final Map<SessionId, SessionInfo> sessions;
59 private final Map<SessionId, SessionInfo> attributeSubscriptions; 92 private final Map<SessionId, SessionInfo> attributeSubscriptions;
60 private final Map<SessionId, SessionInfo> rpcSubscriptions; 93 private final Map<SessionId, SessionInfo> rpcSubscriptions;
61 -  
62 private final Map<Integer, ToDeviceRpcRequestMetadata> rpcPendingMap; 94 private final Map<Integer, ToDeviceRpcRequestMetadata> rpcPendingMap;
  95 + private final Map<UUID, PendingSessionMsgData> pendingMsgs;
  96 +
  97 + private final Gson gson = new Gson();
63 98
64 private int rpcSeq = 0; 99 private int rpcSeq = 0;
65 private String deviceName; 100 private String deviceName;
66 private String deviceType; 101 private String deviceType;
67 - private DeviceAttributes deviceAttributes; 102 + private TbMsgMetaData defaultMetaData;
68 103
69 - public DeviceActorMessageProcessor(ActorSystemContext systemContext, LoggingAdapter logger, DeviceId deviceId) { 104 + public DeviceActorMessageProcessor(ActorSystemContext systemContext, LoggingAdapter logger, TenantId tenantId, DeviceId deviceId) {
70 super(systemContext, logger); 105 super(systemContext, logger);
  106 + this.tenantId = tenantId;
71 this.deviceId = deviceId; 107 this.deviceId = deviceId;
72 this.sessions = new HashMap<>(); 108 this.sessions = new HashMap<>();
73 this.attributeSubscriptions = new HashMap<>(); 109 this.attributeSubscriptions = new HashMap<>();
74 this.rpcSubscriptions = new HashMap<>(); 110 this.rpcSubscriptions = new HashMap<>();
75 this.rpcPendingMap = new HashMap<>(); 111 this.rpcPendingMap = new HashMap<>();
  112 + this.pendingMsgs = new HashMap<>();
76 initAttributes(); 113 initAttributes();
77 } 114 }
78 115
@@ -81,19 +118,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -81,19 +118,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
81 Device device = systemContext.getDeviceService().findDeviceById(deviceId); 118 Device device = systemContext.getDeviceService().findDeviceById(deviceId);
82 this.deviceName = device.getName(); 119 this.deviceName = device.getName();
83 this.deviceType = device.getType(); 120 this.deviceType = device.getType();
84 - this.deviceAttributes = new DeviceAttributes(fetchAttributes(DataConstants.CLIENT_SCOPE),  
85 - fetchAttributes(DataConstants.SERVER_SCOPE), fetchAttributes(DataConstants.SHARED_SCOPE)); 121 + this.defaultMetaData = new TbMsgMetaData();
  122 + this.defaultMetaData.putValue("deviceName", deviceName);
  123 + this.defaultMetaData.putValue("deviceType", deviceType);
86 } 124 }
87 125
88 - private void refreshAttributes(DeviceAttributesEventNotificationMsg msg) {  
89 - if (msg.isDeleted()) {  
90 - msg.getDeletedKeys().forEach(key -> deviceAttributes.remove(key));  
91 - } else {  
92 - deviceAttributes.update(msg.getScope(), msg.getValues());  
93 - }  
94 - }  
95 -  
96 - void processRpcRequest(ActorContext context, ToDeviceRpcRequestPluginMsg msg) { 126 + void processRpcRequest(ActorContext context, org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg msg) {
97 ToDeviceRpcRequest request = msg.getMsg(); 127 ToDeviceRpcRequest request = msg.getMsg();
98 ToDeviceRpcRequestBody body = request.getBody(); 128 ToDeviceRpcRequestBody body = request.getBody();
99 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg( 129 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg(
@@ -120,9 +150,8 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -120,9 +150,8 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
120 syncSessionSet.forEach(rpcSubscriptions::remove); 150 syncSessionSet.forEach(rpcSubscriptions::remove);
121 151
122 if (request.isOneway() && sent) { 152 if (request.isOneway() && sent) {
123 - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(msg, (String) null);  
124 - context.parent().tell(responsePluginMsg, ActorRef.noSender());  
125 logger.debug("[{}] Rpc command response sent [{}]!", deviceId, request.getId()); 153 logger.debug("[{}] Rpc command response sent [{}]!", deviceId, request.getId());
  154 + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(msg.getMsg().getId(), null, null));
126 } else { 155 } else {
127 registerPendingRpcRequest(context, msg, sent, rpcRequest, timeout); 156 registerPendingRpcRequest(context, msg, sent, rpcRequest, timeout);
128 } 157 }
@@ -134,18 +163,36 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -134,18 +163,36 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
134 163
135 } 164 }
136 165
137 - private void registerPendingRpcRequest(ActorContext context, ToDeviceRpcRequestPluginMsg msg, boolean sent, ToDeviceRpcRequestMsg rpcRequest, long timeout) { 166 + private void registerPendingRpcRequest(ActorContext context, org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg msg, boolean sent, ToDeviceRpcRequestMsg rpcRequest, long timeout) {
138 rpcPendingMap.put(rpcRequest.getRequestId(), new ToDeviceRpcRequestMetadata(msg, sent)); 167 rpcPendingMap.put(rpcRequest.getRequestId(), new ToDeviceRpcRequestMetadata(msg, sent));
139 - TimeoutIntMsg timeoutMsg = new TimeoutIntMsg(rpcRequest.getRequestId(), timeout); 168 + DeviceActorRpcTimeoutMsg timeoutMsg = new DeviceActorRpcTimeoutMsg(rpcRequest.getRequestId(), timeout);
140 scheduleMsgWithDelay(context, timeoutMsg, timeoutMsg.getTimeout()); 169 scheduleMsgWithDelay(context, timeoutMsg, timeoutMsg.getTimeout());
141 } 170 }
142 171
143 - public void processTimeout(ActorContext context, TimeoutMsg msg) { 172 + void processRpcTimeout(ActorContext context, DeviceActorRpcTimeoutMsg msg) {
144 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(msg.getId()); 173 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(msg.getId());
145 if (requestMd != null) { 174 if (requestMd != null) {
146 logger.debug("[{}] RPC request [{}] timeout detected!", deviceId, msg.getId()); 175 logger.debug("[{}] RPC request [{}] timeout detected!", deviceId, msg.getId());
147 - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(requestMd.getMsg(), requestMd.isSent() ? RpcError.TIMEOUT : RpcError.NO_ACTIVE_CONNECTION);  
148 - context.parent().tell(responsePluginMsg, ActorRef.noSender()); 176 + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(),
  177 + null, requestMd.isSent() ? RpcError.TIMEOUT : RpcError.NO_ACTIVE_CONNECTION));
  178 + }
  179 + }
  180 +
  181 + void processQueueTimeout(ActorContext context, DeviceActorQueueTimeoutMsg msg) {
  182 + PendingSessionMsgData data = pendingMsgs.remove(msg.getId());
  183 + if (data != null) {
  184 + logger.debug("[{}] Queue put [{}] timeout detected!", deviceId, msg.getId());
  185 + ToDeviceMsg toDeviceMsg = new RuleEngineErrorMsg(data.getSessionMsgType(), RuleEngineError.QUEUE_PUT_TIMEOUT);
  186 + sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress());
  187 + }
  188 + }
  189 +
  190 + void processQueueAck(ActorContext context, RuleEngineQueuePutAckMsg msg) {
  191 + PendingSessionMsgData data = pendingMsgs.remove(msg.getId());
  192 + if (data != null) {
  193 + logger.debug("[{}] Queue put [{}] ack detected!", deviceId, msg.getId());
  194 + ToDeviceMsg toDeviceMsg = BasicStatusCodeResponse.onSuccess(data.getSessionMsgType(), data.getRequestId());
  195 + sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(toDeviceMsg, data.getSessionId()), data.getServerAddress());
149 } 196 }
150 } 197 }
151 198
@@ -175,8 +222,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -175,8 +222,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
175 ToDeviceRpcRequestBody body = request.getBody(); 222 ToDeviceRpcRequestBody body = request.getBody();
176 if (request.isOneway()) { 223 if (request.isOneway()) {
177 sentOneWayIds.add(entry.getKey()); 224 sentOneWayIds.add(entry.getKey());
178 - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(entry.getValue().getMsg(), (String) null);  
179 - context.parent().tell(responsePluginMsg, ActorRef.noSender()); 225 + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(request.getId(), null, null));
180 } 226 }
181 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg( 227 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg(
182 entry.getKey(), 228 entry.getKey(),
@@ -188,14 +234,70 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -188,14 +234,70 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
188 }; 234 };
189 } 235 }
190 236
191 - void process(ActorContext context, ToDeviceActorMsg msg) { 237 + void process(ActorContext context, DeviceToDeviceActorMsg msg) {
192 processSubscriptionCommands(context, msg); 238 processSubscriptionCommands(context, msg);
193 processRpcResponses(context, msg); 239 processRpcResponses(context, msg);
194 processSessionStateMsgs(msg); 240 processSessionStateMsgs(msg);
  241 + SessionMsgType sessionMsgType = msg.getPayload().getMsgType();
  242 + if (sessionMsgType.requiresRulesProcessing()) {
  243 + switch (sessionMsgType) {
  244 + case GET_ATTRIBUTES_REQUEST:
  245 + handleGetAttributesRequest(msg);
  246 + break;
  247 + case POST_ATTRIBUTES_REQUEST:
  248 + break;
  249 + case POST_TELEMETRY_REQUEST:
  250 + handlePostTelemetryRequest(context, msg);
  251 + break;
  252 + case TO_SERVER_RPC_REQUEST:
  253 + break;
  254 + //TODO: push to queue and start processing!
  255 + }
  256 + }
  257 + }
  258 +
  259 + private void handleGetAttributesRequest(DeviceToDeviceActorMsg msg) {
  260 +
  261 + }
  262 +
  263 + private void handlePostTelemetryRequest(ActorContext context, DeviceToDeviceActorMsg src) {
  264 + TelemetryUploadRequest telemetry = (TelemetryUploadRequest) src.getPayload();
  265 +
  266 + Map<Long, List<KvEntry>> tsData = telemetry.getData();
  267 +
  268 + JsonArray json = new JsonArray();
  269 + for (Map.Entry<Long, List<KvEntry>> entry : tsData.entrySet()) {
  270 + JsonObject ts = new JsonObject();
  271 + ts.addProperty("ts", entry.getKey());
  272 + JsonObject values = new JsonObject();
  273 + for (KvEntry kv : entry.getValue()) {
  274 + kv.getBooleanValue().ifPresent(v -> values.addProperty(kv.getKey(), v));
  275 + kv.getLongValue().ifPresent(v -> values.addProperty(kv.getKey(), v));
  276 + kv.getDoubleValue().ifPresent(v -> values.addProperty(kv.getKey(), v));
  277 + kv.getStrValue().ifPresent(v -> values.addProperty(kv.getKey(), v));
  278 + }
  279 + ts.add("values", values);
  280 + json.add(ts);
  281 + }
  282 +
  283 + TbMsg tbMsg = new TbMsg(UUIDs.timeBased(), SessionMsgType.POST_TELEMETRY_REQUEST.name(), deviceId, defaultMetaData, TbMsgDataType.JSON, gson.toJson(json));
  284 + pushToRuleEngineWithTimeout(context, tbMsg, src, telemetry);
  285 + }
  286 +
  287 + private void pushToRuleEngineWithTimeout(ActorContext context, TbMsg tbMsg, DeviceToDeviceActorMsg src, FromDeviceRequestMsg fromDeviceRequestMsg) {
  288 + SessionMsgType sessionMsgType = fromDeviceRequestMsg.getMsgType();
  289 + int requestId = fromDeviceRequestMsg.getRequestId();
  290 + if (systemContext.isQueuePersistenceEnabled()) {
  291 + pendingMsgs.put(tbMsg.getId(), new PendingSessionMsgData(src.getSessionId(), src.getServerAddress(), sessionMsgType, requestId));
  292 + scheduleMsgWithDelay(context, new DeviceActorQueueTimeoutMsg(tbMsg.getId(), systemContext.getQueuePersistenceTimeout()), systemContext.getQueuePersistenceTimeout());
  293 + } else {
  294 + ToDeviceSessionActorMsg response = new BasicToDeviceSessionActorMsg(BasicStatusCodeResponse.onSuccess(sessionMsgType, requestId), src.getSessionId());
  295 + sendMsgToSessionActor(response, src.getServerAddress());
  296 + }
  297 + context.parent().tell(new DeviceActorToRuleEngineMsg(context.self(), tbMsg), context.self());
195 } 298 }
196 299
197 void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) { 300 void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) {
198 - refreshAttributes(msg);  
199 if (attributeSubscriptions.size() > 0) { 301 if (attributeSubscriptions.size() > 0) {
200 ToDeviceMsg notification = null; 302 ToDeviceMsg notification = null;
201 if (msg.isDeleted()) { 303 if (msg.isDeleted()) {
@@ -225,50 +327,29 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -225,50 +327,29 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
225 } 327 }
226 } 328 }
227 329
228 -// void process(ActorContext context, RuleChainDeviceMsg srcMsg) {  
229 -// ChainProcessingMetaData md = new ChainProcessingMetaData(srcMsg.getRuleChain(),  
230 -// srcMsg.getToDeviceActorMsg(), new DeviceMetaData(deviceId, deviceName, deviceType, deviceAttributes), context.self());  
231 -// ChainProcessingContext ctx = new ChainProcessingContext(md);  
232 -// if (ctx.getChainLength() > 0) {  
233 -// RuleProcessingMsg msg = new RuleProcessingMsg(ctx);  
234 -// ActorRef ruleActorRef = ctx.getCurrentActor();  
235 -// ruleActorRef.tell(msg, ActorRef.noSender());  
236 -// } else {  
237 -// context.self().tell(new RulesProcessedMsg(ctx), context.self());  
238 -// }  
239 -// }  
240 -  
241 - void processRpcResponses(ActorContext context, ToDeviceActorMsg msg) { 330 + private void processRpcResponses(ActorContext context, DeviceToDeviceActorMsg msg) {
242 SessionId sessionId = msg.getSessionId(); 331 SessionId sessionId = msg.getSessionId();
243 FromDeviceMsg inMsg = msg.getPayload(); 332 FromDeviceMsg inMsg = msg.getPayload();
244 - if (inMsg.getMsgType() == MsgType.TO_DEVICE_RPC_RESPONSE) { 333 + if (inMsg.getMsgType() == SessionMsgType.TO_DEVICE_RPC_RESPONSE) {
245 logger.debug("[{}] Processing rpc command response [{}]", deviceId, sessionId); 334 logger.debug("[{}] Processing rpc command response [{}]", deviceId, sessionId);
246 ToDeviceRpcResponseMsg responseMsg = (ToDeviceRpcResponseMsg) inMsg; 335 ToDeviceRpcResponseMsg responseMsg = (ToDeviceRpcResponseMsg) inMsg;
247 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(responseMsg.getRequestId()); 336 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(responseMsg.getRequestId());
248 boolean success = requestMd != null; 337 boolean success = requestMd != null;
249 if (success) { 338 if (success) {
250 - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(requestMd.getMsg(), responseMsg.getData());  
251 - Optional<ServerAddress> pluginServerAddress = requestMd.getMsg().getServerAddress();  
252 - if (pluginServerAddress.isPresent()) {  
253 - systemContext.getRpcService().tell(pluginServerAddress.get(), responsePluginMsg);  
254 - logger.debug("[{}] Rpc command response sent to remote plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId());  
255 - } else {  
256 - context.parent().tell(responsePluginMsg, ActorRef.noSender());  
257 - logger.debug("[{}] Rpc command response sent to local plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId());  
258 - } 339 + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(requestMd.getMsg().getMsg().getId(), responseMsg.getData(), null));
259 } else { 340 } else {
260 logger.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId()); 341 logger.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId());
261 } 342 }
262 if (msg.getSessionType() == SessionType.SYNC) { 343 if (msg.getSessionType() == SessionType.SYNC) {
263 BasicCommandAckResponse response = success 344 BasicCommandAckResponse response = success
264 - ? BasicCommandAckResponse.onSuccess(MsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId())  
265 - : BasicCommandAckResponse.onError(MsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException()); 345 + ? BasicCommandAckResponse.onSuccess(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId())
  346 + : BasicCommandAckResponse.onError(SessionMsgType.TO_DEVICE_RPC_REQUEST, responseMsg.getRequestId(), new TimeoutException());
266 sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(response, msg.getSessionId()), msg.getServerAddress()); 347 sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(response, msg.getSessionId()), msg.getServerAddress());
267 } 348 }
268 } 349 }
269 } 350 }
270 351
271 - public void processClusterEventMsg(ClusterEventMsg msg) { 352 + void processClusterEventMsg(ClusterEventMsg msg) {
272 if (!msg.isAdded()) { 353 if (!msg.isAdded()) {
273 logger.debug("[{}] Clearing attributes/rpc subscription for server [{}]", deviceId, msg.getServerAddress()); 354 logger.debug("[{}] Clearing attributes/rpc subscription for server [{}]", deviceId, msg.getServerAddress());
274 Predicate<Map.Entry<SessionId, SessionInfo>> filter = e -> e.getValue().getServer() 355 Predicate<Map.Entry<SessionId, SessionInfo>> filter = e -> e.getValue().getServer()
@@ -278,59 +359,27 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -278,59 +359,27 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
278 } 359 }
279 } 360 }
280 361
281 - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, String data) {  
282 - return toPluginRpcResponseMsg(requestMsg, data, null);  
283 - }  
284 -  
285 - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, RpcError error) {  
286 - return toPluginRpcResponseMsg(requestMsg, null, error);  
287 - }  
288 -  
289 - private ToPluginRpcResponseDeviceMsg toPluginRpcResponseMsg(ToDeviceRpcRequestPluginMsg requestMsg, String data, RpcError error) {  
290 - return new ToPluginRpcResponseDeviceMsg(  
291 - requestMsg.getPluginId(),  
292 - requestMsg.getPluginTenantId(),  
293 - new FromDeviceRpcResponse(requestMsg.getMsg().getId(),  
294 - data,  
295 - error  
296 - )  
297 - );  
298 - }  
299 -  
300 -// void onRulesProcessedMsg(ActorContext context, RulesProcessedMsg msg) {  
301 -// ChainProcessingContext ctx = msg.getCtx();  
302 -// ToDeviceActorMsg inMsg = ctx.getInMsg();  
303 -// SessionId sid = inMsg.getSessionId();  
304 -// ToDeviceSessionActorMsg response;  
305 -// if (ctx.getResponse() != null) {  
306 -// response = new BasicToDeviceSessionActorMsg(ctx.getResponse(), sid);  
307 -// } else {  
308 -// response = new BasicToDeviceSessionActorMsg(ctx.getError(), sid);  
309 -// }  
310 -// sendMsgToSessionActor(response, inMsg.getServerAddress());  
311 -// }  
312 -  
313 - private void processSubscriptionCommands(ActorContext context, ToDeviceActorMsg msg) { 362 + private void processSubscriptionCommands(ActorContext context, DeviceToDeviceActorMsg msg) {
314 SessionId sessionId = msg.getSessionId(); 363 SessionId sessionId = msg.getSessionId();
315 SessionType sessionType = msg.getSessionType(); 364 SessionType sessionType = msg.getSessionType();
316 FromDeviceMsg inMsg = msg.getPayload(); 365 FromDeviceMsg inMsg = msg.getPayload();
317 - if (inMsg.getMsgType() == MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) { 366 + if (inMsg.getMsgType() == SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) {
318 logger.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId); 367 logger.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId);
319 attributeSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress())); 368 attributeSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress()));
320 - } else if (inMsg.getMsgType() == MsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST) { 369 + } else if (inMsg.getMsgType() == SessionMsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST) {
321 logger.debug("[{}] Canceling attributes subscription for session [{}]", deviceId, sessionId); 370 logger.debug("[{}] Canceling attributes subscription for session [{}]", deviceId, sessionId);
322 attributeSubscriptions.remove(sessionId); 371 attributeSubscriptions.remove(sessionId);
323 - } else if (inMsg.getMsgType() == MsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST) { 372 + } else if (inMsg.getMsgType() == SessionMsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST) {
324 logger.debug("[{}] Registering rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType); 373 logger.debug("[{}] Registering rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType);
325 rpcSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress())); 374 rpcSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress()));
326 sendPendingRequests(context, sessionId, sessionType, msg.getServerAddress()); 375 sendPendingRequests(context, sessionId, sessionType, msg.getServerAddress());
327 - } else if (inMsg.getMsgType() == MsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST) { 376 + } else if (inMsg.getMsgType() == SessionMsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST) {
328 logger.debug("[{}] Canceling rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType); 377 logger.debug("[{}] Canceling rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType);
329 rpcSubscriptions.remove(sessionId); 378 rpcSubscriptions.remove(sessionId);
330 } 379 }
331 } 380 }
332 381
333 - private void processSessionStateMsgs(ToDeviceActorMsg msg) { 382 + private void processSessionStateMsgs(DeviceToDeviceActorMsg msg) {
334 SessionId sessionId = msg.getSessionId(); 383 SessionId sessionId = msg.getSessionId();
335 FromDeviceMsg inMsg = msg.getPayload(); 384 FromDeviceMsg inMsg = msg.getPayload();
336 if (inMsg instanceof SessionOpenMsg) { 385 if (inMsg instanceof SessionOpenMsg) {
@@ -364,7 +413,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -364,7 +413,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
364 } 413 }
365 } 414 }
366 415
367 - public void processCredentialsUpdate() { 416 + void processCredentialsUpdate() {
368 sessions.forEach((k, v) -> { 417 sessions.forEach((k, v) -> {
369 sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer()); 418 sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer());
370 }); 419 });
@@ -372,8 +421,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso @@ -372,8 +421,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
372 rpcSubscriptions.clear(); 421 rpcSubscriptions.clear();
373 } 422 }
374 423
375 - public void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) { 424 + void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) {
376 this.deviceName = msg.getDeviceName(); 425 this.deviceName = msg.getDeviceName();
377 this.deviceType = msg.getDeviceType(); 426 this.deviceType = msg.getDeviceType();
  427 + this.defaultMetaData = new TbMsgMetaData();
  428 + this.defaultMetaData.putValue("deviceName", deviceName);
  429 + this.defaultMetaData.putValue("deviceType", deviceType);
378 } 430 }
  431 +
379 } 432 }
  1 +/**
  2 + * Copyright © 2016-2018 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.actors.device;
  17 +
  18 +import akka.actor.ActorRef;
  19 +import lombok.Data;
  20 +import org.thingsboard.server.common.data.id.TenantId;
  21 +import org.thingsboard.server.common.msg.MsgType;
  22 +import org.thingsboard.server.common.msg.TbActorMsg;
  23 +import org.thingsboard.server.common.msg.TbMsg;
  24 +
  25 +/**
  26 + * Created by ashvayka on 15.03.18.
  27 + */
  28 +@Data
  29 +public final class DeviceActorToRuleEngineMsg implements TbActorMsg {
  30 +
  31 + private final ActorRef callbackRef;
  32 + private final TbMsg tbMsg;
  33 +
  34 + @Override
  35 + public MsgType getMsgType() {
  36 + return MsgType.DEVICE_ACTOR_TO_RULE_ENGINE_MSG;
  37 + }
  38 +}
  1 +/**
  2 + * Copyright © 2016-2018 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.actors.device;
  17 +
  18 +import lombok.Data;
  19 +import org.thingsboard.server.common.data.id.SessionId;
  20 +import org.thingsboard.server.common.msg.cluster.ServerAddress;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  22 +
  23 +import java.util.Optional;
  24 +
  25 +/**
  26 + * Created by ashvayka on 17.04.18.
  27 + */
  28 +@Data
  29 +public final class PendingSessionMsgData {
  30 +
  31 + private final SessionId sessionId;
  32 + private final Optional<ServerAddress> serverAddress;
  33 + private final SessionMsgType sessionMsgType;
  34 + private final int requestId;
  35 +
  36 +}
  1 +/**
  2 + * Copyright © 2016-2018 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.actors.device;
  17 +
  18 +import lombok.Data;
  19 +import org.thingsboard.server.common.msg.MsgType;
  20 +import org.thingsboard.server.common.msg.TbActorMsg;
  21 +
  22 +import java.util.UUID;
  23 +
  24 +/**
  25 + * Created by ashvayka on 15.03.18.
  26 + */
  27 +@Data
  28 +public final class RuleEngineQueuePutAckMsg implements TbActorMsg {
  29 +
  30 + private final UUID id;
  31 +
  32 + @Override
  33 + public MsgType getMsgType() {
  34 + return MsgType.RULE_ENGINE_QUEUE_PUT_ACK_MSG;
  35 + }
  36 +}
@@ -16,13 +16,13 @@ @@ -16,13 +16,13 @@
16 package org.thingsboard.server.actors.device; 16 package org.thingsboard.server.actors.device;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; 19 +import org.thingsboard.server.service.rpc.ToDeviceRpcRequestMsg;
20 20
21 /** 21 /**
22 * @author Andrew Shvayka 22 * @author Andrew Shvayka
23 */ 23 */
24 @Data 24 @Data
25 public class ToDeviceRpcRequestMetadata { 25 public class ToDeviceRpcRequestMetadata {
26 - private final ToDeviceRpcRequestPluginMsg msg; 26 + private final ToDeviceRpcRequestMsg msg;
27 private final boolean sent; 27 private final boolean sent;
28 } 28 }
@@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.TenantId;
26 import org.thingsboard.server.common.msg.TbActorMsg; 26 import org.thingsboard.server.common.msg.TbActorMsg;
27 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 27 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
28 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; 28 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
29 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; 29 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
30 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; 30 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
31 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; 31 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
32 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; 32 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
@@ -153,6 +153,7 @@ public class PluginActor extends ComponentActor<PluginId, PluginActorMessageProc @@ -153,6 +153,7 @@ public class PluginActor extends ComponentActor<PluginId, PluginActorMessageProc
153 153
154 @Override 154 @Override
155 protected long getErrorPersistFrequency() { 155 protected long getErrorPersistFrequency() {
156 - return systemContext.getPluginErrorPersistFrequency(); 156 + return 0;
  157 +// return systemContext.getPluginErrorPersistFrequency();
157 } 158 }
158 } 159 }
@@ -30,13 +30,14 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; @@ -30,13 +30,14 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
30 import org.thingsboard.server.common.msg.cluster.ServerAddress; 30 import org.thingsboard.server.common.msg.cluster.ServerAddress;
31 import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse; 31 import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
32 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 32 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
33 -import org.thingsboard.server.common.msg.session.MsgType; 33 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  34 +import org.thingsboard.server.common.msg.session.SessionMsgType;
34 import org.thingsboard.server.extensions.api.plugins.Plugin; 35 import org.thingsboard.server.extensions.api.plugins.Plugin;
35 import org.thingsboard.server.extensions.api.plugins.PluginInitializationException; 36 import org.thingsboard.server.extensions.api.plugins.PluginInitializationException;
36 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 37 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
37 import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg; 38 import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg;
38 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 39 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
39 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; 40 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
40 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; 41 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
41 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; 42 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
42 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; 43 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
@@ -108,7 +109,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId> @@ -108,7 +109,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId>
108 } catch (Exception ex) { 109 } catch (Exception ex) {
109 logger.debug("[{}] Failed to process RuleToPlugin msg: [{}] [{}]", tenantId, msg.getMsg(), ex); 110 logger.debug("[{}] Failed to process RuleToPlugin msg: [{}] [{}]", tenantId, msg.getMsg(), ex);
110 RuleToPluginMsg ruleMsg = msg.getMsg(); 111 RuleToPluginMsg ruleMsg = msg.getMsg();
111 - MsgType responceMsgType = MsgType.RULE_ENGINE_ERROR; 112 + SessionMsgType responceMsgType = SessionMsgType.RULE_ENGINE_ERROR;
112 Integer requestId = 0; 113 Integer requestId = 0;
113 if (ruleMsg.getPayload() instanceof FromDeviceRequestMsg) { 114 if (ruleMsg.getPayload() instanceof FromDeviceRequestMsg) {
114 requestId = ((FromDeviceRequestMsg) ruleMsg.getPayload()).getRequestId(); 115 requestId = ((FromDeviceRequestMsg) ruleMsg.getPayload()).getRequestId();
@@ -216,7 +217,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId> @@ -216,7 +217,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId>
216 @Override 217 @Override
217 public void onStop(ActorContext context) { 218 public void onStop(ActorContext context) {
218 onStop(); 219 onStop();
219 - scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay()); 220 +// scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay());
220 } 221 }
221 222
222 private void onStop() { 223 private void onStop() {
@@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.rule.RuleChain; @@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.rule.RuleChain;
41 import org.thingsboard.server.common.data.rule.RuleMetaData; 41 import org.thingsboard.server.common.data.rule.RuleMetaData;
42 import org.thingsboard.server.common.msg.cluster.ServerAddress; 42 import org.thingsboard.server.common.msg.cluster.ServerAddress;
43 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 43 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
  44 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
44 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; 45 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
45 import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; 46 import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext;
46 import org.thingsboard.server.extensions.api.plugins.PluginCallback; 47 import org.thingsboard.server.extensions.api.plugins.PluginCallback;
@@ -19,10 +19,12 @@ import akka.actor.ActorRef; @@ -19,10 +19,12 @@ import akka.actor.ActorRef;
19 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
20 import org.thingsboard.server.actors.ActorSystemContext; 20 import org.thingsboard.server.actors.ActorSystemContext;
21 import org.thingsboard.server.common.data.id.DeviceId; 21 import org.thingsboard.server.common.data.id.DeviceId;
  22 +import org.thingsboard.server.common.data.id.PluginId;
22 import org.thingsboard.server.common.data.id.TenantId; 23 import org.thingsboard.server.common.data.id.TenantId;
23 import org.thingsboard.server.common.msg.cluster.ServerAddress; 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
  25 +import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
  26 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
24 import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint; 27 import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint;
25 -import org.thingsboard.server.common.data.id.PluginId;  
26 import org.thingsboard.server.dao.asset.AssetService; 28 import org.thingsboard.server.dao.asset.AssetService;
27 import org.thingsboard.server.dao.attributes.AttributesService; 29 import org.thingsboard.server.dao.attributes.AttributesService;
28 import org.thingsboard.server.dao.audit.AuditLogService; 30 import org.thingsboard.server.dao.audit.AuditLogService;
@@ -35,9 +37,6 @@ import org.thingsboard.server.dao.rule.RuleService; @@ -35,9 +37,6 @@ import org.thingsboard.server.dao.rule.RuleService;
35 import org.thingsboard.server.dao.tenant.TenantService; 37 import org.thingsboard.server.dao.tenant.TenantService;
36 import org.thingsboard.server.dao.timeseries.TimeseriesService; 38 import org.thingsboard.server.dao.timeseries.TimeseriesService;
37 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg; 39 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
38 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg;  
39 -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;  
40 -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;  
41 import org.thingsboard.server.service.cluster.routing.ClusterRoutingService; 40 import org.thingsboard.server.service.cluster.routing.ClusterRoutingService;
42 import org.thingsboard.server.service.cluster.rpc.ClusterRpcService; 41 import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
43 import scala.concurrent.duration.Duration; 42 import scala.concurrent.duration.Duration;
@@ -106,8 +105,8 @@ public final class SharedPluginProcessingContext { @@ -106,8 +105,8 @@ public final class SharedPluginProcessingContext {
106 105
107 public void sendRpcRequest(ToDeviceRpcRequest msg) { 106 public void sendRpcRequest(ToDeviceRpcRequest msg) {
108 log.trace("[{}] Forwarding msg {} to device actor!", pluginId, msg); 107 log.trace("[{}] Forwarding msg {} to device actor!", pluginId, msg);
109 - ToDeviceRpcRequestPluginMsg rpcMsg = new ToDeviceRpcRequestPluginMsg(pluginId, tenantId, msg);  
110 - forward(msg.getDeviceId(), rpcMsg, rpcService::tell); 108 +// ToDeviceRpcRequestPluginMsg rpcMsg = new ToDeviceRpcRequestPluginMsg(pluginId, tenantId, msg);
  109 +// forward(msg.getDeviceId(), rpcMsg, rpcService::tell);
111 } 110 }
112 111
113 private <T> void forward(DeviceId deviceId, T msg, BiConsumer<ServerAddress, T> rpcFunction) { 112 private <T> void forward(DeviceId deviceId, T msg, BiConsumer<ServerAddress, T> rpcFunction) {
@@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; @@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
28 import org.thingsboard.server.common.msg.cluster.ServerAddress; 28 import org.thingsboard.server.common.msg.cluster.ServerAddress;
29 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; 29 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
30 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 30 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
31 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 31 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
32 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 32 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
33 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 33 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
34 import org.thingsboard.server.extensions.api.plugins.msg.*; 34 import org.thingsboard.server.extensions.api.plugins.msg.*;
@@ -86,7 +86,7 @@ public class BasicRpcSessionListener implements GrpcSessionListener { @@ -86,7 +86,7 @@ public class BasicRpcSessionListener implements GrpcSessionListener {
86 @Override 86 @Override
87 public void onToDeviceActorRpcMsg(GrpcSession session, ClusterAPIProtos.ToDeviceActorRpcMessage msg) { 87 public void onToDeviceActorRpcMsg(GrpcSession session, ClusterAPIProtos.ToDeviceActorRpcMessage msg) {
88 log.trace("{} session [{}] received device actor msg {}", getType(session), session.getRemoteServer(), msg); 88 log.trace("{} session [{}] received device actor msg {}", getType(session), session.getRemoteServer(), msg);
89 - service.onMsg((ToDeviceActorMsg) deserialize(msg.getData().toByteArray())); 89 + service.onMsg((DeviceToDeviceActorMsg) deserialize(msg.getData().toByteArray()));
90 } 90 }
91 91
92 @Override 92 @Override
1 /** 1 /**
2 * Copyright © 2016-2018 The Thingsboard Authors 2 * Copyright © 2016-2018 The Thingsboard Authors
3 - * 3 + * <p>
4 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License. 5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at 6 * You may obtain a copy of the License at
7 - *  
8 - * http://www.apache.org/licenses/LICENSE-2.0  
9 - * 7 + * <p>
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + * <p>
10 * Unless required by applicable law or agreed to in writing, software 10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, 11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,6 +18,7 @@ package org.thingsboard.server.actors.ruleChain; @@ -18,6 +18,7 @@ package org.thingsboard.server.actors.ruleChain;
18 import akka.actor.OneForOneStrategy; 18 import akka.actor.OneForOneStrategy;
19 import akka.actor.SupervisorStrategy; 19 import akka.actor.SupervisorStrategy;
20 import org.thingsboard.server.actors.ActorSystemContext; 20 import org.thingsboard.server.actors.ActorSystemContext;
  21 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
21 import org.thingsboard.server.actors.service.ComponentActor; 22 import org.thingsboard.server.actors.service.ComponentActor;
22 import org.thingsboard.server.actors.service.ContextBasedCreator; 23 import org.thingsboard.server.actors.service.ContextBasedCreator;
23 import org.thingsboard.server.common.data.id.RuleChainId; 24 import org.thingsboard.server.common.data.id.RuleChainId;
@@ -44,6 +45,9 @@ public class RuleChainActor extends ComponentActor<RuleChainId, RuleChainActorMe @@ -44,6 +45,9 @@ public class RuleChainActor extends ComponentActor<RuleChainId, RuleChainActorMe
44 case SERVICE_TO_RULE_ENGINE_MSG: 45 case SERVICE_TO_RULE_ENGINE_MSG:
45 processor.onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg); 46 processor.onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
46 break; 47 break;
  48 + case DEVICE_ACTOR_TO_RULE_ENGINE_MSG:
  49 + processor.onDeviceActorToRuleEngineMsg((DeviceActorToRuleEngineMsg) msg);
  50 + break;
47 case RULE_TO_RULE_CHAIN_TELL_NEXT_MSG: 51 case RULE_TO_RULE_CHAIN_TELL_NEXT_MSG:
48 processor.onTellNext((RuleNodeToRuleChainTellNextMsg) msg); 52 processor.onTellNext((RuleNodeToRuleChainTellNextMsg) msg);
49 break; 53 break;
1 /** 1 /**
2 * Copyright © 2016-2018 The Thingsboard Authors 2 * Copyright © 2016-2018 The Thingsboard Authors
3 - * 3 + * <p>
4 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License. 5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at 6 * You may obtain a copy of the License at
7 - *  
8 - * http://www.apache.org/licenses/LICENSE-2.0  
9 - * 7 + * <p>
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + * <p>
10 * Unless required by applicable law or agreed to in writing, software 10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, 11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,6 +20,8 @@ import akka.actor.ActorRef; @@ -20,6 +20,8 @@ import akka.actor.ActorRef;
20 import akka.actor.Props; 20 import akka.actor.Props;
21 import akka.event.LoggingAdapter; 21 import akka.event.LoggingAdapter;
22 import org.thingsboard.server.actors.ActorSystemContext; 22 import org.thingsboard.server.actors.ActorSystemContext;
  23 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
  24 +import org.thingsboard.server.actors.device.RuleEngineQueuePutAckMsg;
23 import org.thingsboard.server.actors.service.DefaultActorService; 25 import org.thingsboard.server.actors.service.DefaultActorService;
24 import org.thingsboard.server.actors.shared.ComponentMsgProcessor; 26 import org.thingsboard.server.actors.shared.ComponentMsgProcessor;
25 import org.thingsboard.server.common.data.EntityType; 27 import org.thingsboard.server.common.data.EntityType;
@@ -157,6 +159,14 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh @@ -157,6 +159,14 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
157 pushMsgToNode(firstNode, tbMsg); 159 pushMsgToNode(firstNode, tbMsg);
158 } 160 }
159 161
  162 + public void onDeviceActorToRuleEngineMsg(DeviceActorToRuleEngineMsg envelope) {
  163 + checkActive();
  164 + TbMsg tbMsg = envelope.getTbMsg();
  165 + //TODO: push to queue and act on ack in async way
  166 + pushMsgToNode(firstNode, tbMsg);
  167 + envelope.getCallbackRef().tell(new RuleEngineQueuePutAckMsg(tbMsg.getId()), self);
  168 + }
  169 +
160 void onTellNext(RuleNodeToRuleChainTellNextMsg envelope) { 170 void onTellNext(RuleNodeToRuleChainTellNextMsg envelope) {
161 checkActive(); 171 checkActive();
162 RuleNodeId originator = envelope.getOriginator(); 172 RuleNodeId originator = envelope.getOriginator();
@@ -191,5 +201,4 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh @@ -191,5 +201,4 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
191 nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg), self); 201 nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg), self);
192 } 202 }
193 } 203 }
194 -  
195 } 204 }
@@ -31,31 +31,29 @@ import org.thingsboard.server.dao.rule.RuleChainService; @@ -31,31 +31,29 @@ import org.thingsboard.server.dao.rule.RuleChainService;
31 public abstract class RuleChainManagerActor extends ContextAwareActor { 31 public abstract class RuleChainManagerActor extends ContextAwareActor {
32 32
33 protected final RuleChainManager ruleChainManager; 33 protected final RuleChainManager ruleChainManager;
34 - protected final PluginManager pluginManager;  
35 protected final RuleChainService ruleChainService; 34 protected final RuleChainService ruleChainService;
36 35
37 public RuleChainManagerActor(ActorSystemContext systemContext, RuleChainManager ruleChainManager, PluginManager pluginManager) { 36 public RuleChainManagerActor(ActorSystemContext systemContext, RuleChainManager ruleChainManager, PluginManager pluginManager) {
38 super(systemContext); 37 super(systemContext);
39 this.ruleChainManager = ruleChainManager; 38 this.ruleChainManager = ruleChainManager;
40 - this.pluginManager = pluginManager;  
41 this.ruleChainService = systemContext.getRuleChainService(); 39 this.ruleChainService = systemContext.getRuleChainService();
42 } 40 }
43 41
44 protected void initRuleChains() { 42 protected void initRuleChains() {
45 - pluginManager.init(this.context());  
46 ruleChainManager.init(this.context()); 43 ruleChainManager.init(this.context());
47 } 44 }
48 45
49 protected ActorRef getEntityActorRef(EntityId entityId) { 46 protected ActorRef getEntityActorRef(EntityId entityId) {
50 ActorRef target = null; 47 ActorRef target = null;
51 switch (entityId.getEntityType()) { 48 switch (entityId.getEntityType()) {
52 - case PLUGIN:  
53 - target = pluginManager.getOrCreateActor(this.context(), (PluginId) entityId);  
54 - break;  
55 case RULE_CHAIN: 49 case RULE_CHAIN:
56 target = ruleChainManager.getOrCreateActor(this.context(), (RuleChainId) entityId); 50 target = ruleChainManager.getOrCreateActor(this.context(), (RuleChainId) entityId);
57 break; 51 break;
58 } 52 }
59 return target; 53 return target;
60 } 54 }
  55 +
  56 + protected void broadcast(Object msg) {
  57 + ruleChainManager.broadcast(msg);
  58 + }
61 } 59 }
@@ -39,7 +39,7 @@ import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; @@ -39,7 +39,7 @@ import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
39 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 39 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
40 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg; 40 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
41 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg; 41 import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
42 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 42 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
43 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; 43 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
44 import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg; 44 import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;
45 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 45 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
@@ -156,7 +156,7 @@ public class DefaultActorService implements ActorService { @@ -156,7 +156,7 @@ public class DefaultActorService implements ActorService {
156 } 156 }
157 157
158 @Override 158 @Override
159 - public void onMsg(ToDeviceActorMsg msg) { 159 + public void onMsg(DeviceToDeviceActorMsg msg) {
160 log.trace("Processing device rpc msg: {}", msg); 160 log.trace("Processing device rpc msg: {}", msg);
161 appActor.tell(msg, ActorRef.noSender()); 161 appActor.tell(msg, ActorRef.noSender());
162 } 162 }
@@ -22,12 +22,11 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; @@ -22,12 +22,11 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
22 import org.thingsboard.server.common.msg.cluster.ServerAddress; 22 import org.thingsboard.server.common.msg.cluster.ServerAddress;
23 import org.thingsboard.server.common.msg.core.*; 23 import org.thingsboard.server.common.msg.core.*;
24 import org.thingsboard.server.common.msg.core.SessionCloseMsg; 24 import org.thingsboard.server.common.msg.core.SessionCloseMsg;
25 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 25 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
26 import org.thingsboard.server.common.msg.session.*; 26 import org.thingsboard.server.common.msg.session.*;
27 27
28 import akka.actor.ActorContext; 28 import akka.actor.ActorContext;
29 import akka.event.LoggingAdapter; 29 import akka.event.LoggingAdapter;
30 -import org.thingsboard.server.common.msg.session.ctrl.*;  
31 import org.thingsboard.server.common.msg.session.ex.SessionException; 30 import org.thingsboard.server.common.msg.session.ex.SessionException;
32 31
33 import java.util.HashMap; 32 import java.util.HashMap;
@@ -37,7 +36,7 @@ import java.util.Optional; @@ -37,7 +36,7 @@ import java.util.Optional;
37 class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { 36 class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
38 37
39 private boolean firstMsg = true; 38 private boolean firstMsg = true;
40 - private Map<Integer, ToDeviceActorMsg> pendingMap = new HashMap<>(); 39 + private Map<Integer, DeviceToDeviceActorMsg> pendingMap = new HashMap<>();
41 private Optional<ServerAddress> currentTargetServer; 40 private Optional<ServerAddress> currentTargetServer;
42 private boolean subscribedToAttributeUpdates; 41 private boolean subscribedToAttributeUpdates;
43 private boolean subscribedToRpcCommands; 42 private boolean subscribedToRpcCommands;
@@ -53,7 +52,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { @@ -53,7 +52,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
53 toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m)); 52 toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m));
54 firstMsg = false; 53 firstMsg = false;
55 } 54 }
56 - ToDeviceActorMsg pendingMsg = toDeviceMsg(msg); 55 + DeviceToDeviceActorMsg pendingMsg = toDeviceMsg(msg);
57 FromDeviceMsg fromDeviceMsg = pendingMsg.getPayload(); 56 FromDeviceMsg fromDeviceMsg = pendingMsg.getPayload();
58 switch (fromDeviceMsg.getMsgType()) { 57 switch (fromDeviceMsg.getMsgType()) {
59 case POST_TELEMETRY_REQUEST: 58 case POST_TELEMETRY_REQUEST:
@@ -86,8 +85,8 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor { @@ -86,8 +85,8 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
86 @Override 85 @Override
87 public void processToDeviceMsg(ActorContext context, ToDeviceMsg msg) { 86 public void processToDeviceMsg(ActorContext context, ToDeviceMsg msg) {
88 try { 87 try {
89 - if (msg.getMsgType() != MsgType.SESSION_CLOSE) {  
90 - switch (msg.getMsgType()) { 88 + if (msg.getSessionMsgType() != SessionMsgType.SESSION_CLOSE) {
  89 + switch (msg.getSessionMsgType()) {
91 case STATUS_CODE_RESPONSE: 90 case STATUS_CODE_RESPONSE:
92 case GET_ATTRIBUTES_RESPONSE: 91 case GET_ATTRIBUTES_RESPONSE:
93 ResponseMsg responseMsg = (ResponseMsg) msg; 92 ResponseMsg responseMsg = (ResponseMsg) msg;
@@ -22,8 +22,8 @@ import org.thingsboard.server.common.data.id.DeviceId; @@ -22,8 +22,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
22 import org.thingsboard.server.common.data.id.SessionId; 22 import org.thingsboard.server.common.data.id.SessionId;
23 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 23 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
24 import org.thingsboard.server.common.msg.cluster.ServerAddress; 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
25 -import org.thingsboard.server.common.msg.device.BasicToDeviceActorMsg;  
26 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 25 +import org.thingsboard.server.common.msg.device.BasicDeviceToDeviceActorMsg;
  26 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
27 import org.thingsboard.server.common.msg.session.*; 27 import org.thingsboard.server.common.msg.session.*;
28 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; 28 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
29 29
@@ -37,7 +37,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -37,7 +37,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
37 37
38 protected final SessionId sessionId; 38 protected final SessionId sessionId;
39 protected SessionContext sessionCtx; 39 protected SessionContext sessionCtx;
40 - protected ToDeviceActorMsg toDeviceActorMsgPrototype; 40 + protected DeviceToDeviceActorMsg deviceToDeviceActorMsgPrototype;
41 41
42 protected AbstractSessionActorMsgProcessor(ActorSystemContext ctx, LoggingAdapter logger, SessionId sessionId) { 42 protected AbstractSessionActorMsgProcessor(ActorSystemContext ctx, LoggingAdapter logger, SessionId sessionId) {
43 super(ctx, logger); 43 super(ctx, logger);
@@ -64,29 +64,29 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -64,29 +64,29 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
64 64
65 protected void updateSessionCtx(ToDeviceActorSessionMsg msg, SessionType type) { 65 protected void updateSessionCtx(ToDeviceActorSessionMsg msg, SessionType type) {
66 sessionCtx = msg.getSessionMsg().getSessionContext(); 66 sessionCtx = msg.getSessionMsg().getSessionContext();
67 - toDeviceActorMsgPrototype = new BasicToDeviceActorMsg(msg, type); 67 + deviceToDeviceActorMsgPrototype = new BasicDeviceToDeviceActorMsg(msg, type);
68 } 68 }
69 69
70 - protected ToDeviceActorMsg toDeviceMsg(ToDeviceActorSessionMsg msg) { 70 + protected DeviceToDeviceActorMsg toDeviceMsg(ToDeviceActorSessionMsg msg) {
71 AdaptorToSessionActorMsg adaptorMsg = msg.getSessionMsg(); 71 AdaptorToSessionActorMsg adaptorMsg = msg.getSessionMsg();
72 - return new BasicToDeviceActorMsg(toDeviceActorMsgPrototype, adaptorMsg.getMsg()); 72 + return new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, adaptorMsg.getMsg());
73 } 73 }
74 74
75 - protected Optional<ToDeviceActorMsg> toDeviceMsg(FromDeviceMsg msg) {  
76 - if (toDeviceActorMsgPrototype != null) {  
77 - return Optional.of(new BasicToDeviceActorMsg(toDeviceActorMsgPrototype, msg)); 75 + protected Optional<DeviceToDeviceActorMsg> toDeviceMsg(FromDeviceMsg msg) {
  76 + if (deviceToDeviceActorMsgPrototype != null) {
  77 + return Optional.of(new BasicDeviceToDeviceActorMsg(deviceToDeviceActorMsgPrototype, msg));
78 } else { 78 } else {
79 return Optional.empty(); 79 return Optional.empty();
80 } 80 }
81 } 81 }
82 82
83 - protected Optional<ServerAddress> forwardToAppActor(ActorContext ctx, ToDeviceActorMsg toForward) { 83 + protected Optional<ServerAddress> forwardToAppActor(ActorContext ctx, DeviceToDeviceActorMsg toForward) {
84 Optional<ServerAddress> address = systemContext.getRoutingService().resolveById(toForward.getDeviceId()); 84 Optional<ServerAddress> address = systemContext.getRoutingService().resolveById(toForward.getDeviceId());
85 forwardToAppActor(ctx, toForward, address); 85 forwardToAppActor(ctx, toForward, address);
86 return address; 86 return address;
87 } 87 }
88 88
89 - protected Optional<ServerAddress> forwardToAppActorIfAdressChanged(ActorContext ctx, ToDeviceActorMsg toForward, Optional<ServerAddress> oldAddress) { 89 + protected Optional<ServerAddress> forwardToAppActorIfAdressChanged(ActorContext ctx, DeviceToDeviceActorMsg toForward, Optional<ServerAddress> oldAddress) {
90 Optional<ServerAddress> newAddress = systemContext.getRoutingService().resolveById(toForward.getDeviceId()); 90 Optional<ServerAddress> newAddress = systemContext.getRoutingService().resolveById(toForward.getDeviceId());
91 if (!newAddress.equals(oldAddress)) { 91 if (!newAddress.equals(oldAddress)) {
92 if (newAddress.isPresent()) { 92 if (newAddress.isPresent()) {
@@ -99,7 +99,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -99,7 +99,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
99 return newAddress; 99 return newAddress;
100 } 100 }
101 101
102 - protected void forwardToAppActor(ActorContext ctx, ToDeviceActorMsg toForward, Optional<ServerAddress> address) { 102 + protected void forwardToAppActor(ActorContext ctx, DeviceToDeviceActorMsg toForward, Optional<ServerAddress> address) {
103 if (address.isPresent()) { 103 if (address.isPresent()) {
104 systemContext.getRpcService().tell(address.get(), 104 systemContext.getRpcService().tell(address.get(),
105 toForward.toOtherAddress(systemContext.getRoutingService().getCurrentServer())); 105 toForward.toOtherAddress(systemContext.getRoutingService().getCurrentServer()));
@@ -114,6 +114,6 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP @@ -114,6 +114,6 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
114 } 114 }
115 115
116 public DeviceId getDeviceId() { 116 public DeviceId getDeviceId() {
117 - return toDeviceActorMsgPrototype.getDeviceId(); 117 + return deviceToDeviceActorMsgPrototype.getDeviceId();
118 } 118 }
119 } 119 }
@@ -20,7 +20,7 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg; @@ -20,7 +20,7 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
20 import org.thingsboard.server.common.data.id.SessionId; 20 import org.thingsboard.server.common.data.id.SessionId;
21 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg; 21 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
22 import org.thingsboard.server.common.msg.cluster.ServerAddress; 22 import org.thingsboard.server.common.msg.cluster.ServerAddress;
23 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 23 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.common.msg.session.*; 24 import org.thingsboard.server.common.msg.session.*;
25 import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; 25 import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg;
26 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg; 26 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
@@ -32,7 +32,7 @@ import akka.event.LoggingAdapter; @@ -32,7 +32,7 @@ import akka.event.LoggingAdapter;
32 import java.util.Optional; 32 import java.util.Optional;
33 33
34 class SyncMsgProcessor extends AbstractSessionActorMsgProcessor { 34 class SyncMsgProcessor extends AbstractSessionActorMsgProcessor {
35 - private ToDeviceActorMsg pendingMsg; 35 + private DeviceToDeviceActorMsg pendingMsg;
36 private Optional<ServerAddress> currentTargetServer; 36 private Optional<ServerAddress> currentTargetServer;
37 private boolean pendingResponse; 37 private boolean pendingResponse;
38 38
@@ -17,10 +17,9 @@ package org.thingsboard.server.actors.tenant; @@ -17,10 +17,9 @@ package org.thingsboard.server.actors.tenant;
17 17
18 import akka.actor.ActorRef; 18 import akka.actor.ActorRef;
19 import akka.actor.Props; 19 import akka.actor.Props;
20 -import akka.event.Logging;  
21 -import akka.event.LoggingAdapter;  
22 import org.thingsboard.server.actors.ActorSystemContext; 20 import org.thingsboard.server.actors.ActorSystemContext;
23 import org.thingsboard.server.actors.device.DeviceActor; 21 import org.thingsboard.server.actors.device.DeviceActor;
  22 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
24 import org.thingsboard.server.actors.plugin.PluginTerminationMsg; 23 import org.thingsboard.server.actors.plugin.PluginTerminationMsg;
25 import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor; 24 import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor;
26 import org.thingsboard.server.actors.service.ContextBasedCreator; 25 import org.thingsboard.server.actors.service.ContextBasedCreator;
@@ -30,7 +29,8 @@ import org.thingsboard.server.actors.shared.rulechain.TenantRuleChainManager; @@ -30,7 +29,8 @@ import org.thingsboard.server.actors.shared.rulechain.TenantRuleChainManager;
30 import org.thingsboard.server.common.data.id.DeviceId; 29 import org.thingsboard.server.common.data.id.DeviceId;
31 import org.thingsboard.server.common.data.id.TenantId; 30 import org.thingsboard.server.common.data.id.TenantId;
32 import org.thingsboard.server.common.msg.TbActorMsg; 31 import org.thingsboard.server.common.msg.TbActorMsg;
33 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 32 +import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
  33 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
34 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg; 34 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
35 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg; 35 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
36 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 36 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
@@ -64,63 +64,47 @@ public class TenantActor extends RuleChainManagerActor { @@ -64,63 +64,47 @@ public class TenantActor extends RuleChainManagerActor {
64 @Override 64 @Override
65 protected boolean process(TbActorMsg msg) { 65 protected boolean process(TbActorMsg msg) {
66 switch (msg.getMsgType()) { 66 switch (msg.getMsgType()) {
  67 + case CLUSTER_EVENT_MSG:
  68 + broadcast(msg);
  69 + break;
67 case COMPONENT_LIFE_CYCLE_MSG: 70 case COMPONENT_LIFE_CYCLE_MSG:
68 onComponentLifecycleMsg((ComponentLifecycleMsg) msg); 71 onComponentLifecycleMsg((ComponentLifecycleMsg) msg);
69 break; 72 break;
70 case SERVICE_TO_RULE_ENGINE_MSG: 73 case SERVICE_TO_RULE_ENGINE_MSG:
71 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg); 74 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
72 break; 75 break;
  76 + case DEVICE_ACTOR_TO_RULE_ENGINE_MSG:
  77 + onDeviceActorToRuleEngineMsg((DeviceActorToRuleEngineMsg) msg);
  78 + break;
  79 + case DEVICE_SESSION_TO_DEVICE_ACTOR_MSG:
  80 + case DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG:
  81 + case DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG:
  82 + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG:
  83 + case DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG:
  84 + onToDeviceActorMsg((DeviceToDeviceActorMsg) msg);
  85 + break;
73 default: 86 default:
74 return false; 87 return false;
75 } 88 }
76 return true; 89 return true;
77 } 90 }
78 91
79 - private void onServiceToRuleEngineMsg(ServiceToRuleEngineMsg msg) {  
80 - ruleChainManager.getRootChainActor().tell(msg, self());  
81 - }  
82 -  
83 -  
84 -// @Override  
85 -// public void onReceive(Object msg) throws Exception {  
86 -// logger.debug("[{}] Received message: {}", tenantId, msg);  
87 -// if (msg instanceof ToDeviceActorMsg) {  
88 -// onToDeviceActorMsg((ToDeviceActorMsg) msg);  
89 -// } else if (msg instanceof ToPluginActorMsg) {  
90 -// onToPluginMsg((ToPluginActorMsg) msg);  
91 -// } else if (msg instanceof ToDeviceActorNotificationMsg) {  
92 -// onToDeviceActorMsg((ToDeviceActorNotificationMsg) msg);  
93 -// } else if (msg instanceof ClusterEventMsg) {  
94 -// broadcast(msg);  
95 -// } else if (msg instanceof ComponentLifecycleMsg) {  
96 -// onComponentLifecycleMsg((ComponentLifecycleMsg) msg);  
97 -// } else if (msg instanceof PluginTerminationMsg) {  
98 -// onPluginTerminated((PluginTerminationMsg) msg);  
99 -// } else {  
100 -// logger.warning("[{}] Unknown message: {}!", tenantId, msg);  
101 -// }  
102 -// }  
103 -  
104 - private void broadcast(Object msg) {  
105 - pluginManager.broadcast(msg); 92 + @Override
  93 + protected void broadcast(Object msg) {
  94 + super.broadcast(msg);
106 deviceActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender())); 95 deviceActors.values().forEach(actorRef -> actorRef.tell(msg, ActorRef.noSender()));
107 } 96 }
108 97
109 - private void onToDeviceActorMsg(ToDeviceActorMsg msg) {  
110 - getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender()); 98 + private void onServiceToRuleEngineMsg(ServiceToRuleEngineMsg msg) {
  99 + ruleChainManager.getRootChainActor().tell(msg, self());
111 } 100 }
112 101
113 - private void onToDeviceActorMsg(ToDeviceActorNotificationMsg msg) {  
114 - getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender()); 102 + private void onDeviceActorToRuleEngineMsg(DeviceActorToRuleEngineMsg msg) {
  103 + ruleChainManager.getRootChainActor().tell(msg, self());
115 } 104 }
116 105
117 - private void onToPluginMsg(ToPluginActorMsg msg) {  
118 - if (msg.getPluginTenantId().equals(tenantId)) {  
119 - ActorRef pluginActor = pluginManager.getOrCreateActor(this.context(), msg.getPluginId());  
120 - pluginActor.tell(msg, ActorRef.noSender());  
121 - } else {  
122 - context().parent().tell(msg, ActorRef.noSender());  
123 - } 106 + private void onToDeviceActorMsg(DeviceAwareMsg msg) {
  107 + getOrCreateDeviceActor(msg.getDeviceId()).tell(msg, ActorRef.noSender());
124 } 108 }
125 109
126 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) { 110 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) {
@@ -132,11 +116,6 @@ public class TenantActor extends RuleChainManagerActor { @@ -132,11 +116,6 @@ public class TenantActor extends RuleChainManagerActor {
132 } 116 }
133 } 117 }
134 118
135 - private void onPluginTerminated(PluginTerminationMsg msg) {  
136 - pluginManager.remove(msg.getId());  
137 - }  
138 -  
139 -  
140 private ActorRef getOrCreateDeviceActor(DeviceId deviceId) { 119 private ActorRef getOrCreateDeviceActor(DeviceId deviceId) {
141 return deviceActors.computeIfAbsent(deviceId, k -> context().actorOf(Props.create(new DeviceActor.ActorCreator(systemContext, tenantId, deviceId)) 120 return deviceActors.computeIfAbsent(deviceId, k -> context().actorOf(Props.create(new DeviceActor.ActorCreator(systemContext, tenantId, deviceId))
142 .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), deviceId.toString())); 121 .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), deviceId.toString()));
@@ -131,8 +131,8 @@ public class ThingsboardInstallService { @@ -131,8 +131,8 @@ public class ThingsboardInstallService {
131 systemDataLoaderService.createSysAdmin(); 131 systemDataLoaderService.createSysAdmin();
132 systemDataLoaderService.createAdminSettings(); 132 systemDataLoaderService.createAdminSettings();
133 systemDataLoaderService.loadSystemWidgets(); 133 systemDataLoaderService.loadSystemWidgets();
134 - systemDataLoaderService.loadSystemPlugins();  
135 - systemDataLoaderService.loadSystemRules(); 134 +// systemDataLoaderService.loadSystemPlugins();
  135 +// systemDataLoaderService.loadSystemRules();
136 136
137 if (loadDemo) { 137 if (loadDemo) {
138 log.info("Loading demo data..."); 138 log.info("Loading demo data...");
@@ -30,11 +30,10 @@ import org.thingsboard.server.common.data.id.EntityId; @@ -30,11 +30,10 @@ import org.thingsboard.server.common.data.id.EntityId;
30 import org.thingsboard.server.common.msg.cluster.ServerAddress; 30 import org.thingsboard.server.common.msg.cluster.ServerAddress;
31 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; 31 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
32 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 32 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
33 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 33 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
34 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 34 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
35 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 35 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
36 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 36 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
37 -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;  
38 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; 37 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
39 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; 38 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
40 import org.thingsboard.server.gen.cluster.ClusterAPIProtos; 39 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
@@ -119,7 +118,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI @@ -119,7 +118,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI
119 } 118 }
120 119
121 @Override 120 @Override
122 - public void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward) { 121 + public void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward) {
123 ClusterAPIProtos.ToRpcServerMessage msg = ClusterAPIProtos.ToRpcServerMessage.newBuilder() 122 ClusterAPIProtos.ToRpcServerMessage msg = ClusterAPIProtos.ToRpcServerMessage.newBuilder()
124 .setToDeviceActorRpcMsg(toProtoMsg(toForward)).build(); 123 .setToDeviceActorRpcMsg(toProtoMsg(toForward)).build();
125 tell(serverAddress, msg); 124 tell(serverAddress, msg);
@@ -185,7 +184,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI @@ -185,7 +184,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI
185 } 184 }
186 } 185 }
187 186
188 - private static ClusterAPIProtos.ToDeviceActorRpcMessage toProtoMsg(ToDeviceActorMsg msg) { 187 + private static ClusterAPIProtos.ToDeviceActorRpcMessage toProtoMsg(DeviceToDeviceActorMsg msg) {
189 return ClusterAPIProtos.ToDeviceActorRpcMessage.newBuilder().setData( 188 return ClusterAPIProtos.ToDeviceActorRpcMessage.newBuilder().setData(
190 ByteString.copyFrom(SerializationUtils.serialize(msg)) 189 ByteString.copyFrom(SerializationUtils.serialize(msg))
191 ).build(); 190 ).build();
@@ -19,10 +19,8 @@ import io.grpc.stub.StreamObserver; @@ -19,10 +19,8 @@ import io.grpc.stub.StreamObserver;
19 import org.thingsboard.server.common.msg.cluster.ServerAddress; 19 import org.thingsboard.server.common.msg.cluster.ServerAddress;
20 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; 20 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
21 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 21 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
22 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg;  
23 -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 22 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 23 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
25 -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;  
26 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; 24 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
27 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg; 25 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
28 import org.thingsboard.server.gen.cluster.ClusterAPIProtos; 26 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
@@ -37,7 +35,7 @@ public interface ClusterRpcService { @@ -37,7 +35,7 @@ public interface ClusterRpcService {
37 35
38 void init(RpcMsgListener listener); 36 void init(RpcMsgListener listener);
39 37
40 - void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward); 38 + void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward);
41 39
42 void tell(ServerAddress serverAddress, ToDeviceSessionActorMsg toForward); 40 void tell(ServerAddress serverAddress, ToDeviceSessionActorMsg toForward);
43 41
@@ -20,18 +20,16 @@ import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg; @@ -20,18 +20,16 @@ import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg;
20 import org.thingsboard.server.actors.rpc.RpcSessionTellMsg; 20 import org.thingsboard.server.actors.rpc.RpcSessionTellMsg;
21 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg; 21 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
22 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg; 22 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
23 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 23 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 24 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
25 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg; 25 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg;
26 -import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;  
27 -import org.thingsboard.server.gen.cluster.ClusterAPIProtos;  
28 26
29 /** 27 /**
30 * @author Andrew Shvayka 28 * @author Andrew Shvayka
31 */ 29 */
32 public interface RpcMsgListener { 30 public interface RpcMsgListener {
33 31
34 - void onMsg(ToDeviceActorMsg msg); 32 + void onMsg(DeviceToDeviceActorMsg msg);
35 33
36 void onMsg(ToDeviceActorNotificationMsg msg); 34 void onMsg(ToDeviceActorNotificationMsg msg);
37 35
@@ -181,7 +181,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { @@ -181,7 +181,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService {
181 181
182 @Override 182 @Override
183 public void loadSystemPlugins() throws Exception { 183 public void loadSystemPlugins() throws Exception {
184 - loadPlugins(Paths.get(dataDir, JSON_DIR, SYSTEM_DIR, PLUGINS_DIR), null); 184 +// loadPlugins(Paths.get(dataDir, JSON_DIR, SYSTEM_DIR, PLUGINS_DIR), null);
185 } 185 }
186 186
187 187
@@ -227,7 +227,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService { @@ -227,7 +227,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService {
227 createDevice(demoTenant.getId(), null, DEFAULT_DEVICE_TYPE, "Raspberry Pi Demo Device", "RASPBERRY_PI_DEMO_TOKEN", "Demo device that is used in " + 227 createDevice(demoTenant.getId(), null, DEFAULT_DEVICE_TYPE, "Raspberry Pi Demo Device", "RASPBERRY_PI_DEMO_TOKEN", "Demo device that is used in " +
228 "Raspberry Pi GPIO control sample application"); 228 "Raspberry Pi GPIO control sample application");
229 229
230 - loadPlugins(Paths.get(dataDir, JSON_DIR, DEMO_DIR, PLUGINS_DIR), demoTenant.getId()); 230 +// loadPlugins(Paths.get(dataDir, JSON_DIR, DEMO_DIR, PLUGINS_DIR), demoTenant.getId());
231 // loadRules(Paths.get(dataDir, JSON_DIR, DEMO_DIR, RULES_DIR), demoTenant.getId()); 231 // loadRules(Paths.get(dataDir, JSON_DIR, DEMO_DIR, RULES_DIR), demoTenant.getId());
232 loadDashboards(Paths.get(dataDir, JSON_DIR, DEMO_DIR, DASHBOARDS_DIR), demoTenant.getId(), null); 232 loadDashboards(Paths.get(dataDir, JSON_DIR, DEMO_DIR, DASHBOARDS_DIR), demoTenant.getId(), null);
233 } 233 }
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.service.rpc; 16 package org.thingsboard.server.service.rpc;
17 17
  18 +import akka.actor.ActorRef;
18 import com.fasterxml.jackson.databind.ObjectMapper; 19 import com.fasterxml.jackson.databind.ObjectMapper;
19 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
20 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
@@ -105,7 +106,19 @@ public class DefaultDeviceRpcService implements DeviceRpcService { @@ -105,7 +106,19 @@ public class DefaultDeviceRpcService implements DeviceRpcService {
105 } 106 }
106 107
107 @Override 108 @Override
  109 + public void process(ToDeviceRpcRequest request, ServerAddress originator) {
  110 +// if (pluginServerAddress.isPresent()) {
  111 +// systemContext.getRpcService().tell(pluginServerAddress.get(), responsePluginMsg);
  112 +// logger.debug("[{}] Rpc command response sent to remote plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId());
  113 +// } else {
  114 +// context.parent().tell(responsePluginMsg, ActorRef.noSender());
  115 +// logger.debug("[{}] Rpc command response sent to local plugin actor [{}]!", deviceId, requestMd.getMsg().getMsg().getId());
  116 +// }
  117 + }
  118 +
  119 + @Override
108 public void process(FromDeviceRpcResponse response) { 120 public void process(FromDeviceRpcResponse response) {
  121 + //TODO: send to another server if needed.
109 UUID requestId = response.getId(); 122 UUID requestId = response.getId();
110 LocalRequestMetaData md = localRpcRequests.remove(requestId); 123 LocalRequestMetaData md = localRpcRequests.remove(requestId);
111 if (md != null) { 124 if (md != null) {
@@ -17,6 +17,7 @@ package org.thingsboard.server.service.rpc; @@ -17,6 +17,7 @@ package org.thingsboard.server.service.rpc;
17 17
18 import org.thingsboard.server.common.data.id.EntityId; 18 import org.thingsboard.server.common.data.id.EntityId;
19 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; 19 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
  20 +import org.thingsboard.server.common.msg.cluster.ServerAddress;
20 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 21 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
21 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
22 import org.thingsboard.server.extensions.api.plugins.msg.RpcError; 23 import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
@@ -31,6 +32,8 @@ public interface DeviceRpcService { @@ -31,6 +32,8 @@ public interface DeviceRpcService {
31 32
32 void process(ToDeviceRpcRequest request, LocalRequestMetaData metaData); 33 void process(ToDeviceRpcRequest request, LocalRequestMetaData metaData);
33 34
  35 + void process(ToDeviceRpcRequest request, ServerAddress originator);
  36 +
34 void process(FromDeviceRpcResponse response); 37 void process(FromDeviceRpcResponse response);
35 38
36 void logRpcCall(SecurityUser user, EntityId entityId, ToDeviceRpcRequestBody body, boolean oneWay, Optional<RpcError> rpcError, Throwable e); 39 void logRpcCall(SecurityUser user, EntityId entityId, ToDeviceRpcRequestBody body, boolean oneWay, Optional<RpcError> rpcError, Throwable e);
@@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor; @@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor;
20 import lombok.ToString; 20 import lombok.ToString;
21 import org.thingsboard.server.common.data.id.DeviceId; 21 import org.thingsboard.server.common.data.id.DeviceId;
22 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.common.msg.MsgType;
23 import org.thingsboard.server.common.msg.cluster.ServerAddress; 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
24 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 25 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
25 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg; 26 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
@@ -54,4 +55,9 @@ public class ToDeviceRpcRequestMsg implements ToDeviceActorNotificationMsg { @@ -54,4 +55,9 @@ public class ToDeviceRpcRequestMsg implements ToDeviceActorNotificationMsg {
54 public TenantId getTenantId() { 55 public TenantId getTenantId() {
55 return msg.getTenantId(); 56 return msg.getTenantId();
56 } 57 }
  58 +
  59 + @Override
  60 + public MsgType getMsgType() {
  61 + return MsgType.DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG;
  62 + }
57 } 63 }
@@ -207,18 +207,7 @@ actors: @@ -207,18 +207,7 @@ actors:
207 sync: 207 sync:
208 # Default timeout for processing request using synchronous session (HTTP, CoAP) in milliseconds 208 # Default timeout for processing request using synchronous session (HTTP, CoAP) in milliseconds
209 timeout: "${ACTORS_SESSION_SYNC_TIMEOUT:10000}" 209 timeout: "${ACTORS_SESSION_SYNC_TIMEOUT:10000}"
210 - plugin:  
211 - # Default timeout for termination of the plugin actor after it is stopped  
212 - termination.delay: "${ACTORS_PLUGIN_TERMINATION_DELAY:60000}"  
213 - # Default timeout for processing of particular message by particular plugin  
214 - processing.timeout: "${ACTORS_PLUGIN_TIMEOUT:60000}"  
215 - # Errors for particular actor are persisted once per specified amount of milliseconds  
216 - error_persist_frequency: "${ACTORS_PLUGIN_ERROR_FREQUENCY:3000}"  
217 rule: 210 rule:
218 - # Default timeout for termination of the rule actor after it is stopped  
219 - termination.delay: "${ACTORS_RULE_TERMINATION_DELAY:30000}"  
220 - # Errors for particular actor are persisted once per specified amount of milliseconds  
221 - error_persist_frequency: "${ACTORS_RULE_ERROR_FREQUENCY:3000}"  
222 # Specify thread pool size for database request callbacks executor service 211 # Specify thread pool size for database request callbacks executor service
223 db_callback_thread_pool_size: "${ACTORS_RULE_DB_CALLBACK_THREAD_POOL_SIZE:1}" 212 db_callback_thread_pool_size: "${ACTORS_RULE_DB_CALLBACK_THREAD_POOL_SIZE:1}"
224 # Specify thread pool size for javascript executor service 213 # Specify thread pool size for javascript executor service
@@ -235,6 +224,11 @@ actors: @@ -235,6 +224,11 @@ actors:
235 # Enable/disable actor statistics 224 # Enable/disable actor statistics
236 enabled: "${ACTORS_STATISTICS_ENABLED:true}" 225 enabled: "${ACTORS_STATISTICS_ENABLED:true}"
237 persist_frequency: "${ACTORS_STATISTICS_PERSIST_FREQUENCY:3600000}" 226 persist_frequency: "${ACTORS_STATISTICS_PERSIST_FREQUENCY:3600000}"
  227 + queue:
  228 + # Enable/disable persistence of un-processed messages to the queue
  229 + enabled: "${ACTORS_QUEUE_ENABLED:true}"
  230 + # Maximum allowed timeout for persistence into the queue
  231 + timeout: "${ACTORS_QUEUE_PERSISTENCE_TIMEOUT:30000}"
238 232
239 cache: 233 cache:
240 # caffeine or redis 234 # caffeine or redis
@@ -18,27 +18,30 @@ package org.thingsboard.server.common.msg; @@ -18,27 +18,30 @@ package org.thingsboard.server.common.msg;
18 /** 18 /**
19 * Created by ashvayka on 15.03.18. 19 * Created by ashvayka on 15.03.18.
20 */ 20 */
  21 +//TODO: add all "See" references
21 public enum MsgType { 22 public enum MsgType {
22 23
23 /** 24 /**
  25 + * ADDED/UPDATED/DELETED events for server nodes.
  26 + *
  27 + * See {@link org.thingsboard.server.common.msg.cluster.ClusterEventMsg}
  28 + */
  29 + CLUSTER_EVENT_MSG,
  30 +
  31 + /**
24 * ADDED/UPDATED/DELETED events for main entities. 32 * ADDED/UPDATED/DELETED events for main entities.
25 * 33 *
26 - * @See {@link org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg} 34 + * See {@link org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg}
27 */ 35 */
28 COMPONENT_LIFE_CYCLE_MSG, 36 COMPONENT_LIFE_CYCLE_MSG,
29 37
30 /** 38 /**
31 * Misc messages from the REST API/SERVICE layer to the new rule engine. 39 * Misc messages from the REST API/SERVICE layer to the new rule engine.
32 * 40 *
33 - * @See {@link org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg} 41 + * See {@link org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg}
34 */ 42 */
35 SERVICE_TO_RULE_ENGINE_MSG, 43 SERVICE_TO_RULE_ENGINE_MSG,
36 44
37 -  
38 - SESSION_TO_DEVICE_ACTOR_MSG,  
39 - DEVICE_ACTOR_TO_SESSION_MSG,  
40 -  
41 -  
42 /** 45 /**
43 * Message that is sent by RuleChainActor to RuleActor with command to process TbMsg. 46 * Message that is sent by RuleChainActor to RuleActor with command to process TbMsg.
44 */ 47 */
@@ -59,4 +62,31 @@ public enum MsgType { @@ -59,4 +62,31 @@ public enum MsgType {
59 */ 62 */
60 RULE_TO_SELF_MSG, 63 RULE_TO_SELF_MSG,
61 64
  65 + /**
  66 + * Message that is sent by Session Actor to Device Actor. Represents messages from the device itself.
  67 + */
  68 + DEVICE_SESSION_TO_DEVICE_ACTOR_MSG,
  69 +
  70 + DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG,
  71 +
  72 + DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG,
  73 +
  74 + DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG,
  75 +
  76 + DEVICE_RPC_REQUEST_TO_DEVICE_ACTOR_MSG,
  77 +
  78 + DEVICE_ACTOR_RPC_TIMEOUT_MSG,
  79 +
  80 + DEVICE_ACTOR_QUEUE_TIMEOUT_MSG,
  81 +
  82 + /**
  83 + * Message that is sent from the Device Actor to Rule Engine. Requires acknowledgement
  84 + */
  85 + DEVICE_ACTOR_TO_RULE_ENGINE_MSG,
  86 +
  87 + /**
  88 + * Message that is sent from Rule Engine to the Device Actor when message is successfully pushed to queue.
  89 + */
  90 + RULE_ENGINE_QUEUE_PUT_ACK_MSG;
  91 +
62 } 92 }
@@ -31,10 +31,10 @@ import java.util.concurrent.ConcurrentHashMap; @@ -31,10 +31,10 @@ import java.util.concurrent.ConcurrentHashMap;
31 @NoArgsConstructor 31 @NoArgsConstructor
32 public final class TbMsgMetaData implements Serializable { 32 public final class TbMsgMetaData implements Serializable {
33 33
34 - private Map<String, String> data = new ConcurrentHashMap<>(); 34 + private final Map<String, String> data = new ConcurrentHashMap<>();
35 35
36 public TbMsgMetaData(Map<String, String> data) { 36 public TbMsgMetaData(Map<String, String> data) {
37 - this.data = data; 37 + this.data.putAll(data);
38 } 38 }
39 39
40 public String getValue(String key) { 40 public String getValue(String key) {
@@ -16,14 +16,20 @@ @@ -16,14 +16,20 @@
16 package org.thingsboard.server.common.msg.cluster; 16 package org.thingsboard.server.common.msg.cluster;
17 17
18 import lombok.Data; 18 import lombok.Data;
  19 +import org.thingsboard.server.common.msg.MsgType;
  20 +import org.thingsboard.server.common.msg.TbActorMsg;
19 21
20 /** 22 /**
21 * @author Andrew Shvayka 23 * @author Andrew Shvayka
22 */ 24 */
23 @Data 25 @Data
24 -public final class ClusterEventMsg { 26 +public final class ClusterEventMsg implements TbActorMsg {
25 27
26 private final ServerAddress serverAddress; 28 private final ServerAddress serverAddress;
27 private final boolean added; 29 private final boolean added;
28 30
  31 + @Override
  32 + public MsgType getMsgType() {
  33 + return MsgType.CLUSTER_EVENT_MSG;
  34 + }
29 } 35 }
@@ -16,14 +16,14 @@ @@ -16,14 +16,14 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 20
21 /** 21 /**
22 * @author Andrew Shvayka 22 * @author Andrew Shvayka
23 */ 23 */
24 public class AttributesSubscribeMsg implements FromDeviceMsg { 24 public class AttributesSubscribeMsg implements FromDeviceMsg {
25 @Override 25 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST; 26 + public SessionMsgType getMsgType() {
  27 + return SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST;
28 } 28 }
29 } 29 }
@@ -16,14 +16,15 @@ @@ -16,14 +16,15 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 /** 22 /**
22 * @author Andrew Shvayka 23 * @author Andrew Shvayka
23 */ 24 */
24 public class AttributesUnsubscribeMsg implements FromDeviceMsg { 25 public class AttributesUnsubscribeMsg implements FromDeviceMsg {
25 @Override 26 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST; 27 + public SessionMsgType getMsgType() {
  28 + return SessionMsgType.UNSUBSCRIBE_ATTRIBUTES_REQUEST;
28 } 29 }
29 } 30 }
@@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.ToString; 18 import lombok.ToString;
19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg; 19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 22 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 @ToString 24 @ToString
@@ -36,9 +37,8 @@ public class AttributesUpdateNotification implements ToDeviceMsg { @@ -36,9 +37,8 @@ public class AttributesUpdateNotification implements ToDeviceMsg {
36 return true; 37 return true;
37 } 38 }
38 39
39 - @Override  
40 - public MsgType getMsgType() {  
41 - return MsgType.ATTRIBUTES_UPDATE_NOTIFICATION; 40 + public SessionMsgType getSessionMsgType() {
  41 + return SessionMsgType.ATTRIBUTES_UPDATE_NOTIFICATION;
42 } 42 }
43 43
44 public AttributesKVMsg getData() { 44 public AttributesKVMsg getData() {
@@ -15,26 +15,27 @@ @@ -15,26 +15,27 @@
15 */ 15 */
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 -import org.thingsboard.server.common.msg.session.MsgType; 18 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
19 20
20 public class BasicCommandAckResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse { 21 public class BasicCommandAckResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse {
21 22
22 private static final long serialVersionUID = 1L; 23 private static final long serialVersionUID = 1L;
23 24
24 - public static BasicCommandAckResponse onSuccess(MsgType requestMsgType, Integer requestId) { 25 + public static BasicCommandAckResponse onSuccess(SessionMsgType requestMsgType, Integer requestId) {
25 return BasicCommandAckResponse.onSuccess(requestMsgType, requestId, 200); 26 return BasicCommandAckResponse.onSuccess(requestMsgType, requestId, 200);
26 } 27 }
27 28
28 - public static BasicCommandAckResponse onSuccess(MsgType requestMsgType, Integer requestId, Integer code) { 29 + public static BasicCommandAckResponse onSuccess(SessionMsgType requestMsgType, Integer requestId, Integer code) {
29 return new BasicCommandAckResponse(requestMsgType, requestId, true, null, code); 30 return new BasicCommandAckResponse(requestMsgType, requestId, true, null, code);
30 } 31 }
31 32
32 - public static BasicCommandAckResponse onError(MsgType requestMsgType, Integer requestId, Exception error) { 33 + public static BasicCommandAckResponse onError(SessionMsgType requestMsgType, Integer requestId, Exception error) {
33 return new BasicCommandAckResponse(requestMsgType, requestId, false, error, null); 34 return new BasicCommandAckResponse(requestMsgType, requestId, false, error, null);
34 } 35 }
35 36
36 - private BasicCommandAckResponse(MsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) {  
37 - super(requestMsgType, requestId, MsgType.TO_DEVICE_RPC_RESPONSE_ACK, success, error, code); 37 + private BasicCommandAckResponse(SessionMsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) {
  38 + super(requestMsgType, requestId, SessionMsgType.TO_DEVICE_RPC_RESPONSE_ACK, success, error, code);
38 } 39 }
39 40
40 @Override 41 @Override
@@ -16,7 +16,8 @@ @@ -16,7 +16,8 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.ToString; 18 import lombok.ToString;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 import java.util.Collections; 22 import java.util.Collections;
22 import java.util.Optional; 23 import java.util.Optional;
@@ -41,8 +42,8 @@ public class BasicGetAttributesRequest extends BasicRequest implements GetAttrib @@ -41,8 +42,8 @@ public class BasicGetAttributesRequest extends BasicRequest implements GetAttrib
41 } 42 }
42 43
43 @Override 44 @Override
44 - public MsgType getMsgType() {  
45 - return MsgType.GET_ATTRIBUTES_REQUEST; 45 + public SessionMsgType getMsgType() {
  46 + return SessionMsgType.GET_ATTRIBUTES_REQUEST;
46 } 47 }
47 48
48 @Override 49 @Override
@@ -17,23 +17,24 @@ package org.thingsboard.server.common.msg.core; @@ -17,23 +17,24 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.ToString; 18 import lombok.ToString;
19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg; 19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 22
22 @ToString 23 @ToString
23 public class BasicGetAttributesResponse extends BasicResponseMsg<AttributesKVMsg> implements GetAttributesResponse { 24 public class BasicGetAttributesResponse extends BasicResponseMsg<AttributesKVMsg> implements GetAttributesResponse {
24 25
25 private static final long serialVersionUID = 1L; 26 private static final long serialVersionUID = 1L;
26 27
27 - public static BasicGetAttributesResponse onSuccess(MsgType requestMsgType, int requestId, AttributesKVMsg code) { 28 + public static BasicGetAttributesResponse onSuccess(SessionMsgType requestMsgType, int requestId, AttributesKVMsg code) {
28 return new BasicGetAttributesResponse(requestMsgType, requestId, true, null, code); 29 return new BasicGetAttributesResponse(requestMsgType, requestId, true, null, code);
29 } 30 }
30 31
31 - public static BasicGetAttributesResponse onError(MsgType requestMsgType, int requestId, Exception error) { 32 + public static BasicGetAttributesResponse onError(SessionMsgType requestMsgType, int requestId, Exception error) {
32 return new BasicGetAttributesResponse(requestMsgType, requestId, false, error, null); 33 return new BasicGetAttributesResponse(requestMsgType, requestId, false, error, null);
33 } 34 }
34 35
35 - private BasicGetAttributesResponse(MsgType requestMsgType, int requestId, boolean success, Exception error, AttributesKVMsg code) {  
36 - super(requestMsgType, requestId, MsgType.GET_ATTRIBUTES_RESPONSE, success, error, code); 36 + private BasicGetAttributesResponse(SessionMsgType requestMsgType, int requestId, boolean success, Exception error, AttributesKVMsg code) {
  37 + super(requestMsgType, requestId, SessionMsgType.GET_ATTRIBUTES_RESPONSE, success, error, code);
37 } 38 }
38 39
39 } 40 }
@@ -18,32 +18,33 @@ package org.thingsboard.server.common.msg.core; @@ -18,32 +18,33 @@ package org.thingsboard.server.common.msg.core;
18 import java.io.Serializable; 18 import java.io.Serializable;
19 import java.util.Optional; 19 import java.util.Optional;
20 20
21 -import org.thingsboard.server.common.msg.session.MsgType; 21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  22 +import org.thingsboard.server.common.msg.session.SessionMsgType;
22 23
23 24
24 public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T> { 25 public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T> {
25 26
26 private static final long serialVersionUID = 1L; 27 private static final long serialVersionUID = 1L;
27 28
28 - private final MsgType requestMsgType; 29 + private final SessionMsgType requestMsgType;
29 private final Integer requestId; 30 private final Integer requestId;
30 - private final MsgType msgType; 31 + private final SessionMsgType sessionMsgType;
31 private final boolean success; 32 private final boolean success;
32 private final T data; 33 private final T data;
33 private final Exception error; 34 private final Exception error;
34 35
35 - protected BasicResponseMsg(MsgType requestMsgType, Integer requestId, MsgType msgType, boolean success, Exception error, T data) { 36 + protected BasicResponseMsg(SessionMsgType requestMsgType, Integer requestId, SessionMsgType sessionMsgType, boolean success, Exception error, T data) {
36 super(); 37 super();
37 this.requestMsgType = requestMsgType; 38 this.requestMsgType = requestMsgType;
38 this.requestId = requestId; 39 this.requestId = requestId;
39 - this.msgType = msgType; 40 + this.sessionMsgType = sessionMsgType;
40 this.success = success; 41 this.success = success;
41 this.error = error; 42 this.error = error;
42 this.data = data; 43 this.data = data;
43 } 44 }
44 45
45 @Override 46 @Override
46 - public MsgType getRequestMsgType() { 47 + public SessionMsgType getRequestMsgType() {
47 return requestMsgType; 48 return requestMsgType;
48 } 49 }
49 50
@@ -72,8 +73,7 @@ public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T> @@ -72,8 +73,7 @@ public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T>
72 return "BasicResponseMsg [success=" + success + ", data=" + data + ", error=" + error + "]"; 73 return "BasicResponseMsg [success=" + success + ", data=" + data + ", error=" + error + "]";
73 } 74 }
74 75
75 - @Override  
76 - public MsgType getMsgType() {  
77 - return msgType; 76 + public SessionMsgType getSessionMsgType() {
  77 + return sessionMsgType;
78 } 78 }
79 } 79 }
@@ -16,26 +16,27 @@ @@ -16,26 +16,27 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.ToString; 18 import lombok.ToString;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 @ToString 22 @ToString
22 public class BasicStatusCodeResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse { 23 public class BasicStatusCodeResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse {
23 24
24 private static final long serialVersionUID = 1L; 25 private static final long serialVersionUID = 1L;
25 26
26 - public static BasicStatusCodeResponse onSuccess(MsgType requestMsgType, Integer requestId) { 27 + public static BasicStatusCodeResponse onSuccess(SessionMsgType requestMsgType, Integer requestId) {
27 return BasicStatusCodeResponse.onSuccess(requestMsgType, requestId, 0); 28 return BasicStatusCodeResponse.onSuccess(requestMsgType, requestId, 0);
28 } 29 }
29 30
30 - public static BasicStatusCodeResponse onSuccess(MsgType requestMsgType, Integer requestId, Integer code) { 31 + public static BasicStatusCodeResponse onSuccess(SessionMsgType requestMsgType, Integer requestId, Integer code) {
31 return new BasicStatusCodeResponse(requestMsgType, requestId, true, null, code); 32 return new BasicStatusCodeResponse(requestMsgType, requestId, true, null, code);
32 } 33 }
33 34
34 - public static BasicStatusCodeResponse onError(MsgType requestMsgType, Integer requestId, Exception error) { 35 + public static BasicStatusCodeResponse onError(SessionMsgType requestMsgType, Integer requestId, Exception error) {
35 return new BasicStatusCodeResponse(requestMsgType, requestId, false, error, null); 36 return new BasicStatusCodeResponse(requestMsgType, requestId, false, error, null);
36 } 37 }
37 38
38 - private BasicStatusCodeResponse(MsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) {  
39 - super(requestMsgType, requestId, MsgType.STATUS_CODE_RESPONSE, success, error, code); 39 + private BasicStatusCodeResponse(SessionMsgType requestMsgType, Integer requestId, boolean success, Exception error, Integer code) {
  40 + super(requestMsgType, requestId, SessionMsgType.STATUS_CODE_RESPONSE, success, error, code);
40 } 41 }
41 } 42 }
@@ -21,7 +21,8 @@ import java.util.List; @@ -21,7 +21,8 @@ import java.util.List;
21 import java.util.Map; 21 import java.util.Map;
22 22
23 import org.thingsboard.server.common.data.kv.KvEntry; 23 import org.thingsboard.server.common.data.kv.KvEntry;
24 -import org.thingsboard.server.common.msg.session.MsgType; 24 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  25 +import org.thingsboard.server.common.msg.session.SessionMsgType;
25 26
26 public class BasicTelemetryUploadRequest extends BasicRequest implements TelemetryUploadRequest { 27 public class BasicTelemetryUploadRequest extends BasicRequest implements TelemetryUploadRequest {
27 28
@@ -48,8 +49,8 @@ public class BasicTelemetryUploadRequest extends BasicRequest implements Telemet @@ -48,8 +49,8 @@ public class BasicTelemetryUploadRequest extends BasicRequest implements Telemet
48 } 49 }
49 50
50 @Override 51 @Override
51 - public MsgType getMsgType() {  
52 - return MsgType.POST_TELEMETRY_REQUEST; 52 + public SessionMsgType getMsgType() {
  53 + return SessionMsgType.POST_TELEMETRY_REQUEST;
53 } 54 }
54 55
55 @Override 56 @Override
@@ -20,7 +20,8 @@ import java.util.LinkedHashSet; @@ -20,7 +20,8 @@ import java.util.LinkedHashSet;
20 import java.util.Set; 20 import java.util.Set;
21 21
22 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 22 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
23 -import org.thingsboard.server.common.msg.session.MsgType; 23 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  24 +import org.thingsboard.server.common.msg.session.SessionMsgType;
24 25
25 public class BasicUpdateAttributesRequest extends BasicRequest implements UpdateAttributesRequest { 26 public class BasicUpdateAttributesRequest extends BasicRequest implements UpdateAttributesRequest {
26 27
@@ -46,8 +47,8 @@ public class BasicUpdateAttributesRequest extends BasicRequest implements Update @@ -46,8 +47,8 @@ public class BasicUpdateAttributesRequest extends BasicRequest implements Update
46 } 47 }
47 48
48 @Override 49 @Override
49 - public MsgType getMsgType() {  
50 - return MsgType.POST_ATTRIBUTES_REQUEST; 50 + public SessionMsgType getMsgType() {
  51 + return SessionMsgType.POST_ATTRIBUTES_REQUEST;
51 } 52 }
52 53
53 @Override 54 @Override
@@ -18,12 +18,12 @@ package org.thingsboard.server.common.msg.core; @@ -18,12 +18,12 @@ package org.thingsboard.server.common.msg.core;
18 import java.io.Serializable; 18 import java.io.Serializable;
19 import java.util.Optional; 19 import java.util.Optional;
20 20
21 -import org.thingsboard.server.common.msg.session.MsgType; 21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
22 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 22 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
23 23
24 public interface ResponseMsg<T extends Serializable> extends ToDeviceMsg { 24 public interface ResponseMsg<T extends Serializable> extends ToDeviceMsg {
25 25
26 - MsgType getRequestMsgType(); 26 + SessionMsgType getRequestMsgType();
27 27
28 Integer getRequestId(); 28 Integer getRequestId();
29 29
@@ -16,14 +16,15 @@ @@ -16,14 +16,15 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 /** 22 /**
22 * @author Andrew Shvayka 23 * @author Andrew Shvayka
23 */ 24 */
24 public class RpcSubscribeMsg implements FromDeviceMsg { 25 public class RpcSubscribeMsg implements FromDeviceMsg {
25 @Override 26 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST; 27 + public SessionMsgType getMsgType() {
  28 + return SessionMsgType.SUBSCRIBE_RPC_COMMANDS_REQUEST;
28 } 29 }
29 } 30 }
@@ -16,14 +16,15 @@ @@ -16,14 +16,15 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 /** 22 /**
22 * @author Andrew Shvayka 23 * @author Andrew Shvayka
23 */ 24 */
24 public class RpcUnsubscribeMsg implements FromDeviceMsg { 25 public class RpcUnsubscribeMsg implements FromDeviceMsg {
25 @Override 26 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST; 27 + public SessionMsgType getMsgType() {
  28 + return SessionMsgType.UNSUBSCRIBE_RPC_COMMANDS_REQUEST;
28 } 29 }
29 } 30 }
@@ -21,7 +21,7 @@ package org.thingsboard.server.common.msg.core; @@ -21,7 +21,7 @@ package org.thingsboard.server.common.msg.core;
21 21
22 public enum RuleEngineError { 22 public enum RuleEngineError {
23 23
24 - NO_RULES, NO_ACTIVE_RULES, NO_FILTERS_MATCHED, NO_REQUEST_FROM_ACTIONS, NO_TWO_WAY_ACTIONS, NO_RESPONSE_FROM_ACTIONS, PLUGIN_TIMEOUT(true); 24 + NO_RULES, NO_ACTIVE_RULES, NO_FILTERS_MATCHED, NO_REQUEST_FROM_ACTIONS, NO_TWO_WAY_ACTIONS, NO_RESPONSE_FROM_ACTIONS, QUEUE_PUT_TIMEOUT(true);
25 25
26 private final boolean critical; 26 private final boolean critical;
27 27
@@ -16,7 +16,8 @@ @@ -16,7 +16,8 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 21 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
21 22
22 /** 23 /**
@@ -25,7 +26,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceMsg; @@ -25,7 +26,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 @Data 26 @Data
26 public class RuleEngineErrorMsg implements ToDeviceMsg { 27 public class RuleEngineErrorMsg implements ToDeviceMsg {
27 28
28 - private final MsgType inMsgType; 29 + private final SessionMsgType inSessionMsgType;
29 private final RuleEngineError error; 30 private final RuleEngineError error;
30 31
31 @Override 32 @Override
@@ -33,9 +34,8 @@ public class RuleEngineErrorMsg implements ToDeviceMsg { @@ -33,9 +34,8 @@ public class RuleEngineErrorMsg implements ToDeviceMsg {
33 return false; 34 return false;
34 } 35 }
35 36
36 - @Override  
37 - public MsgType getMsgType() {  
38 - return MsgType.RULE_ENGINE_ERROR; 37 + public SessionMsgType getSessionMsgType() {
  38 + return SessionMsgType.RULE_ENGINE_ERROR;
39 } 39 }
40 40
41 public String getErrorMsg() { 41 public String getErrorMsg() {
@@ -52,7 +52,7 @@ public class RuleEngineErrorMsg implements ToDeviceMsg { @@ -52,7 +52,7 @@ public class RuleEngineErrorMsg implements ToDeviceMsg {
52 return "Rule filters match, but no rule with two-way action configured!"; 52 return "Rule filters match, but no rule with two-way action configured!";
53 case NO_RESPONSE_FROM_ACTIONS: 53 case NO_RESPONSE_FROM_ACTIONS:
54 return "Rule filters match, message processed by plugin, but no response produced by rule action!"; 54 return "Rule filters match, message processed by plugin, but no response produced by rule action!";
55 - case PLUGIN_TIMEOUT: 55 + case QUEUE_PUT_TIMEOUT:
56 return "Timeout during processing of message by plugin!"; 56 return "Timeout during processing of message by plugin!";
57 default: 57 default:
58 throw new RuntimeException("Error " + error + " is not supported!"); 58 throw new RuntimeException("Error " + error + " is not supported!");
@@ -16,14 +16,15 @@ @@ -16,14 +16,15 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 /** 22 /**
22 * @author Andrew Shvayka 23 * @author Andrew Shvayka
23 */ 24 */
24 public class SessionCloseMsg implements FromDeviceMsg { 25 public class SessionCloseMsg implements FromDeviceMsg {
25 @Override 26 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.SESSION_CLOSE; 27 + public SessionMsgType getMsgType() {
  28 + return SessionMsgType.SESSION_CLOSE;
28 } 29 }
29 } 30 }
@@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.ToString; 18 import lombok.ToString;
19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg; 19 import org.thingsboard.server.common.msg.kv.AttributesKVMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 22 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 @ToString 24 @ToString
@@ -30,9 +31,8 @@ public class SessionCloseNotification implements ToDeviceMsg { @@ -30,9 +31,8 @@ public class SessionCloseNotification implements ToDeviceMsg {
30 return true; 31 return true;
31 } 32 }
32 33
33 - @Override  
34 - public MsgType getMsgType() {  
35 - return MsgType.SESSION_CLOSE; 34 + public SessionMsgType getSessionMsgType() {
  35 + return SessionMsgType.SESSION_CLOSE;
36 } 36 }
37 37
38 } 38 }
@@ -16,14 +16,15 @@ @@ -16,14 +16,15 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 18 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 21
21 /** 22 /**
22 * @author Andrew Shvayka 23 * @author Andrew Shvayka
23 */ 24 */
24 public class SessionOpenMsg implements FromDeviceMsg { 25 public class SessionOpenMsg implements FromDeviceMsg {
25 @Override 26 @Override
26 - public MsgType getMsgType() {  
27 - return MsgType.SESSION_OPEN; 27 + public SessionMsgType getMsgType() {
  28 + return SessionMsgType.SESSION_OPEN;
28 } 29 }
29 } 30 }
@@ -16,7 +16,8 @@ @@ -16,7 +16,8 @@
16 package org.thingsboard.server.common.msg.core; 16 package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 21 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
21 22
22 /** 23 /**
@@ -29,9 +30,8 @@ public class ToDeviceRpcRequestMsg implements ToDeviceMsg { @@ -29,9 +30,8 @@ public class ToDeviceRpcRequestMsg implements ToDeviceMsg {
29 private final String method; 30 private final String method;
30 private final String params; 31 private final String params;
31 32
32 - @Override  
33 - public MsgType getMsgType() {  
34 - return MsgType.TO_DEVICE_RPC_REQUEST; 33 + public SessionMsgType getSessionMsgType() {
  34 + return SessionMsgType.TO_DEVICE_RPC_REQUEST;
35 } 35 }
36 36
37 @Override 37 @Override
@@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 22
22 /** 23 /**
23 * @author Andrew Shvayka 24 * @author Andrew Shvayka
@@ -29,7 +30,7 @@ public class ToDeviceRpcResponseMsg implements FromDeviceMsg { @@ -29,7 +30,7 @@ public class ToDeviceRpcResponseMsg implements FromDeviceMsg {
29 private final String data; 30 private final String data;
30 31
31 @Override 32 @Override
32 - public MsgType getMsgType() {  
33 - return MsgType.TO_DEVICE_RPC_RESPONSE; 33 + public SessionMsgType getMsgType() {
  34 + return SessionMsgType.TO_DEVICE_RPC_RESPONSE;
34 } 35 }
35 } 36 }
@@ -17,7 +17,7 @@ package org.thingsboard.server.common.msg.core; @@ -17,7 +17,7 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 21
22 /** 22 /**
23 * @author Andrew Shvayka 23 * @author Andrew Shvayka
@@ -30,7 +30,7 @@ public class ToServerRpcRequestMsg implements FromDeviceRequestMsg { @@ -30,7 +30,7 @@ public class ToServerRpcRequestMsg implements FromDeviceRequestMsg {
30 private final String params; 30 private final String params;
31 31
32 @Override 32 @Override
33 - public MsgType getMsgType() {  
34 - return MsgType.TO_SERVER_RPC_REQUEST; 33 + public SessionMsgType getMsgType() {
  34 + return SessionMsgType.TO_SERVER_RPC_REQUEST;
35 } 35 }
36 } 36 }
@@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core; @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core;
17 17
18 import lombok.Data; 18 import lombok.Data;
19 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 22 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 /** 24 /**
@@ -29,9 +30,8 @@ public class ToServerRpcResponseMsg implements ToDeviceMsg { @@ -29,9 +30,8 @@ public class ToServerRpcResponseMsg implements ToDeviceMsg {
29 private final int requestId; 30 private final int requestId;
30 private final String data; 31 private final String data;
31 32
32 - @Override  
33 - public MsgType getMsgType() {  
34 - return MsgType.TO_SERVER_RPC_RESPONSE; 33 + public SessionMsgType getSessionMsgType() {
  34 + return SessionMsgType.TO_SERVER_RPC_RESPONSE;
35 } 35 }
36 36
37 @Override 37 @Override
common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicDeviceToDeviceActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/device/BasicToDeviceActorMsg.java
@@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.CustomerId; @@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.id.CustomerId;
20 import org.thingsboard.server.common.data.id.DeviceId; 20 import org.thingsboard.server.common.data.id.DeviceId;
21 import org.thingsboard.server.common.data.id.SessionId; 21 import org.thingsboard.server.common.data.id.SessionId;
22 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.common.msg.MsgType;
23 import org.thingsboard.server.common.msg.cluster.ServerAddress; 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
24 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 25 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
25 import org.thingsboard.server.common.msg.session.SessionType; 26 import org.thingsboard.server.common.msg.session.SessionType;
@@ -28,7 +29,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg; @@ -28,7 +29,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg;
28 import java.util.Optional; 29 import java.util.Optional;
29 30
30 @ToString 31 @ToString
31 -public class BasicToDeviceActorMsg implements ToDeviceActorMsg { 32 +public class BasicDeviceToDeviceActorMsg implements DeviceToDeviceActorMsg {
32 33
33 private static final long serialVersionUID = -1866795134993115408L; 34 private static final long serialVersionUID = -1866795134993115408L;
34 35
@@ -40,16 +41,16 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg { @@ -40,16 +41,16 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg {
40 private final ServerAddress serverAddress; 41 private final ServerAddress serverAddress;
41 private final FromDeviceMsg msg; 42 private final FromDeviceMsg msg;
42 43
43 - public BasicToDeviceActorMsg(ToDeviceActorMsg other, FromDeviceMsg msg) { 44 + public BasicDeviceToDeviceActorMsg(DeviceToDeviceActorMsg other, FromDeviceMsg msg) {
44 this(null, other.getTenantId(), other.getCustomerId(), other.getDeviceId(), other.getSessionId(), other.getSessionType(), msg); 45 this(null, other.getTenantId(), other.getCustomerId(), other.getDeviceId(), other.getSessionId(), other.getSessionType(), msg);
45 } 46 }
46 47
47 - public BasicToDeviceActorMsg(ToDeviceActorSessionMsg msg, SessionType sessionType) { 48 + public BasicDeviceToDeviceActorMsg(ToDeviceActorSessionMsg msg, SessionType sessionType) {
48 this(null, msg.getTenantId(), msg.getCustomerId(), msg.getDeviceId(), msg.getSessionId(), sessionType, msg.getSessionMsg().getMsg()); 49 this(null, msg.getTenantId(), msg.getCustomerId(), msg.getDeviceId(), msg.getSessionId(), sessionType, msg.getSessionMsg().getMsg());
49 } 50 }
50 51
51 - private BasicToDeviceActorMsg(ServerAddress serverAddress, TenantId tenantId, CustomerId customerId, DeviceId deviceId, SessionId sessionId, SessionType sessionType,  
52 - FromDeviceMsg msg) { 52 + private BasicDeviceToDeviceActorMsg(ServerAddress serverAddress, TenantId tenantId, CustomerId customerId, DeviceId deviceId, SessionId sessionId, SessionType sessionType,
  53 + FromDeviceMsg msg) {
53 super(); 54 super();
54 this.serverAddress = serverAddress; 55 this.serverAddress = serverAddress;
55 this.tenantId = tenantId; 56 this.tenantId = tenantId;
@@ -95,7 +96,12 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg { @@ -95,7 +96,12 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg {
95 } 96 }
96 97
97 @Override 98 @Override
98 - public ToDeviceActorMsg toOtherAddress(ServerAddress otherAddress) {  
99 - return new BasicToDeviceActorMsg(otherAddress, tenantId, customerId, deviceId, sessionId, sessionType, msg); 99 + public DeviceToDeviceActorMsg toOtherAddress(ServerAddress otherAddress) {
  100 + return new BasicDeviceToDeviceActorMsg(otherAddress, tenantId, customerId, deviceId, sessionId, sessionType, msg);
  101 + }
  102 +
  103 + @Override
  104 + public MsgType getMsgType() {
  105 + return MsgType.DEVICE_SESSION_TO_DEVICE_ACTOR_MSG;
100 } 106 }
101 } 107 }
common/message/src/main/java/org/thingsboard/server/common/msg/device/DeviceToDeviceActorMsg.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/device/ToDeviceActorMsg.java
@@ -19,6 +19,7 @@ import java.io.Serializable; @@ -19,6 +19,7 @@ import java.io.Serializable;
19 import java.util.Optional; 19 import java.util.Optional;
20 20
21 import org.thingsboard.server.common.data.id.SessionId; 21 import org.thingsboard.server.common.data.id.SessionId;
  22 +import org.thingsboard.server.common.msg.TbActorMsg;
22 import org.thingsboard.server.common.msg.aware.CustomerAwareMsg; 23 import org.thingsboard.server.common.msg.aware.CustomerAwareMsg;
23 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; 24 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
24 import org.thingsboard.server.common.msg.aware.TenantAwareMsg; 25 import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
@@ -26,7 +27,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; @@ -26,7 +27,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
26 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 27 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
27 import org.thingsboard.server.common.msg.session.SessionType; 28 import org.thingsboard.server.common.msg.session.SessionType;
28 29
29 -public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, Serializable { 30 +public interface DeviceToDeviceActorMsg extends TbActorMsg, DeviceAwareMsg, CustomerAwareMsg, TenantAwareMsg, Serializable {
30 31
31 SessionId getSessionId(); 32 SessionId getSessionId();
32 33
@@ -36,5 +37,5 @@ public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, Tena @@ -36,5 +37,5 @@ public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, Tena
36 37
37 FromDeviceMsg getPayload(); 38 FromDeviceMsg getPayload();
38 39
39 - ToDeviceActorMsg toOtherAddress(ServerAddress otherAddress); 40 + DeviceToDeviceActorMsg toOtherAddress(ServerAddress otherAddress);
40 } 41 }
@@ -19,6 +19,6 @@ import java.io.Serializable; @@ -19,6 +19,6 @@ import java.io.Serializable;
19 19
20 public interface FromDeviceMsg extends Serializable { 20 public interface FromDeviceMsg extends Serializable {
21 21
22 - MsgType getMsgType(); 22 + SessionMsgType getMsgType();
23 23
24 } 24 }
common/message/src/main/java/org/thingsboard/server/common/msg/session/SessionMsgType.java renamed from common/message/src/main/java/org/thingsboard/server/common/msg/session/MsgType.java
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.common.msg.session; 16 package org.thingsboard.server.common.msg.session;
17 17
18 -public enum MsgType { 18 +public enum SessionMsgType {
19 GET_ATTRIBUTES_REQUEST(true), POST_ATTRIBUTES_REQUEST(true), GET_ATTRIBUTES_RESPONSE, 19 GET_ATTRIBUTES_REQUEST(true), POST_ATTRIBUTES_REQUEST(true), GET_ATTRIBUTES_RESPONSE,
20 SUBSCRIBE_ATTRIBUTES_REQUEST, UNSUBSCRIBE_ATTRIBUTES_REQUEST, ATTRIBUTES_UPDATE_NOTIFICATION, 20 SUBSCRIBE_ATTRIBUTES_REQUEST, UNSUBSCRIBE_ATTRIBUTES_REQUEST, ATTRIBUTES_UPDATE_NOTIFICATION,
21 21
@@ -32,11 +32,11 @@ public enum MsgType { @@ -32,11 +32,11 @@ public enum MsgType {
32 32
33 private final boolean requiresRulesProcessing; 33 private final boolean requiresRulesProcessing;
34 34
35 - MsgType() { 35 + SessionMsgType() {
36 this(false); 36 this(false);
37 } 37 }
38 38
39 - MsgType(boolean requiresRulesProcessing) { 39 + SessionMsgType(boolean requiresRulesProcessing) {
40 this.requiresRulesProcessing = requiresRulesProcessing; 40 this.requiresRulesProcessing = requiresRulesProcessing;
41 } 41 }
42 42
@@ -21,6 +21,6 @@ public interface ToDeviceMsg extends Serializable { @@ -21,6 +21,6 @@ public interface ToDeviceMsg extends Serializable {
21 21
22 boolean isSuccess(); 22 boolean isSuccess();
23 23
24 - MsgType getMsgType(); 24 + SessionMsgType getSessionMsgType();
25 25
26 } 26 }
common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorQueueTimeoutMsg.java renamed from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutUUIDMsg.java
@@ -13,17 +13,24 @@ @@ -13,17 +13,24 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.extensions.api.plugins.msg; 16 +package org.thingsboard.server.common.msg.timeout;
  17 +
  18 +import org.thingsboard.server.common.msg.MsgType;
  19 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
17 20
18 import java.util.UUID; 21 import java.util.UUID;
19 22
20 /** 23 /**
21 * @author Andrew Shvayka 24 * @author Andrew Shvayka
22 */ 25 */
23 -public final class TimeoutUUIDMsg extends TimeoutMsg<UUID> { 26 +public final class DeviceActorQueueTimeoutMsg extends TimeoutMsg<UUID> {
24 27
25 - public TimeoutUUIDMsg(UUID id, long timeout) { 28 + public DeviceActorQueueTimeoutMsg(UUID id, long timeout) {
26 super(id, timeout); 29 super(id, timeout);
27 } 30 }
28 31
  32 + @Override
  33 + public MsgType getMsgType() {
  34 + return MsgType.DEVICE_ACTOR_QUEUE_TIMEOUT_MSG;
  35 + }
29 } 36 }
common/message/src/main/java/org/thingsboard/server/common/msg/timeout/DeviceActorRpcTimeoutMsg.java renamed from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutIntMsg.java
@@ -13,15 +13,21 @@ @@ -13,15 +13,21 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.extensions.api.plugins.msg; 16 +package org.thingsboard.server.common.msg.timeout;
  17 +
  18 +import org.thingsboard.server.common.msg.MsgType;
17 19
18 /** 20 /**
19 * @author Andrew Shvayka 21 * @author Andrew Shvayka
20 */ 22 */
21 -public final class TimeoutIntMsg extends TimeoutMsg<Integer> { 23 +public final class DeviceActorRpcTimeoutMsg extends TimeoutMsg<Integer> {
22 24
23 - public TimeoutIntMsg(Integer id, long timeout) { 25 + public DeviceActorRpcTimeoutMsg(Integer id, long timeout) {
24 super(id, timeout); 26 super(id, timeout);
25 } 27 }
26 28
  29 + @Override
  30 + public MsgType getMsgType() {
  31 + return MsgType.DEVICE_ACTOR_RPC_TIMEOUT_MSG;
  32 + }
27 } 33 }
common/message/src/main/java/org/thingsboard/server/common/msg/timeout/TimeoutMsg.java renamed from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TimeoutMsg.java
@@ -13,15 +13,16 @@ @@ -13,15 +13,16 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.thingsboard.server.extensions.api.plugins.msg; 16 +package org.thingsboard.server.common.msg.timeout;
17 17
18 import lombok.Data; 18 import lombok.Data;
  19 +import org.thingsboard.server.common.msg.TbActorMsg;
19 20
20 /** 21 /**
21 * @author Andrew Shvayka 22 * @author Andrew Shvayka
22 */ 23 */
23 @Data 24 @Data
24 -public class TimeoutMsg<T> { 25 +public abstract class TimeoutMsg<T> implements TbActorMsg {
25 private final T id; 26 private final T id;
26 private final long timeout; 27 private final long timeout;
27 } 28 }
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 package org.thingsboard.server.common.transport; 16 package org.thingsboard.server.common.transport;
17 17
18 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg; 18 import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg;
19 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.session.SessionMsgType;
20 import org.thingsboard.server.common.msg.session.SessionActorToAdaptorMsg; 20 import org.thingsboard.server.common.msg.session.SessionActorToAdaptorMsg;
21 import org.thingsboard.server.common.msg.session.SessionContext; 21 import org.thingsboard.server.common.msg.session.SessionContext;
22 import org.thingsboard.server.common.transport.adaptor.AdaptorException; 22 import org.thingsboard.server.common.transport.adaptor.AdaptorException;
@@ -25,7 +25,7 @@ import java.util.Optional; @@ -25,7 +25,7 @@ import java.util.Optional;
25 25
26 public interface TransportAdaptor<C extends SessionContext, T, V> { 26 public interface TransportAdaptor<C extends SessionContext, T, V> {
27 27
28 - AdaptorToSessionActorMsg convertToActorMsg(C ctx, MsgType type, T inbound) throws AdaptorException; 28 + AdaptorToSessionActorMsg convertToActorMsg(C ctx, SessionMsgType type, T inbound) throws AdaptorException;
29 29
30 Optional<V> convertToAdaptorMsg(C ctx, SessionActorToAdaptorMsg msg) throws AdaptorException; 30 Optional<V> convertToAdaptorMsg(C ctx, SessionActorToAdaptorMsg msg) throws AdaptorException;
31 31
@@ -75,6 +75,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @@ -75,6 +75,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
75 log.trace("Save system rule chain with predefined id {}", SYSTEM_TENANT); 75 log.trace("Save system rule chain with predefined id {}", SYSTEM_TENANT);
76 ruleChain.setTenantId(SYSTEM_TENANT); 76 ruleChain.setTenantId(SYSTEM_TENANT);
77 } 77 }
  78 + //TODO: Temporary Hack to continue tests;
  79 + ruleChain.setRoot(true);
78 RuleChain savedRuleChain = ruleChainDao.save(ruleChain); 80 RuleChain savedRuleChain = ruleChainDao.save(ruleChain);
79 if (ruleChain.isRoot() && ruleChain.getTenantId() != null && ruleChain.getId() == null) { 81 if (ruleChain.isRoot() && ruleChain.getTenantId() != null && ruleChain.getId() == null) {
80 try { 82 try {
@@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.id.DeviceId; @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
22 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
23 import org.thingsboard.server.common.data.kv.AttributeKey; 23 import org.thingsboard.server.common.data.kv.AttributeKey;
24 import org.thingsboard.server.common.data.kv.AttributeKvEntry; 24 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  25 +import org.thingsboard.server.common.msg.MsgType;
25 26
26 import java.util.List; 27 import java.util.List;
27 import java.util.Set; 28 import java.util.Set;
@@ -54,4 +55,8 @@ public class DeviceAttributesEventNotificationMsg implements ToDeviceActorNotifi @@ -54,4 +55,8 @@ public class DeviceAttributesEventNotificationMsg implements ToDeviceActorNotifi
54 return new DeviceAttributesEventNotificationMsg(tenantId, deviceId, keys, null, null, true); 55 return new DeviceAttributesEventNotificationMsg(tenantId, deviceId, keys, null, null, true);
55 } 56 }
56 57
  58 + @Override
  59 + public MsgType getMsgType() {
  60 + return MsgType.DEVICE_ATTRIBUTES_UPDATE_TO_DEVICE_ACTOR_MSG;
  61 + }
57 } 62 }
@@ -21,6 +21,7 @@ import lombok.ToString; @@ -21,6 +21,7 @@ import lombok.ToString;
21 import org.thingsboard.server.common.data.id.DeviceId; 21 import org.thingsboard.server.common.data.id.DeviceId;
22 import org.thingsboard.server.common.data.id.TenantId; 22 import org.thingsboard.server.common.data.id.TenantId;
23 import org.thingsboard.server.common.data.kv.AttributeKey; 23 import org.thingsboard.server.common.data.kv.AttributeKey;
  24 +import org.thingsboard.server.common.msg.MsgType;
24 25
25 import java.util.Set; 26 import java.util.Set;
26 27
@@ -33,4 +34,8 @@ public class DeviceCredentialsUpdateNotificationMsg implements ToDeviceActorNoti @@ -33,4 +34,8 @@ public class DeviceCredentialsUpdateNotificationMsg implements ToDeviceActorNoti
33 private final TenantId tenantId; 34 private final TenantId tenantId;
34 private final DeviceId deviceId; 35 private final DeviceId deviceId;
35 36
  37 + @Override
  38 + public MsgType getMsgType() {
  39 + return MsgType.DEVICE_CREDENTIALS_UPDATE_TO_DEVICE_ACTOR_MSG;
  40 + }
36 } 41 }
@@ -19,6 +19,7 @@ import lombok.AllArgsConstructor; @@ -19,6 +19,7 @@ import lombok.AllArgsConstructor;
19 import lombok.Data; 19 import lombok.Data;
20 import org.thingsboard.server.common.data.id.DeviceId; 20 import org.thingsboard.server.common.data.id.DeviceId;
21 import org.thingsboard.server.common.data.id.TenantId; 21 import org.thingsboard.server.common.data.id.TenantId;
  22 +import org.thingsboard.server.common.msg.MsgType;
22 23
23 @Data 24 @Data
24 @AllArgsConstructor 25 @AllArgsConstructor
@@ -27,4 +28,9 @@ public class DeviceNameOrTypeUpdateMsg implements ToDeviceActorNotificationMsg { @@ -27,4 +28,9 @@ public class DeviceNameOrTypeUpdateMsg implements ToDeviceActorNotificationMsg {
27 private final DeviceId deviceId; 28 private final DeviceId deviceId;
28 private final String deviceName; 29 private final String deviceName;
29 private final String deviceType; 30 private final String deviceType;
  31 +
  32 + @Override
  33 + public MsgType getMsgType() {
  34 + return MsgType.DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG;
  35 + }
30 } 36 }
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.api.device; 16 package org.thingsboard.server.extensions.api.device;
17 17
  18 +import org.thingsboard.server.common.msg.TbActorMsg;
18 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg; 19 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
19 import org.thingsboard.server.common.msg.aware.TenantAwareMsg; 20 import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
20 21
@@ -23,6 +24,6 @@ import java.io.Serializable; @@ -23,6 +24,6 @@ import java.io.Serializable;
23 /** 24 /**
24 * @author Andrew Shvayka 25 * @author Andrew Shvayka
25 */ 26 */
26 -public interface ToDeviceActorNotificationMsg extends TenantAwareMsg, DeviceAwareMsg, Serializable { 27 +public interface ToDeviceActorNotificationMsg extends TbActorMsg, TenantAwareMsg, DeviceAwareMsg, Serializable {
27 28
28 } 29 }
@@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; @@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
21 import org.thingsboard.server.extensions.api.plugins.handlers.*; 21 import org.thingsboard.server.extensions.api.plugins.handlers.*;
22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
23 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 23 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
24 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; 24 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; 25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; 26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; 27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
@@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress; @@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
21 import org.thingsboard.server.extensions.api.component.ConfigurableComponent; 21 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
23 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 23 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
24 -import org.thingsboard.server.extensions.api.plugins.msg.TimeoutMsg; 24 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; 25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; 26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; 27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.api.plugins; 16 package org.thingsboard.server.extensions.api.plugins;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 19 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
20 import org.thingsboard.server.extensions.api.component.ConfigurableComponent; 20 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
21 import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; 21 import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg;
@@ -28,7 +28,7 @@ import java.util.Optional; @@ -28,7 +28,7 @@ import java.util.Optional;
28 28
29 public interface PluginAction<T> extends ConfigurableComponent<T>, RuleLifecycleComponent { 29 public interface PluginAction<T> extends ConfigurableComponent<T>, RuleLifecycleComponent {
30 30
31 - Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd); 31 + Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd);
32 32
33 Optional<ToDeviceMsg> convert(PluginToRuleMsg<?> response); 33 Optional<ToDeviceMsg> convert(PluginToRuleMsg<?> response);
34 34
@@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; @@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
25 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; 25 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
26 import org.thingsboard.server.common.msg.cluster.ServerAddress; 26 import org.thingsboard.server.common.msg.cluster.ServerAddress;
27 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest; 27 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
  28 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
28 import org.thingsboard.server.extensions.api.plugins.msg.*; 29 import org.thingsboard.server.extensions.api.plugins.msg.*;
29 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; 30 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
30 import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; 31 import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
@@ -18,7 +18,8 @@ package org.thingsboard.server.extensions.api.plugins.handlers; @@ -18,7 +18,8 @@ package org.thingsboard.server.extensions.api.plugins.handlers;
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.thingsboard.server.common.data.id.RuleId; 19 import org.thingsboard.server.common.data.id.RuleId;
20 import org.thingsboard.server.common.data.id.TenantId; 20 import org.thingsboard.server.common.data.id.TenantId;
21 -import org.thingsboard.server.common.msg.session.MsgType; 21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  22 +import org.thingsboard.server.common.msg.session.SessionMsgType;
22 import org.thingsboard.server.extensions.api.plugins.PluginContext; 23 import org.thingsboard.server.extensions.api.plugins.PluginContext;
23 import org.thingsboard.server.extensions.api.plugins.msg.GetAttributesRequestRuleToPluginMsg; 24 import org.thingsboard.server.extensions.api.plugins.msg.GetAttributesRequestRuleToPluginMsg;
24 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 25 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -56,8 +57,8 @@ public class DefaultRuleMsgHandler implements RuleMsgHandler { @@ -56,8 +57,8 @@ public class DefaultRuleMsgHandler implements RuleMsgHandler {
56 msgTypeNotSupported(msg.getPayload().getMsgType()); 57 msgTypeNotSupported(msg.getPayload().getMsgType());
57 } 58 }
58 59
59 - private void msgTypeNotSupported(MsgType msgType) {  
60 - throw new RuntimeException("Not supported msg type: " + msgType + "!"); 60 + private void msgTypeNotSupported(SessionMsgType sessionMsgType) {
  61 + throw new RuntimeException("Not supported msg type: " + sessionMsgType + "!");
61 } 62 }
62 63
63 } 64 }
1 -/**  
2 - * Copyright © 2016-2018 The Thingsboard Authors  
3 - *  
4 - * Licensed under the Apache License, Version 2.0 (the "License");  
5 - * you may not use this file except in compliance with the License.  
6 - * You may obtain a copy of the License at  
7 - *  
8 - * http://www.apache.org/licenses/LICENSE-2.0  
9 - *  
10 - * Unless required by applicable law or agreed to in writing, software  
11 - * distributed under the License is distributed on an "AS IS" BASIS,  
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
13 - * See the License for the specific language governing permissions and  
14 - * limitations under the License.  
15 - */  
16 -package org.thingsboard.server.extensions.api.plugins.msg;  
17 -  
18 -import lombok.Getter;  
19 -import lombok.RequiredArgsConstructor;  
20 -import lombok.ToString;  
21 -import org.thingsboard.server.common.data.id.DeviceId;  
22 -import org.thingsboard.server.common.data.id.PluginId;  
23 -import org.thingsboard.server.common.data.id.TenantId;  
24 -import org.thingsboard.server.common.msg.cluster.ServerAddress;  
25 -import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;  
26 -import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;  
27 -  
28 -import java.util.Optional;  
29 -  
30 -/**  
31 - * @author Andrew Shvayka  
32 - */  
33 -@ToString  
34 -@RequiredArgsConstructor  
35 -public class ToDeviceRpcRequestPluginMsg implements ToDeviceActorNotificationMsg {  
36 -  
37 - private final ServerAddress serverAddress;  
38 - @Getter  
39 - private final PluginId pluginId;  
40 - @Getter  
41 - private final TenantId pluginTenantId;  
42 - @Getter  
43 - private final ToDeviceRpcRequest msg;  
44 -  
45 - public ToDeviceRpcRequestPluginMsg(PluginId pluginId, TenantId pluginTenantId, ToDeviceRpcRequest msg) {  
46 - this(null, pluginId, pluginTenantId, msg);  
47 - }  
48 -  
49 - public Optional<ServerAddress> getServerAddress() {  
50 - return Optional.ofNullable(serverAddress);  
51 - }  
52 -  
53 - @Override  
54 - public DeviceId getDeviceId() {  
55 - return msg.getDeviceId();  
56 - }  
57 -  
58 - @Override  
59 - public TenantId getTenantId() {  
60 - return msg.getTenantId();  
61 - }  
62 -}  
63 -  
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.api.rules; 16 package org.thingsboard.server.extensions.api.rules;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.extensions.api.component.ConfigurableComponent; 19 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
20 20
21 /** 21 /**
@@ -23,6 +23,6 @@ import org.thingsboard.server.extensions.api.component.ConfigurableComponent; @@ -23,6 +23,6 @@ import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
23 */ 23 */
24 public interface RuleFilter<T> extends ConfigurableComponent<T>, RuleLifecycleComponent { 24 public interface RuleFilter<T> extends ConfigurableComponent<T>, RuleLifecycleComponent {
25 25
26 - boolean filter(RuleContext ctx, ToDeviceActorMsg msg); 26 + boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg);
27 27
28 } 28 }
@@ -15,15 +15,13 @@ @@ -15,15 +15,13 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.api.rules; 16 package org.thingsboard.server.extensions.api.rules;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.extensions.api.component.ConfigurableComponent; 19 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
20 20
21 -import javax.script.ScriptException;  
22 -  
23 /** 21 /**
24 * @author Andrew Shvayka 22 * @author Andrew Shvayka
25 */ 23 */
26 public interface RuleProcessor<T> extends ConfigurableComponent<T>, RuleLifecycleComponent { 24 public interface RuleProcessor<T> extends ConfigurableComponent<T>, RuleLifecycleComponent {
27 25
28 - RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg msg) throws RuleException; 26 + RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException;
29 } 27 }
@@ -20,7 +20,7 @@ import org.apache.velocity.Template; @@ -20,7 +20,7 @@ import org.apache.velocity.Template;
20 import org.apache.velocity.VelocityContext; 20 import org.apache.velocity.VelocityContext;
21 import org.apache.velocity.runtime.parser.ParseException; 21 import org.apache.velocity.runtime.parser.ParseException;
22 import org.springframework.util.StringUtils; 22 import org.springframework.util.StringUtils;
23 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 23 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 import org.thingsboard.server.extensions.api.component.Action; 25 import org.thingsboard.server.extensions.api.component.Action;
26 import org.thingsboard.server.extensions.api.plugins.PluginAction; 26 import org.thingsboard.server.extensions.api.plugins.PluginAction;
@@ -74,7 +74,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug @@ -74,7 +74,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug
74 } 74 }
75 75
76 @Override 76 @Override
77 - public Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData metadata) { 77 + public Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData metadata) {
78 String sendFlag = configuration.getSendFlag(); 78 String sendFlag = configuration.getSendFlag();
79 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) { 79 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) {
80 VelocityContext context = VelocityUtils.createContext(metadata); 80 VelocityContext context = VelocityUtils.createContext(metadata);
@@ -86,7 +86,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug @@ -86,7 +86,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug
86 bccTemplate.ifPresent(t -> builder.bcc(VelocityUtils.merge(t, context))); 86 bccTemplate.ifPresent(t -> builder.bcc(VelocityUtils.merge(t, context)));
87 subjectTemplate.ifPresent(t -> builder.subject(VelocityUtils.merge(t, context))); 87 subjectTemplate.ifPresent(t -> builder.subject(VelocityUtils.merge(t, context)));
88 bodyTemplate.ifPresent(t -> builder.body(VelocityUtils.merge(t, context))); 88 bodyTemplate.ifPresent(t -> builder.body(VelocityUtils.merge(t, context)));
89 - return Optional.of(new SendMailRuleToPluginActionMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), toDeviceActorMsg.getDeviceId(), 89 + return Optional.of(new SendMailRuleToPluginActionMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), deviceToDeviceActorMsg.getDeviceId(),
90 builder.build())); 90 builder.build()));
91 } else { 91 } else {
92 return Optional.empty(); 92 return Optional.empty();
@@ -16,9 +16,10 @@ @@ -16,9 +16,10 @@
16 package org.thingsboard.server.extensions.core.action.rpc; 16 package org.thingsboard.server.extensions.core.action.rpc;
17 17
18 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; 18 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg;
19 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 19 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
20 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 20 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
21 -import org.thingsboard.server.common.msg.session.MsgType; 21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  22 +import org.thingsboard.server.common.msg.session.SessionMsgType;
22 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 23 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
23 import org.thingsboard.server.extensions.api.component.Action; 24 import org.thingsboard.server.extensions.api.component.Action;
24 import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration; 25 import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration;
@@ -41,12 +42,12 @@ public class RpcPluginAction extends SimpleRuleLifecycleComponent implements Plu @@ -41,12 +42,12 @@ public class RpcPluginAction extends SimpleRuleLifecycleComponent implements Plu
41 } 42 }
42 43
43 @Override 44 @Override
44 - public Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) {  
45 - FromDeviceMsg msg = toDeviceActorMsg.getPayload();  
46 - if (msg.getMsgType() == MsgType.TO_SERVER_RPC_REQUEST) { 45 + public Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) {
  46 + FromDeviceMsg msg = deviceToDeviceActorMsg.getPayload();
  47 + if (msg.getMsgType() == SessionMsgType.TO_SERVER_RPC_REQUEST) {
47 ToServerRpcRequestMsg payload = (ToServerRpcRequestMsg) msg; 48 ToServerRpcRequestMsg payload = (ToServerRpcRequestMsg) msg;
48 - return Optional.of(new RpcRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(),  
49 - toDeviceActorMsg.getDeviceId(), payload)); 49 + return Optional.of(new RpcRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(),
  50 + deviceToDeviceActorMsg.getDeviceId(), payload));
50 } else { 51 } else {
51 return Optional.empty(); 52 return Optional.empty();
52 } 53 }
@@ -20,7 +20,7 @@ import org.apache.velocity.Template; @@ -20,7 +20,7 @@ import org.apache.velocity.Template;
20 import org.apache.velocity.VelocityContext; 20 import org.apache.velocity.VelocityContext;
21 import org.apache.velocity.runtime.parser.ParseException; 21 import org.apache.velocity.runtime.parser.ParseException;
22 import org.springframework.util.StringUtils; 22 import org.springframework.util.StringUtils;
23 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 23 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
24 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 import org.thingsboard.server.extensions.api.component.Action; 25 import org.thingsboard.server.extensions.api.component.Action;
26 import org.thingsboard.server.extensions.api.plugins.PluginAction; 26 import org.thingsboard.server.extensions.api.plugins.PluginAction;
@@ -64,7 +64,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem @@ -64,7 +64,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem
64 } 64 }
65 65
66 @Override 66 @Override
67 - public Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData metadata) { 67 + public Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData metadata) {
68 String sendFlag = configuration.getSendFlag(); 68 String sendFlag = configuration.getSendFlag();
69 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) { 69 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) {
70 VelocityContext context = VelocityUtils.createContext(metadata); 70 VelocityContext context = VelocityUtils.createContext(metadata);
@@ -77,7 +77,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem @@ -77,7 +77,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem
77 rpcCallMethodTemplate.ifPresent(t -> builder.rpcCallMethod(VelocityUtils.merge(t, context))); 77 rpcCallMethodTemplate.ifPresent(t -> builder.rpcCallMethod(VelocityUtils.merge(t, context)));
78 rpcCallBodyTemplate.ifPresent(t -> builder.rpcCallBody(VelocityUtils.merge(t, context))); 78 rpcCallBodyTemplate.ifPresent(t -> builder.rpcCallBody(VelocityUtils.merge(t, context)));
79 builder.rpcCallTimeoutInSec(configuration.getRpcCallTimeoutInSec()); 79 builder.rpcCallTimeoutInSec(configuration.getRpcCallTimeoutInSec());
80 - return Optional.of(new ServerSideRpcCallRuleToPluginActionMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(), toDeviceActorMsg.getDeviceId(), 80 + return Optional.of(new ServerSideRpcCallRuleToPluginActionMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(), deviceToDeviceActorMsg.getDeviceId(),
81 builder.build())); 81 builder.build()));
82 } else { 82 } else {
83 return Optional.empty(); 83 return Optional.empty();
@@ -19,9 +19,10 @@ import org.springframework.util.StringUtils; @@ -19,9 +19,10 @@ import org.springframework.util.StringUtils;
19 import org.thingsboard.server.common.msg.core.GetAttributesRequest; 19 import org.thingsboard.server.common.msg.core.GetAttributesRequest;
20 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; 20 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
21 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; 21 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest;
22 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 22 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
23 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 23 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
24 -import org.thingsboard.server.common.msg.session.MsgType; 24 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  25 +import org.thingsboard.server.common.msg.session.SessionMsgType;
25 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 26 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
26 import org.thingsboard.server.extensions.api.component.Action; 27 import org.thingsboard.server.extensions.api.component.Action;
27 import org.thingsboard.server.extensions.api.plugins.PluginAction; 28 import org.thingsboard.server.extensions.api.plugins.PluginAction;
@@ -50,20 +51,20 @@ public class TelemetryPluginAction extends SimpleRuleLifecycleComponent implemen @@ -50,20 +51,20 @@ public class TelemetryPluginAction extends SimpleRuleLifecycleComponent implemen
50 } 51 }
51 52
52 @Override 53 @Override
53 - public Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg toDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) {  
54 - FromDeviceMsg msg = toDeviceActorMsg.getPayload();  
55 - if (msg.getMsgType() == MsgType.POST_TELEMETRY_REQUEST) { 54 + public Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd) {
  55 + FromDeviceMsg msg = deviceToDeviceActorMsg.getPayload();
  56 + if (msg.getMsgType() == SessionMsgType.POST_TELEMETRY_REQUEST) {
56 TelemetryUploadRequest payload = (TelemetryUploadRequest) msg; 57 TelemetryUploadRequest payload = (TelemetryUploadRequest) msg;
57 - return Optional.of(new TelemetryUploadRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(),  
58 - toDeviceActorMsg.getDeviceId(), payload, ttl));  
59 - } else if (msg.getMsgType() == MsgType.POST_ATTRIBUTES_REQUEST) { 58 + return Optional.of(new TelemetryUploadRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(),
  59 + deviceToDeviceActorMsg.getDeviceId(), payload, ttl));
  60 + } else if (msg.getMsgType() == SessionMsgType.POST_ATTRIBUTES_REQUEST) {
60 UpdateAttributesRequest payload = (UpdateAttributesRequest) msg; 61 UpdateAttributesRequest payload = (UpdateAttributesRequest) msg;
61 - return Optional.of(new UpdateAttributesRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(),  
62 - toDeviceActorMsg.getDeviceId(), payload));  
63 - } else if (msg.getMsgType() == MsgType.GET_ATTRIBUTES_REQUEST) { 62 + return Optional.of(new UpdateAttributesRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(),
  63 + deviceToDeviceActorMsg.getDeviceId(), payload));
  64 + } else if (msg.getMsgType() == SessionMsgType.GET_ATTRIBUTES_REQUEST) {
64 GetAttributesRequest payload = (GetAttributesRequest) msg; 65 GetAttributesRequest payload = (GetAttributesRequest) msg;
65 - return Optional.of(new GetAttributesRequestRuleToPluginMsg(toDeviceActorMsg.getTenantId(), toDeviceActorMsg.getCustomerId(),  
66 - toDeviceActorMsg.getDeviceId(), payload)); 66 + return Optional.of(new GetAttributesRequestRuleToPluginMsg(deviceToDeviceActorMsg.getTenantId(), deviceToDeviceActorMsg.getCustomerId(),
  67 + deviceToDeviceActorMsg.getDeviceId(), payload));
67 } else { 68 } else {
68 return Optional.empty(); 69 return Optional.empty();
69 } 70 }
@@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j; @@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j;
19 import org.apache.velocity.Template; 19 import org.apache.velocity.Template;
20 import org.apache.velocity.VelocityContext; 20 import org.apache.velocity.VelocityContext;
21 import org.apache.velocity.runtime.parser.ParseException; 21 import org.apache.velocity.runtime.parser.ParseException;
22 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 22 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
23 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 23 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
24 import org.thingsboard.server.common.msg.session.ToDeviceMsg; 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 import org.thingsboard.server.extensions.api.plugins.PluginAction; 25 import org.thingsboard.server.extensions.api.plugins.PluginAction;
@@ -52,7 +52,7 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi @@ -52,7 +52,7 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi
52 } 52 }
53 53
54 @Override 54 @Override
55 - public Optional<RuleToPluginMsg> convert(RuleContext ctx, ToDeviceActorMsg msg, RuleProcessingMetaData deviceMsgMd) { 55 + public Optional<RuleToPluginMsg> convert(RuleContext ctx, DeviceToDeviceActorMsg msg, RuleProcessingMetaData deviceMsgMd) {
56 FromDeviceRequestMsg payload; 56 FromDeviceRequestMsg payload;
57 if (msg.getPayload() instanceof FromDeviceRequestMsg) { 57 if (msg.getPayload() instanceof FromDeviceRequestMsg) {
58 payload = (FromDeviceRequestMsg) msg.getPayload(); 58 payload = (FromDeviceRequestMsg) msg.getPayload();
@@ -70,14 +70,14 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi @@ -70,14 +70,14 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi
70 return Optional.empty(); 70 return Optional.empty();
71 } 71 }
72 72
73 - protected String getMsgBody(RuleContext ctx, ToDeviceActorMsg msg) { 73 + protected String getMsgBody(RuleContext ctx, DeviceToDeviceActorMsg msg) {
74 log.trace("Creating context for: {} and payload {}", ctx.getDeviceMetaData(), msg.getPayload()); 74 log.trace("Creating context for: {} and payload {}", ctx.getDeviceMetaData(), msg.getPayload());
75 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload()); 75 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload());
76 return VelocityUtils.merge(template, context); 76 return VelocityUtils.merge(template, context);
77 } 77 }
78 78
79 abstract protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, 79 abstract protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx,
80 - ToDeviceActorMsg msg, 80 + DeviceToDeviceActorMsg msg,
81 FromDeviceRequestMsg payload); 81 FromDeviceRequestMsg payload);
82 82
83 @Override 83 @Override
@@ -16,8 +16,7 @@ @@ -16,8 +16,7 @@
16 package org.thingsboard.server.extensions.core.filter; 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 -import org.thingsboard.server.common.data.kv.KvEntry;  
20 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 19 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
21 import org.thingsboard.server.extensions.api.rules.RuleContext; 20 import org.thingsboard.server.extensions.api.rules.RuleContext;
22 import org.thingsboard.server.extensions.api.rules.RuleFilter; 21 import org.thingsboard.server.extensions.api.rules.RuleFilter;
23 22
@@ -39,7 +38,7 @@ public abstract class BasicJsFilter implements RuleFilter<JsFilterConfiguration> @@ -39,7 +38,7 @@ public abstract class BasicJsFilter implements RuleFilter<JsFilterConfiguration>
39 } 38 }
40 39
41 @Override 40 @Override
42 - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { 41 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
43 try { 42 try {
44 return doFilter(ctx, msg); 43 return doFilter(ctx, msg);
45 } catch (ScriptException e) { 44 } catch (ScriptException e) {
@@ -48,7 +47,7 @@ public abstract class BasicJsFilter implements RuleFilter<JsFilterConfiguration> @@ -48,7 +47,7 @@ public abstract class BasicJsFilter implements RuleFilter<JsFilterConfiguration>
48 } 47 }
49 } 48 }
50 49
51 - protected abstract boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException; 50 + protected abstract boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException;
52 51
53 @Override 52 @Override
54 public void resume() { 53 public void resume() {
@@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter; @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; 19 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest;
20 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 20 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
21 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 21 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
22 import org.thingsboard.server.extensions.api.component.Filter; 22 import org.thingsboard.server.extensions.api.component.Filter;
23 import org.thingsboard.server.extensions.api.device.DeviceAttributes; 23 import org.thingsboard.server.extensions.api.device.DeviceAttributes;
@@ -34,7 +34,7 @@ import javax.script.ScriptException; @@ -34,7 +34,7 @@ import javax.script.ScriptException;
34 public class DeviceAttributesFilter extends BasicJsFilter { 34 public class DeviceAttributesFilter extends BasicJsFilter {
35 35
36 @Override 36 @Override
37 - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException { 37 + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException {
38 return evaluator.execute(toBindings(ctx.getDeviceMetaData().getDeviceAttributes(), msg != null ? msg.getPayload() : null)); 38 return evaluator.execute(toBindings(ctx.getDeviceMetaData().getDeviceAttributes(), msg != null ? msg.getPayload() : null));
39 } 39 }
40 40
@@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.core.filter; @@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.core.filter;
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.thingsboard.server.common.data.kv.KvEntry; 19 import org.thingsboard.server.common.data.kv.KvEntry;
20 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; 20 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
21 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 21 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
22 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 22 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
23 import org.thingsboard.server.extensions.api.component.Filter; 23 import org.thingsboard.server.extensions.api.component.Filter;
24 import org.thingsboard.server.extensions.api.rules.RuleContext; 24 import org.thingsboard.server.extensions.api.rules.RuleContext;
@@ -34,7 +34,7 @@ import java.util.List; @@ -34,7 +34,7 @@ import java.util.List;
34 public class DeviceTelemetryFilter extends BasicJsFilter { 34 public class DeviceTelemetryFilter extends BasicJsFilter {
35 35
36 @Override 36 @Override
37 - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException { 37 + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException {
38 FromDeviceMsg deviceMsg = msg.getPayload(); 38 FromDeviceMsg deviceMsg = msg.getPayload();
39 if (deviceMsg instanceof TelemetryUploadRequest) { 39 if (deviceMsg instanceof TelemetryUploadRequest) {
40 TelemetryUploadRequest telemetryMsg = (TelemetryUploadRequest) deviceMsg; 40 TelemetryUploadRequest telemetryMsg = (TelemetryUploadRequest) deviceMsg;
@@ -16,8 +16,7 @@ @@ -16,8 +16,7 @@
16 package org.thingsboard.server.extensions.core.filter; 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 -import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg;  
20 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 19 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
21 import org.thingsboard.server.extensions.api.component.Filter; 20 import org.thingsboard.server.extensions.api.component.Filter;
22 import org.thingsboard.server.extensions.api.rules.RuleContext; 21 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 import org.thingsboard.server.extensions.api.rules.RuleFilter; 22 import org.thingsboard.server.extensions.api.rules.RuleFilter;
@@ -27,8 +26,6 @@ import java.util.Arrays; @@ -27,8 +26,6 @@ import java.util.Arrays;
27 import java.util.Set; 26 import java.util.Set;
28 import java.util.stream.Collectors; 27 import java.util.stream.Collectors;
29 28
30 -import static org.thingsboard.server.common.msg.session.MsgType.TO_SERVER_RPC_REQUEST;  
31 -  
32 /** 29 /**
33 * @author Andrew Shvayka 30 * @author Andrew Shvayka
34 */ 31 */
@@ -46,7 +43,7 @@ public class DeviceTypeFilter extends SimpleRuleLifecycleComponent implements Ru @@ -46,7 +43,7 @@ public class DeviceTypeFilter extends SimpleRuleLifecycleComponent implements Ru
46 } 43 }
47 44
48 @Override 45 @Override
49 - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { 46 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
50 return deviceTypes.contains(ctx.getDeviceMetaData().getDeviceType()); 47 return deviceTypes.contains(ctx.getDeviceMetaData().getDeviceType());
51 } 48 }
52 } 49 }
@@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter; @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; 19 import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg;
20 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 20 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
21 import org.thingsboard.server.extensions.api.component.Filter; 21 import org.thingsboard.server.extensions.api.component.Filter;
22 import org.thingsboard.server.extensions.api.rules.RuleContext; 22 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 import org.thingsboard.server.extensions.api.rules.RuleFilter; 23 import org.thingsboard.server.extensions.api.rules.RuleFilter;
@@ -27,7 +27,7 @@ import java.util.Arrays; @@ -27,7 +27,7 @@ import java.util.Arrays;
27 import java.util.Set; 27 import java.util.Set;
28 import java.util.stream.Collectors; 28 import java.util.stream.Collectors;
29 29
30 -import static org.thingsboard.server.common.msg.session.MsgType.TO_SERVER_RPC_REQUEST; 30 +import static org.thingsboard.server.common.msg.session.SessionMsgType.TO_SERVER_RPC_REQUEST;
31 31
32 /** 32 /**
33 * @author Andrew Shvayka 33 * @author Andrew Shvayka
@@ -46,7 +46,7 @@ public class MethodNameFilter extends SimpleRuleLifecycleComponent implements Ru @@ -46,7 +46,7 @@ public class MethodNameFilter extends SimpleRuleLifecycleComponent implements Ru
46 } 46 }
47 47
48 @Override 48 @Override
49 - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) { 49 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
50 if (msg.getPayload().getMsgType() == TO_SERVER_RPC_REQUEST) { 50 if (msg.getPayload().getMsgType() == TO_SERVER_RPC_REQUEST) {
51 return methods.contains(((ToServerRpcRequestMsg) msg.getPayload()).getMethod()); 51 return methods.contains(((ToServerRpcRequestMsg) msg.getPayload()).getMethod());
52 } else { 52 } else {
@@ -16,8 +16,9 @@ @@ -16,8 +16,9 @@
16 package org.thingsboard.server.extensions.core.filter; 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg;  
20 -import org.thingsboard.server.common.msg.session.MsgType; 19 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
  20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 import org.thingsboard.server.extensions.api.component.Filter; 22 import org.thingsboard.server.extensions.api.component.Filter;
22 import org.thingsboard.server.extensions.api.rules.RuleContext; 23 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 import org.thingsboard.server.extensions.api.rules.RuleFilter; 24 import org.thingsboard.server.extensions.api.rules.RuleFilter;
@@ -35,30 +36,30 @@ import java.util.stream.Collectors; @@ -35,30 +36,30 @@ import java.util.stream.Collectors;
35 @Slf4j 36 @Slf4j
36 public class MsgTypeFilter extends SimpleRuleLifecycleComponent implements RuleFilter<MsgTypeFilterConfiguration> { 37 public class MsgTypeFilter extends SimpleRuleLifecycleComponent implements RuleFilter<MsgTypeFilterConfiguration> {
37 38
38 - private List<MsgType> msgTypes; 39 + private List<SessionMsgType> sessionMsgTypes;
39 40
40 @Override 41 @Override
41 public void init(MsgTypeFilterConfiguration configuration) { 42 public void init(MsgTypeFilterConfiguration configuration) {
42 - msgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> { 43 + sessionMsgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> {
43 switch (type) { 44 switch (type) {
44 case "GET_ATTRIBUTES": 45 case "GET_ATTRIBUTES":
45 - return MsgType.GET_ATTRIBUTES_REQUEST; 46 + return SessionMsgType.GET_ATTRIBUTES_REQUEST;
46 case "POST_ATTRIBUTES": 47 case "POST_ATTRIBUTES":
47 - return MsgType.POST_ATTRIBUTES_REQUEST; 48 + return SessionMsgType.POST_ATTRIBUTES_REQUEST;
48 case "POST_TELEMETRY": 49 case "POST_TELEMETRY":
49 - return MsgType.POST_TELEMETRY_REQUEST; 50 + return SessionMsgType.POST_TELEMETRY_REQUEST;
50 case "RPC_REQUEST": 51 case "RPC_REQUEST":
51 - return MsgType.TO_SERVER_RPC_REQUEST; 52 + return SessionMsgType.TO_SERVER_RPC_REQUEST;
52 default: 53 default:
53 - throw new InvalidParameterException("Can't map " + type + " to " + MsgType.class.getName() + "!"); 54 + throw new InvalidParameterException("Can't map " + type + " to " + SessionMsgType.class.getName() + "!");
54 } 55 }
55 }).collect(Collectors.toList()); 56 }).collect(Collectors.toList());
56 } 57 }
57 58
58 @Override 59 @Override
59 - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) {  
60 - for (MsgType msgType : msgTypes) {  
61 - if (msgType == msg.getPayload().getMsgType()) { 60 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
  61 + for (SessionMsgType sessionMsgType : sessionMsgTypes) {
  62 + if (sessionMsgType == msg.getPayload().getMsgType()) {
62 return true; 63 return true;
63 } 64 }
64 } 65 }
@@ -22,7 +22,7 @@ import org.apache.velocity.VelocityContext; @@ -22,7 +22,7 @@ import org.apache.velocity.VelocityContext;
22 import org.apache.velocity.runtime.parser.ParseException; 22 import org.apache.velocity.runtime.parser.ParseException;
23 import org.thingsboard.server.common.data.DataConstants; 23 import org.thingsboard.server.common.data.DataConstants;
24 import org.thingsboard.server.common.data.Event; 24 import org.thingsboard.server.common.data.Event;
25 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 25 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
26 import org.thingsboard.server.extensions.api.component.Processor; 26 import org.thingsboard.server.extensions.api.component.Processor;
27 import org.thingsboard.server.extensions.api.rules.*; 27 import org.thingsboard.server.extensions.api.rules.*;
28 import org.thingsboard.server.extensions.core.utils.VelocityUtils; 28 import org.thingsboard.server.extensions.core.utils.VelocityUtils;
@@ -57,7 +57,7 @@ public class AlarmDeduplicationProcessor extends SimpleRuleLifecycleComponent @@ -57,7 +57,7 @@ public class AlarmDeduplicationProcessor extends SimpleRuleLifecycleComponent
57 } 57 }
58 58
59 @Override 59 @Override
60 - public RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg msg) throws RuleException { 60 + public RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException {
61 RuleProcessingMetaData md = new RuleProcessingMetaData(); 61 RuleProcessingMetaData md = new RuleProcessingMetaData();
62 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload()); 62 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload());
63 String alarmId = VelocityUtils.merge(alarmIdTemplate, context); 63 String alarmId = VelocityUtils.merge(alarmIdTemplate, context);
@@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus; @@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus;
27 import org.thingsboard.server.common.data.kv.KvEntry; 27 import org.thingsboard.server.common.data.kv.KvEntry;
28 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; 28 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
29 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest; 29 import org.thingsboard.server.common.msg.core.UpdateAttributesRequest;
30 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 30 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
31 import org.thingsboard.server.common.msg.session.FromDeviceMsg; 31 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
32 import org.thingsboard.server.extensions.api.component.Processor; 32 import org.thingsboard.server.extensions.api.component.Processor;
33 import org.thingsboard.server.extensions.api.rules.RuleContext; 33 import org.thingsboard.server.extensions.api.rules.RuleContext;
@@ -102,7 +102,7 @@ public class AlarmProcessor implements RuleProcessor<AlarmProcessorConfiguration @@ -102,7 +102,7 @@ public class AlarmProcessor implements RuleProcessor<AlarmProcessorConfiguration
102 } 102 }
103 103
104 @Override 104 @Override
105 - public RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg wrapper) throws RuleException { 105 + public RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg wrapper) throws RuleException {
106 RuleProcessingMetaData md = new RuleProcessingMetaData(); 106 RuleProcessingMetaData md = new RuleProcessingMetaData();
107 107
108 FromDeviceMsg msg = wrapper.getPayload(); 108 FromDeviceMsg msg = wrapper.getPayload();
@@ -17,7 +17,8 @@ package org.thingsboard.server.extensions.kafka.action; @@ -17,7 +17,8 @@ package org.thingsboard.server.extensions.kafka.action;
17 17
18 import lombok.Builder; 18 import lombok.Builder;
19 import lombok.Data; 19 import lombok.Data;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  21 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 22
22 import java.io.Serializable; 23 import java.io.Serializable;
23 24
@@ -30,5 +31,5 @@ public class KafkaActionPayload implements Serializable { @@ -30,5 +31,5 @@ public class KafkaActionPayload implements Serializable {
30 private final boolean sync; 31 private final boolean sync;
31 32
32 private final Integer requestId; 33 private final Integer requestId;
33 - private final MsgType msgType; 34 + private final SessionMsgType sessionMsgType;
34 } 35 }
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 package org.thingsboard.server.extensions.kafka.action; 16 package org.thingsboard.server.extensions.kafka.action;
17 17
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 19 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
20 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 20 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
21 import org.thingsboard.server.extensions.api.component.Action; 21 import org.thingsboard.server.extensions.api.component.Action;
22 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 22 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -30,7 +30,7 @@ import java.util.Optional; @@ -30,7 +30,7 @@ import java.util.Optional;
30 public class KafkaPluginAction extends AbstractTemplatePluginAction<KafkaPluginActionConfiguration> { 30 public class KafkaPluginAction extends AbstractTemplatePluginAction<KafkaPluginActionConfiguration> {
31 31
32 @Override 32 @Override
33 - protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { 33 + protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) {
34 KafkaActionPayload.KafkaActionPayloadBuilder builder = KafkaActionPayload.builder(); 34 KafkaActionPayload.KafkaActionPayloadBuilder builder = KafkaActionPayload.builder();
35 builder.msgType(payload.getMsgType()); 35 builder.msgType(payload.getMsgType());
36 builder.requestId(payload.getRequestId()); 36 builder.requestId(payload.getRequestId());
@@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.mqtt.action; @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.mqtt.action;
17 17
18 import lombok.Builder; 18 import lombok.Builder;
19 import lombok.Data; 19 import lombok.Data;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 21
22 import java.io.Serializable; 22 import java.io.Serializable;
23 23
@@ -30,5 +30,5 @@ public class MqttActionPayload implements Serializable { @@ -30,5 +30,5 @@ public class MqttActionPayload implements Serializable {
30 private final String msgBody; 30 private final String msgBody;
31 31
32 private final Integer requestId; 32 private final Integer requestId;
33 - private final MsgType msgType; 33 + private final SessionMsgType sessionMsgType;
34 } 34 }
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.mqtt.action; 16 package org.thingsboard.server.extensions.mqtt.action;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 import org.thingsboard.server.extensions.api.component.Action; 20 import org.thingsboard.server.extensions.api.component.Action;
21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -28,7 +28,7 @@ import java.util.Optional; @@ -28,7 +28,7 @@ import java.util.Optional;
28 public class MqttPluginAction extends AbstractTemplatePluginAction<MqttPluginActionConfiguration> { 28 public class MqttPluginAction extends AbstractTemplatePluginAction<MqttPluginActionConfiguration> {
29 29
30 @Override 30 @Override
31 - protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { 31 + protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) {
32 MqttActionPayload.MqttActionPayloadBuilder builder = MqttActionPayload.builder(); 32 MqttActionPayload.MqttActionPayloadBuilder builder = MqttActionPayload.builder();
33 builder.sync(configuration.isSync()); 33 builder.sync(configuration.isSync());
34 builder.msgType(payload.getMsgType()); 34 builder.msgType(payload.getMsgType());
@@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.rabbitmq.action; @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.rabbitmq.action;
17 17
18 import lombok.Builder; 18 import lombok.Builder;
19 import lombok.Data; 19 import lombok.Data;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 21
22 import java.io.Serializable; 22 import java.io.Serializable;
23 23
@@ -35,5 +35,5 @@ public class RabbitMqActionPayload implements Serializable { @@ -35,5 +35,5 @@ public class RabbitMqActionPayload implements Serializable {
35 35
36 private final boolean sync; 36 private final boolean sync;
37 private final Integer requestId; 37 private final Integer requestId;
38 - private final MsgType msgType; 38 + private final SessionMsgType sessionMsgType;
39 } 39 }
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.rabbitmq.action; 16 package org.thingsboard.server.extensions.rabbitmq.action;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 import org.thingsboard.server.extensions.api.component.Action; 20 import org.thingsboard.server.extensions.api.component.Action;
21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -32,7 +32,7 @@ import java.util.Optional; @@ -32,7 +32,7 @@ import java.util.Optional;
32 public class RabbitMqPluginAction extends AbstractTemplatePluginAction<RabbitMqPluginActionConfiguration> { 32 public class RabbitMqPluginAction extends AbstractTemplatePluginAction<RabbitMqPluginActionConfiguration> {
33 33
34 @Override 34 @Override
35 - protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { 35 + protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) {
36 RabbitMqActionPayload.RabbitMqActionPayloadBuilder builder = RabbitMqActionPayload.builder(); 36 RabbitMqActionPayload.RabbitMqActionPayloadBuilder builder = RabbitMqActionPayload.builder();
37 builder.sync(configuration.isSync()); 37 builder.sync(configuration.isSync());
38 builder.exchange(configuration.getExchange()); 38 builder.exchange(configuration.getExchange());
@@ -19,7 +19,8 @@ import lombok.Builder; @@ -19,7 +19,8 @@ import lombok.Builder;
19 import lombok.Data; 19 import lombok.Data;
20 import org.springframework.http.HttpMethod; 20 import org.springframework.http.HttpMethod;
21 import org.springframework.http.HttpStatus; 21 import org.springframework.http.HttpStatus;
22 -import org.thingsboard.server.common.msg.session.MsgType; 22 +import org.thingsboard.server.common.msg.session.SessionMsgType;
  23 +import org.thingsboard.server.common.msg.session.SessionMsgType;
23 24
24 import java.io.Serializable; 25 import java.io.Serializable;
25 26
@@ -33,5 +34,5 @@ public class RestApiCallActionPayload implements Serializable { @@ -33,5 +34,5 @@ public class RestApiCallActionPayload implements Serializable {
33 private final boolean sync; 34 private final boolean sync;
34 35
35 private final Integer requestId; 36 private final Integer requestId;
36 - private final MsgType msgType; 37 + private final SessionMsgType sessionMsgType;
37 } 38 }
@@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.rest.action; @@ -18,7 +18,7 @@ package org.thingsboard.server.extensions.rest.action;
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.springframework.http.HttpMethod; 19 import org.springframework.http.HttpMethod;
20 import org.springframework.http.HttpStatus; 20 import org.springframework.http.HttpStatus;
21 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 21 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
22 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 22 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
23 import org.thingsboard.server.extensions.api.component.Action; 23 import org.thingsboard.server.extensions.api.component.Action;
24 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 24 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -33,7 +33,7 @@ import java.util.Optional; @@ -33,7 +33,7 @@ import java.util.Optional;
33 public class RestApiCallPluginAction extends AbstractTemplatePluginAction<RestApiCallPluginActionConfiguration> { 33 public class RestApiCallPluginAction extends AbstractTemplatePluginAction<RestApiCallPluginActionConfiguration> {
34 34
35 @Override 35 @Override
36 - protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { 36 + protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) {
37 RestApiCallActionPayload.RestApiCallActionPayloadBuilder builder = RestApiCallActionPayload.builder(); 37 RestApiCallActionPayload.RestApiCallActionPayloadBuilder builder = RestApiCallActionPayload.builder();
38 builder.msgType(payload.getMsgType()); 38 builder.msgType(payload.getMsgType());
39 builder.requestId(payload.getRequestId()); 39 builder.requestId(payload.getRequestId());
@@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.sns.action; @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.sns.action;
17 17
18 import lombok.Builder; 18 import lombok.Builder;
19 import lombok.Data; 19 import lombok.Data;
20 -import org.thingsboard.server.common.msg.session.MsgType; 20 +import org.thingsboard.server.common.msg.session.SessionMsgType;
21 21
22 import java.io.Serializable; 22 import java.io.Serializable;
23 23
@@ -32,6 +32,6 @@ public class SnsTopicActionPayload implements Serializable { @@ -32,6 +32,6 @@ public class SnsTopicActionPayload implements Serializable {
32 private final String msgBody; 32 private final String msgBody;
33 33
34 private final Integer requestId; 34 private final Integer requestId;
35 - private final MsgType msgType; 35 + private final SessionMsgType sessionMsgType;
36 private final boolean sync; 36 private final boolean sync;
37 } 37 }
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 */ 15 */
16 package org.thingsboard.server.extensions.sns.action; 16 package org.thingsboard.server.extensions.sns.action;
17 17
18 -import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; 18 +import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 import org.thingsboard.server.extensions.api.component.Action; 20 import org.thingsboard.server.extensions.api.component.Action;
21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
@@ -31,7 +31,7 @@ import java.util.Optional; @@ -31,7 +31,7 @@ import java.util.Optional;
31 public class SnsTopicPluginAction extends AbstractTemplatePluginAction<SnsTopicPluginActionConfiguration> { 31 public class SnsTopicPluginAction extends AbstractTemplatePluginAction<SnsTopicPluginActionConfiguration> {
32 32
33 @Override 33 @Override
34 - protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { 34 + protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx, DeviceToDeviceActorMsg msg, FromDeviceRequestMsg payload) {
35 SnsTopicActionPayload.SnsTopicActionPayloadBuilder builder = SnsTopicActionPayload.builder(); 35 SnsTopicActionPayload.SnsTopicActionPayloadBuilder builder = SnsTopicActionPayload.builder();
36 builder.msgType(payload.getMsgType()); 36 builder.msgType(payload.getMsgType());
37 builder.requestId(payload.getRequestId()); 37 builder.requestId(payload.getRequestId());