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 61 import org.thingsboard.server.service.component.ComponentDiscoveryService;
62 62 import org.thingsboard.server.service.executors.DbCallbackExecutorService;
63 63 import org.thingsboard.server.service.mail.MailExecutorService;
  64 +import org.thingsboard.server.service.rpc.DeviceRpcService;
64 65 import org.thingsboard.server.service.script.JsExecutorService;
65 66 import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService;
66 67
... ... @@ -163,6 +164,10 @@ public class ActorSystemContext {
163 164
164 165 @Autowired
165 166 @Getter
  167 + private DeviceRpcService deviceRpcService;
  168 +
  169 + @Autowired
  170 + @Getter
166 171 @Setter
167 172 private PluginWebSocketMsgEndpoint wsMsgEndpoint;
168 173
... ... @@ -186,17 +191,13 @@ public class ActorSystemContext {
186 191 @Getter
187 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 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 199 @Getter
199   - private long pluginErrorPersistFrequency;
  200 + private long queuePersistenceTimeout;
200 201
201 202 @Value("${actors.rule.chain.error_persist_frequency}")
202 203 @Getter
... ... @@ -206,14 +207,6 @@ public class ActorSystemContext {
206 207 @Getter
207 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 210 @Value("${actors.statistics.enabled}")
218 211 @Getter
219 212 private boolean statisticsEnabled;
... ...
... ... @@ -29,13 +29,12 @@ import org.thingsboard.server.actors.shared.plugin.SystemPluginManager;
29 29 import org.thingsboard.server.actors.shared.rulechain.SystemRuleChainManager;
30 30 import org.thingsboard.server.actors.tenant.TenantActor;
31 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 32 import org.thingsboard.server.common.data.id.TenantId;
35 33 import org.thingsboard.server.common.data.page.PageDataIterable;
36 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 38 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
40 39 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
41 40 import org.thingsboard.server.dao.model.ModelConstants;
... ... @@ -90,12 +89,22 @@ public class AppActor extends RuleChainManagerActor {
90 89 @Override
91 90 protected boolean process(TbActorMsg msg) {
92 91 switch (msg.getMsgType()) {
  92 + case CLUSTER_EVENT_MSG:
  93 + broadcast(msg);
  94 + break;
93 95 case COMPONENT_LIFE_CYCLE_MSG:
94 96 onComponentLifecycleMsg((ComponentLifecycleMsg) msg);
95 97 break;
96 98 case SERVICE_TO_RULE_ENGINE_MSG:
97 99 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
98 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 108 default:
100 109 return false;
101 110 }
... ... @@ -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 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 128 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) {
156 129 ActorRef target;
157 130 if (SYSTEM_TENANT.equals(msg.getTenantId())) {
... ... @@ -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 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 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 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 24 import org.thingsboard.server.common.data.id.TenantId;
25 25 import org.thingsboard.server.common.msg.TbActorMsg;
26 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 30 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
29   -import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;
30 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 35 public class DeviceActor extends ContextAwareActor {
36 36
37 37 private final LoggingAdapter logger = Logging.getLogger(getContext().system(), this);
38 38
39   - private final TenantId tenantId;
40   - private final DeviceId deviceId;
41 39 private final DeviceActorMessageProcessor processor;
42 40
43 41 private DeviceActor(ActorSystemContext systemContext, TenantId tenantId, DeviceId deviceId) {
44 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 46 @Override
51 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 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 59 processor.processCredentialsUpdate();
70   - } else if (msg instanceof DeviceNameOrTypeUpdateMsg){
  60 + break;
  61 + case DEVICE_NAME_OR_TYPE_UPDATE_TO_DEVICE_ACTOR_MSG:
71 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 82 public static class ActorCreator extends ContextBasedCreator<DeviceActor> {
... ...
... ... @@ -18,31 +18,63 @@ package org.thingsboard.server.actors.device;
18 18 import akka.actor.ActorContext;
19 19 import akka.actor.ActorRef;
20 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 25 import org.thingsboard.server.actors.ActorSystemContext;
22 26 import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor;
23 27 import org.thingsboard.server.common.data.DataConstants;
24 28 import org.thingsboard.server.common.data.Device;
25 29 import org.thingsboard.server.common.data.id.DeviceId;
26 30 import org.thingsboard.server.common.data.id.SessionId;
  31 +import org.thingsboard.server.common.data.id.TenantId;
27 32 import org.thingsboard.server.common.data.kv.AttributeKey;
28 33 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  34 +import org.thingsboard.server.common.data.kv.KvEntry;
29 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 39 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
31 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 55 import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg;
35 56 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
36 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 61 import org.thingsboard.server.common.msg.session.SessionType;
39 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 65 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
42 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 78 import java.util.concurrent.ExecutionException;
47 79 import java.util.concurrent.TimeoutException;
48 80 import java.util.function.Consumer;
... ... @@ -54,25 +86,30 @@ import java.util.stream.Collectors;
54 86 */
55 87 public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
56 88
  89 + private final TenantId tenantId;
57 90 private final DeviceId deviceId;
58 91 private final Map<SessionId, SessionInfo> sessions;
59 92 private final Map<SessionId, SessionInfo> attributeSubscriptions;
60 93 private final Map<SessionId, SessionInfo> rpcSubscriptions;
61   -
62 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 99 private int rpcSeq = 0;
65 100 private String deviceName;
66 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 105 super(systemContext, logger);
  106 + this.tenantId = tenantId;
71 107 this.deviceId = deviceId;
72 108 this.sessions = new HashMap<>();
73 109 this.attributeSubscriptions = new HashMap<>();
74 110 this.rpcSubscriptions = new HashMap<>();
75 111 this.rpcPendingMap = new HashMap<>();
  112 + this.pendingMsgs = new HashMap<>();
76 113 initAttributes();
77 114 }
78 115
... ... @@ -81,19 +118,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
81 118 Device device = systemContext.getDeviceService().findDeviceById(deviceId);
82 119 this.deviceName = device.getName();
83 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 127 ToDeviceRpcRequest request = msg.getMsg();
98 128 ToDeviceRpcRequestBody body = request.getBody();
99 129 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg(
... ... @@ -120,9 +150,8 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
120 150 syncSessionSet.forEach(rpcSubscriptions::remove);
121 151
122 152 if (request.isOneway() && sent) {
123   - ToPluginRpcResponseDeviceMsg responsePluginMsg = toPluginRpcResponseMsg(msg, (String) null);
124   - context.parent().tell(responsePluginMsg, ActorRef.noSender());
125 153 logger.debug("[{}] Rpc command response sent [{}]!", deviceId, request.getId());
  154 + systemContext.getDeviceRpcService().process(new FromDeviceRpcResponse(msg.getMsg().getId(), null, null));
126 155 } else {
127 156 registerPendingRpcRequest(context, msg, sent, rpcRequest, timeout);
128 157 }
... ... @@ -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 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 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 173 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(msg.getId());
145 174 if (requestMd != null) {
146 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 222 ToDeviceRpcRequestBody body = request.getBody();
176 223 if (request.isOneway()) {
177 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 227 ToDeviceRpcRequestMsg rpcRequest = new ToDeviceRpcRequestMsg(
182 228 entry.getKey(),
... ... @@ -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 238 processSubscriptionCommands(context, msg);
193 239 processRpcResponses(context, msg);
194 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 300 void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) {
198   - refreshAttributes(msg);
199 301 if (attributeSubscriptions.size() > 0) {
200 302 ToDeviceMsg notification = null;
201 303 if (msg.isDeleted()) {
... ... @@ -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 331 SessionId sessionId = msg.getSessionId();
243 332 FromDeviceMsg inMsg = msg.getPayload();
244   - if (inMsg.getMsgType() == MsgType.TO_DEVICE_RPC_RESPONSE) {
  333 + if (inMsg.getMsgType() == SessionMsgType.TO_DEVICE_RPC_RESPONSE) {
245 334 logger.debug("[{}] Processing rpc command response [{}]", deviceId, sessionId);
246 335 ToDeviceRpcResponseMsg responseMsg = (ToDeviceRpcResponseMsg) inMsg;
247 336 ToDeviceRpcRequestMetadata requestMd = rpcPendingMap.remove(responseMsg.getRequestId());
248 337 boolean success = requestMd != null;
249 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 340 } else {
260 341 logger.debug("[{}] Rpc command response [{}] is stale!", deviceId, responseMsg.getRequestId());
261 342 }
262 343 if (msg.getSessionType() == SessionType.SYNC) {
263 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 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 353 if (!msg.isAdded()) {
273 354 logger.debug("[{}] Clearing attributes/rpc subscription for server [{}]", deviceId, msg.getServerAddress());
274 355 Predicate<Map.Entry<SessionId, SessionInfo>> filter = e -> e.getValue().getServer()
... ... @@ -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 363 SessionId sessionId = msg.getSessionId();
315 364 SessionType sessionType = msg.getSessionType();
316 365 FromDeviceMsg inMsg = msg.getPayload();
317   - if (inMsg.getMsgType() == MsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) {
  366 + if (inMsg.getMsgType() == SessionMsgType.SUBSCRIBE_ATTRIBUTES_REQUEST) {
318 367 logger.debug("[{}] Registering attributes subscription for session [{}]", deviceId, sessionId);
319 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 370 logger.debug("[{}] Canceling attributes subscription for session [{}]", deviceId, sessionId);
322 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 373 logger.debug("[{}] Registering rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType);
325 374 rpcSubscriptions.put(sessionId, new SessionInfo(sessionType, msg.getServerAddress()));
326 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 377 logger.debug("[{}] Canceling rpc subscription for session [{}][{}]", deviceId, sessionId, sessionType);
329 378 rpcSubscriptions.remove(sessionId);
330 379 }
331 380 }
332 381
333   - private void processSessionStateMsgs(ToDeviceActorMsg msg) {
  382 + private void processSessionStateMsgs(DeviceToDeviceActorMsg msg) {
334 383 SessionId sessionId = msg.getSessionId();
335 384 FromDeviceMsg inMsg = msg.getPayload();
336 385 if (inMsg instanceof SessionOpenMsg) {
... ... @@ -364,7 +413,7 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
364 413 }
365 414 }
366 415
367   - public void processCredentialsUpdate() {
  416 + void processCredentialsUpdate() {
368 417 sessions.forEach((k, v) -> {
369 418 sendMsgToSessionActor(new BasicToDeviceSessionActorMsg(new SessionCloseNotification(), k), v.getServer());
370 419 });
... ... @@ -372,8 +421,12 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso
372 421 rpcSubscriptions.clear();
373 422 }
374 423
375   - public void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) {
  424 + void processNameOrTypeUpdate(DeviceNameOrTypeUpdateMsg msg) {
376 425 this.deviceName = msg.getDeviceName();
377 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 16 package org.thingsboard.server.actors.device;
17 17
18 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 22 * @author Andrew Shvayka
23 23 */
24 24 @Data
25 25 public class ToDeviceRpcRequestMetadata {
26   - private final ToDeviceRpcRequestPluginMsg msg;
  26 + private final ToDeviceRpcRequestMsg msg;
27 27 private final boolean sent;
28 28 }
... ...
... ... @@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.id.TenantId;
26 26 import org.thingsboard.server.common.msg.TbActorMsg;
27 27 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
28 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 30 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
31 31 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
32 32 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
... ... @@ -153,6 +153,7 @@ public class PluginActor extends ComponentActor<PluginId, PluginActorMessageProc
153 153
154 154 @Override
155 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 30 import org.thingsboard.server.common.msg.cluster.ServerAddress;
31 31 import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
32 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 35 import org.thingsboard.server.extensions.api.plugins.Plugin;
35 36 import org.thingsboard.server.extensions.api.plugins.PluginInitializationException;
36 37 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
37 38 import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg;
38 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 41 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
41 42 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
42 43 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
... ... @@ -108,7 +109,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId>
108 109 } catch (Exception ex) {
109 110 logger.debug("[{}] Failed to process RuleToPlugin msg: [{}] [{}]", tenantId, msg.getMsg(), ex);
110 111 RuleToPluginMsg ruleMsg = msg.getMsg();
111   - MsgType responceMsgType = MsgType.RULE_ENGINE_ERROR;
  112 + SessionMsgType responceMsgType = SessionMsgType.RULE_ENGINE_ERROR;
112 113 Integer requestId = 0;
113 114 if (ruleMsg.getPayload() instanceof FromDeviceRequestMsg) {
114 115 requestId = ((FromDeviceRequestMsg) ruleMsg.getPayload()).getRequestId();
... ... @@ -216,7 +217,7 @@ public class PluginActorMessageProcessor extends ComponentMsgProcessor<PluginId>
216 217 @Override
217 218 public void onStop(ActorContext context) {
218 219 onStop();
219   - scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay());
  220 +// scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay());
220 221 }
221 222
222 223 private void onStop() {
... ...
... ... @@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.rule.RuleChain;
41 41 import org.thingsboard.server.common.data.rule.RuleMetaData;
42 42 import org.thingsboard.server.common.msg.cluster.ServerAddress;
43 43 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
  44 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
44 45 import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
45 46 import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext;
46 47 import org.thingsboard.server.extensions.api.plugins.PluginCallback;
... ...
... ... @@ -19,10 +19,12 @@ import akka.actor.ActorRef;
19 19 import lombok.extern.slf4j.Slf4j;
20 20 import org.thingsboard.server.actors.ActorSystemContext;
21 21 import org.thingsboard.server.common.data.id.DeviceId;
  22 +import org.thingsboard.server.common.data.id.PluginId;
22 23 import org.thingsboard.server.common.data.id.TenantId;
23 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 27 import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint;
25   -import org.thingsboard.server.common.data.id.PluginId;
26 28 import org.thingsboard.server.dao.asset.AssetService;
27 29 import org.thingsboard.server.dao.attributes.AttributesService;
28 30 import org.thingsboard.server.dao.audit.AuditLogService;
... ... @@ -35,9 +37,6 @@ import org.thingsboard.server.dao.rule.RuleService;
35 37 import org.thingsboard.server.dao.tenant.TenantService;
36 38 import org.thingsboard.server.dao.timeseries.TimeseriesService;
37 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 40 import org.thingsboard.server.service.cluster.routing.ClusterRoutingService;
42 41 import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
43 42 import scala.concurrent.duration.Duration;
... ... @@ -106,8 +105,8 @@ public final class SharedPluginProcessingContext {
106 105
107 106 public void sendRpcRequest(ToDeviceRpcRequest msg) {
108 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 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 28 import org.thingsboard.server.common.msg.cluster.ServerAddress;
29 29 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
30 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 32 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
33 33 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
34 34 import org.thingsboard.server.extensions.api.plugins.msg.*;
... ... @@ -86,7 +86,7 @@ public class BasicRpcSessionListener implements GrpcSessionListener {
86 86 @Override
87 87 public void onToDeviceActorRpcMsg(GrpcSession session, ClusterAPIProtos.ToDeviceActorRpcMessage msg) {
88 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 92 @Override
... ...
1 1 /**
2 2 * Copyright © 2016-2018 The Thingsboard Authors
3   - *
  3 + * <p>
4 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 5 * you may not use this file except in compliance with the License.
6 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 10 * Unless required by applicable law or agreed to in writing, software
11 11 * distributed under the License is distributed on an "AS IS" BASIS,
12 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
... ... @@ -18,6 +18,7 @@ package org.thingsboard.server.actors.ruleChain;
18 18 import akka.actor.OneForOneStrategy;
19 19 import akka.actor.SupervisorStrategy;
20 20 import org.thingsboard.server.actors.ActorSystemContext;
  21 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
21 22 import org.thingsboard.server.actors.service.ComponentActor;
22 23 import org.thingsboard.server.actors.service.ContextBasedCreator;
23 24 import org.thingsboard.server.common.data.id.RuleChainId;
... ... @@ -44,6 +45,9 @@ public class RuleChainActor extends ComponentActor<RuleChainId, RuleChainActorMe
44 45 case SERVICE_TO_RULE_ENGINE_MSG:
45 46 processor.onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
46 47 break;
  48 + case DEVICE_ACTOR_TO_RULE_ENGINE_MSG:
  49 + processor.onDeviceActorToRuleEngineMsg((DeviceActorToRuleEngineMsg) msg);
  50 + break;
47 51 case RULE_TO_RULE_CHAIN_TELL_NEXT_MSG:
48 52 processor.onTellNext((RuleNodeToRuleChainTellNextMsg) msg);
49 53 break;
... ...
1 1 /**
2 2 * Copyright © 2016-2018 The Thingsboard Authors
3   - *
  3 + * <p>
4 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 5 * you may not use this file except in compliance with the License.
6 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 10 * Unless required by applicable law or agreed to in writing, software
11 11 * distributed under the License is distributed on an "AS IS" BASIS,
12 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
... ... @@ -20,6 +20,8 @@ import akka.actor.ActorRef;
20 20 import akka.actor.Props;
21 21 import akka.event.LoggingAdapter;
22 22 import org.thingsboard.server.actors.ActorSystemContext;
  23 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
  24 +import org.thingsboard.server.actors.device.RuleEngineQueuePutAckMsg;
23 25 import org.thingsboard.server.actors.service.DefaultActorService;
24 26 import org.thingsboard.server.actors.shared.ComponentMsgProcessor;
25 27 import org.thingsboard.server.common.data.EntityType;
... ... @@ -157,6 +159,14 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
157 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 170 void onTellNext(RuleNodeToRuleChainTellNextMsg envelope) {
161 171 checkActive();
162 172 RuleNodeId originator = envelope.getOriginator();
... ... @@ -191,5 +201,4 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh
191 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 public abstract class RuleChainManagerActor extends ContextAwareActor {
32 32
33 33 protected final RuleChainManager ruleChainManager;
34   - protected final PluginManager pluginManager;
35 34 protected final RuleChainService ruleChainService;
36 35
37 36 public RuleChainManagerActor(ActorSystemContext systemContext, RuleChainManager ruleChainManager, PluginManager pluginManager) {
38 37 super(systemContext);
39 38 this.ruleChainManager = ruleChainManager;
40   - this.pluginManager = pluginManager;
41 39 this.ruleChainService = systemContext.getRuleChainService();
42 40 }
43 41
44 42 protected void initRuleChains() {
45   - pluginManager.init(this.context());
46 43 ruleChainManager.init(this.context());
47 44 }
48 45
49 46 protected ActorRef getEntityActorRef(EntityId entityId) {
50 47 ActorRef target = null;
51 48 switch (entityId.getEntityType()) {
52   - case PLUGIN:
53   - target = pluginManager.getOrCreateActor(this.context(), (PluginId) entityId);
54   - break;
55 49 case RULE_CHAIN:
56 50 target = ruleChainManager.getOrCreateActor(this.context(), (RuleChainId) entityId);
57 51 break;
58 52 }
59 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 39 import org.thingsboard.server.common.msg.core.ToDeviceSessionActorMsg;
40 40 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
41 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 43 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
44 44 import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;
45 45 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
... ... @@ -156,7 +156,7 @@ public class DefaultActorService implements ActorService {
156 156 }
157 157
158 158 @Override
159   - public void onMsg(ToDeviceActorMsg msg) {
  159 + public void onMsg(DeviceToDeviceActorMsg msg) {
160 160 log.trace("Processing device rpc msg: {}", msg);
161 161 appActor.tell(msg, ActorRef.noSender());
162 162 }
... ...
... ... @@ -22,12 +22,11 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
22 22 import org.thingsboard.server.common.msg.cluster.ServerAddress;
23 23 import org.thingsboard.server.common.msg.core.*;
24 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 26 import org.thingsboard.server.common.msg.session.*;
27 27
28 28 import akka.actor.ActorContext;
29 29 import akka.event.LoggingAdapter;
30   -import org.thingsboard.server.common.msg.session.ctrl.*;
31 30 import org.thingsboard.server.common.msg.session.ex.SessionException;
32 31
33 32 import java.util.HashMap;
... ... @@ -37,7 +36,7 @@ import java.util.Optional;
37 36 class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
38 37
39 38 private boolean firstMsg = true;
40   - private Map<Integer, ToDeviceActorMsg> pendingMap = new HashMap<>();
  39 + private Map<Integer, DeviceToDeviceActorMsg> pendingMap = new HashMap<>();
41 40 private Optional<ServerAddress> currentTargetServer;
42 41 private boolean subscribedToAttributeUpdates;
43 42 private boolean subscribedToRpcCommands;
... ... @@ -53,7 +52,7 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
53 52 toDeviceMsg(new SessionOpenMsg()).ifPresent(m -> forwardToAppActor(ctx, m));
54 53 firstMsg = false;
55 54 }
56   - ToDeviceActorMsg pendingMsg = toDeviceMsg(msg);
  55 + DeviceToDeviceActorMsg pendingMsg = toDeviceMsg(msg);
57 56 FromDeviceMsg fromDeviceMsg = pendingMsg.getPayload();
58 57 switch (fromDeviceMsg.getMsgType()) {
59 58 case POST_TELEMETRY_REQUEST:
... ... @@ -86,8 +85,8 @@ class ASyncMsgProcessor extends AbstractSessionActorMsgProcessor {
86 85 @Override
87 86 public void processToDeviceMsg(ActorContext context, ToDeviceMsg msg) {
88 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 90 case STATUS_CODE_RESPONSE:
92 91 case GET_ATTRIBUTES_RESPONSE:
93 92 ResponseMsg responseMsg = (ResponseMsg) msg;
... ...
... ... @@ -22,8 +22,8 @@ import org.thingsboard.server.common.data.id.DeviceId;
22 22 import org.thingsboard.server.common.data.id.SessionId;
23 23 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
24 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 27 import org.thingsboard.server.common.msg.session.*;
28 28 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
29 29
... ... @@ -37,7 +37,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
37 37
38 38 protected final SessionId sessionId;
39 39 protected SessionContext sessionCtx;
40   - protected ToDeviceActorMsg toDeviceActorMsgPrototype;
  40 + protected DeviceToDeviceActorMsg deviceToDeviceActorMsgPrototype;
41 41
42 42 protected AbstractSessionActorMsgProcessor(ActorSystemContext ctx, LoggingAdapter logger, SessionId sessionId) {
43 43 super(ctx, logger);
... ... @@ -64,29 +64,29 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
64 64
65 65 protected void updateSessionCtx(ToDeviceActorSessionMsg msg, SessionType type) {
66 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 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 78 } else {
79 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 84 Optional<ServerAddress> address = systemContext.getRoutingService().resolveById(toForward.getDeviceId());
85 85 forwardToAppActor(ctx, toForward, address);
86 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 90 Optional<ServerAddress> newAddress = systemContext.getRoutingService().resolveById(toForward.getDeviceId());
91 91 if (!newAddress.equals(oldAddress)) {
92 92 if (newAddress.isPresent()) {
... ... @@ -99,7 +99,7 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
99 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 103 if (address.isPresent()) {
104 104 systemContext.getRpcService().tell(address.get(),
105 105 toForward.toOtherAddress(systemContext.getRoutingService().getCurrentServer()));
... ... @@ -114,6 +114,6 @@ abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgP
114 114 }
115 115
116 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 20 import org.thingsboard.server.common.data.id.SessionId;
21 21 import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
22 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 24 import org.thingsboard.server.common.msg.session.*;
25 25 import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg;
26 26 import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
... ... @@ -32,7 +32,7 @@ import akka.event.LoggingAdapter;
32 32 import java.util.Optional;
33 33
34 34 class SyncMsgProcessor extends AbstractSessionActorMsgProcessor {
35   - private ToDeviceActorMsg pendingMsg;
  35 + private DeviceToDeviceActorMsg pendingMsg;
36 36 private Optional<ServerAddress> currentTargetServer;
37 37 private boolean pendingResponse;
38 38
... ...
... ... @@ -17,10 +17,9 @@ package org.thingsboard.server.actors.tenant;
17 17
18 18 import akka.actor.ActorRef;
19 19 import akka.actor.Props;
20   -import akka.event.Logging;
21   -import akka.event.LoggingAdapter;
22 20 import org.thingsboard.server.actors.ActorSystemContext;
23 21 import org.thingsboard.server.actors.device.DeviceActor;
  22 +import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
24 23 import org.thingsboard.server.actors.plugin.PluginTerminationMsg;
25 24 import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor;
26 25 import org.thingsboard.server.actors.service.ContextBasedCreator;
... ... @@ -30,7 +29,8 @@ import org.thingsboard.server.actors.shared.rulechain.TenantRuleChainManager;
30 29 import org.thingsboard.server.common.data.id.DeviceId;
31 30 import org.thingsboard.server.common.data.id.TenantId;
32 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 34 import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
35 35 import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
36 36 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
... ... @@ -64,63 +64,47 @@ public class TenantActor extends RuleChainManagerActor {
64 64 @Override
65 65 protected boolean process(TbActorMsg msg) {
66 66 switch (msg.getMsgType()) {
  67 + case CLUSTER_EVENT_MSG:
  68 + broadcast(msg);
  69 + break;
67 70 case COMPONENT_LIFE_CYCLE_MSG:
68 71 onComponentLifecycleMsg((ComponentLifecycleMsg) msg);
69 72 break;
70 73 case SERVICE_TO_RULE_ENGINE_MSG:
71 74 onServiceToRuleEngineMsg((ServiceToRuleEngineMsg) msg);
72 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 86 default:
74 87 return false;
75 88 }
76 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 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 110 private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) {
... ... @@ -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 119 private ActorRef getOrCreateDeviceActor(DeviceId deviceId) {
141 120 return deviceActors.computeIfAbsent(deviceId, k -> context().actorOf(Props.create(new DeviceActor.ActorCreator(systemContext, tenantId, deviceId))
142 121 .withDispatcher(DefaultActorService.CORE_DISPATCHER_NAME), deviceId.toString()));
... ...
... ... @@ -131,8 +131,8 @@ public class ThingsboardInstallService {
131 131 systemDataLoaderService.createSysAdmin();
132 132 systemDataLoaderService.createAdminSettings();
133 133 systemDataLoaderService.loadSystemWidgets();
134   - systemDataLoaderService.loadSystemPlugins();
135   - systemDataLoaderService.loadSystemRules();
  134 +// systemDataLoaderService.loadSystemPlugins();
  135 +// systemDataLoaderService.loadSystemRules();
136 136
137 137 if (loadDemo) {
138 138 log.info("Loading demo data...");
... ...
... ... @@ -30,11 +30,10 @@ import org.thingsboard.server.common.data.id.EntityId;
30 30 import org.thingsboard.server.common.msg.cluster.ServerAddress;
31 31 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
32 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 34 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
35 35 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
36 36 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
37   -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;
38 37 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
39 38 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
40 39 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
... ... @@ -119,7 +118,7 @@ public class ClusterGrpcService extends ClusterRpcServiceGrpc.ClusterRpcServiceI
119 118 }
120 119
121 120 @Override
122   - public void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward) {
  121 + public void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward) {
123 122 ClusterAPIProtos.ToRpcServerMessage msg = ClusterAPIProtos.ToRpcServerMessage.newBuilder()
124 123 .setToDeviceActorRpcMsg(toProtoMsg(toForward)).build();
125 124 tell(serverAddress, msg);
... ... @@ -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 188 return ClusterAPIProtos.ToDeviceActorRpcMessage.newBuilder().setData(
190 189 ByteString.copyFrom(SerializationUtils.serialize(msg))
191 190 ).build();
... ...
... ... @@ -19,10 +19,8 @@ import io.grpc.stub.StreamObserver;
19 19 import org.thingsboard.server.common.msg.cluster.ServerAddress;
20 20 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
21 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 23 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
25   -import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg;
26 24 import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
27 25 import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
28 26 import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
... ... @@ -37,7 +35,7 @@ public interface ClusterRpcService {
37 35
38 36 void init(RpcMsgListener listener);
39 37
40   - void tell(ServerAddress serverAddress, ToDeviceActorMsg toForward);
  38 + void tell(ServerAddress serverAddress, DeviceToDeviceActorMsg toForward);
41 39
42 40 void tell(ServerAddress serverAddress, ToDeviceSessionActorMsg toForward);
43 41
... ...
... ... @@ -20,18 +20,16 @@ import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg;
20 20 import org.thingsboard.server.actors.rpc.RpcSessionTellMsg;
21 21 import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
22 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 24 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
25 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 28 * @author Andrew Shvayka
31 29 */
32 30 public interface RpcMsgListener {
33 31
34   - void onMsg(ToDeviceActorMsg msg);
  32 + void onMsg(DeviceToDeviceActorMsg msg);
35 33
36 34 void onMsg(ToDeviceActorNotificationMsg msg);
37 35
... ...
... ... @@ -181,7 +181,7 @@ public class DefaultSystemDataLoaderService implements SystemDataLoaderService {
181 181
182 182 @Override
183 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 227 createDevice(demoTenant.getId(), null, DEFAULT_DEVICE_TYPE, "Raspberry Pi Demo Device", "RASPBERRY_PI_DEMO_TOKEN", "Demo device that is used in " +
228 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 231 // loadRules(Paths.get(dataDir, JSON_DIR, DEMO_DIR, RULES_DIR), demoTenant.getId());
232 232 loadDashboards(Paths.get(dataDir, JSON_DIR, DEMO_DIR, DASHBOARDS_DIR), demoTenant.getId(), null);
233 233 }
... ...
... ... @@ -15,6 +15,7 @@
15 15 */
16 16 package org.thingsboard.server.service.rpc;
17 17
  18 +import akka.actor.ActorRef;
18 19 import com.fasterxml.jackson.databind.ObjectMapper;
19 20 import lombok.extern.slf4j.Slf4j;
20 21 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -105,7 +106,19 @@ public class DefaultDeviceRpcService implements DeviceRpcService {
105 106 }
106 107
107 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 120 public void process(FromDeviceRpcResponse response) {
  121 + //TODO: send to another server if needed.
109 122 UUID requestId = response.getId();
110 123 LocalRequestMetaData md = localRpcRequests.remove(requestId);
111 124 if (md != null) {
... ...
... ... @@ -17,6 +17,7 @@ package org.thingsboard.server.service.rpc;
17 17
18 18 import org.thingsboard.server.common.data.id.EntityId;
19 19 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
  20 +import org.thingsboard.server.common.msg.cluster.ServerAddress;
20 21 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
21 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
22 23 import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
... ... @@ -31,6 +32,8 @@ public interface DeviceRpcService {
31 32
32 33 void process(ToDeviceRpcRequest request, LocalRequestMetaData metaData);
33 34
  35 + void process(ToDeviceRpcRequest request, ServerAddress originator);
  36 +
34 37 void process(FromDeviceRpcResponse response);
35 38
36 39 void logRpcCall(SecurityUser user, EntityId entityId, ToDeviceRpcRequestBody body, boolean oneWay, Optional<RpcError> rpcError, Throwable e);
... ...
... ... @@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor;
20 20 import lombok.ToString;
21 21 import org.thingsboard.server.common.data.id.DeviceId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.common.msg.MsgType;
23 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
24 25 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
25 26 import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
... ... @@ -54,4 +55,9 @@ public class ToDeviceRpcRequestMsg implements ToDeviceActorNotificationMsg {
54 55 public TenantId getTenantId() {
55 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 207 sync:
208 208 # Default timeout for processing request using synchronous session (HTTP, CoAP) in milliseconds
209 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 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 211 # Specify thread pool size for database request callbacks executor service
223 212 db_callback_thread_pool_size: "${ACTORS_RULE_DB_CALLBACK_THREAD_POOL_SIZE:1}"
224 213 # Specify thread pool size for javascript executor service
... ... @@ -235,6 +224,11 @@ actors:
235 224 # Enable/disable actor statistics
236 225 enabled: "${ACTORS_STATISTICS_ENABLED:true}"
237 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 233 cache:
240 234 # caffeine or redis
... ...
... ... @@ -18,27 +18,30 @@ package org.thingsboard.server.common.msg;
18 18 /**
19 19 * Created by ashvayka on 15.03.18.
20 20 */
  21 +//TODO: add all "See" references
21 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 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 36 COMPONENT_LIFE_CYCLE_MSG,
29 37
30 38 /**
31 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 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 46 * Message that is sent by RuleChainActor to RuleActor with command to process TbMsg.
44 47 */
... ... @@ -59,4 +62,31 @@ public enum MsgType {
59 62 */
60 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 31 @NoArgsConstructor
32 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 36 public TbMsgMetaData(Map<String, String> data) {
37   - this.data = data;
  37 + this.data.putAll(data);
38 38 }
39 39
40 40 public String getValue(String key) {
... ...
... ... @@ -16,14 +16,20 @@
16 16 package org.thingsboard.server.common.msg.cluster;
17 17
18 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 23 * @author Andrew Shvayka
22 24 */
23 25 @Data
24   -public final class ClusterEventMsg {
  26 +public final class ClusterEventMsg implements TbActorMsg {
25 27
26 28 private final ServerAddress serverAddress;
27 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 22 * @author Andrew Shvayka
23 23 */
24 24 public class AttributesSubscribeMsg implements FromDeviceMsg {
25 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 23 * @author Andrew Shvayka
23 24 */
24 25 public class AttributesUnsubscribeMsg implements FromDeviceMsg {
25 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 17
18 18 import lombok.ToString;
19 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 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 24 @ToString
... ... @@ -36,9 +37,8 @@ public class AttributesUpdateNotification implements ToDeviceMsg {
36 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 44 public AttributesKVMsg getData() {
... ...
... ... @@ -15,26 +15,27 @@
15 15 */
16 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 21 public class BasicCommandAckResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse {
21 22
22 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 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 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 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 41 @Override
... ...
... ... @@ -16,7 +16,8 @@
16 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 22 import java.util.Collections;
22 23 import java.util.Optional;
... ... @@ -41,8 +42,8 @@ public class BasicGetAttributesRequest extends BasicRequest implements GetAttrib
41 42 }
42 43
43 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 49 @Override
... ...
... ... @@ -17,23 +17,24 @@ package org.thingsboard.server.common.msg.core;
17 17
18 18 import lombok.ToString;
19 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 23 @ToString
23 24 public class BasicGetAttributesResponse extends BasicResponseMsg<AttributesKVMsg> implements GetAttributesResponse {
24 25
25 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 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 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 18 import java.io.Serializable;
19 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 25 public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T> {
25 26
26 27 private static final long serialVersionUID = 1L;
27 28
28   - private final MsgType requestMsgType;
  29 + private final SessionMsgType requestMsgType;
29 30 private final Integer requestId;
30   - private final MsgType msgType;
  31 + private final SessionMsgType sessionMsgType;
31 32 private final boolean success;
32 33 private final T data;
33 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 37 super();
37 38 this.requestMsgType = requestMsgType;
38 39 this.requestId = requestId;
39   - this.msgType = msgType;
  40 + this.sessionMsgType = sessionMsgType;
40 41 this.success = success;
41 42 this.error = error;
42 43 this.data = data;
43 44 }
44 45
45 46 @Override
46   - public MsgType getRequestMsgType() {
  47 + public SessionMsgType getRequestMsgType() {
47 48 return requestMsgType;
48 49 }
49 50
... ... @@ -72,8 +73,7 @@ public class BasicResponseMsg<T extends Serializable> implements ResponseMsg<T>
72 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 22 @ToString
22 23 public class BasicStatusCodeResponse extends BasicResponseMsg<Integer> implements StatusCodeResponse {
23 24
24 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 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 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 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 21 import java.util.Map;
22 22
23 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 27 public class BasicTelemetryUploadRequest extends BasicRequest implements TelemetryUploadRequest {
27 28
... ... @@ -48,8 +49,8 @@ public class BasicTelemetryUploadRequest extends BasicRequest implements Telemet
48 49 }
49 50
50 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 56 @Override
... ...
... ... @@ -20,7 +20,8 @@ import java.util.LinkedHashSet;
20 20 import java.util.Set;
21 21
22 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 26 public class BasicUpdateAttributesRequest extends BasicRequest implements UpdateAttributesRequest {
26 27
... ... @@ -46,8 +47,8 @@ public class BasicUpdateAttributesRequest extends BasicRequest implements Update
46 47 }
47 48
48 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 54 @Override
... ...
... ... @@ -18,12 +18,12 @@ package org.thingsboard.server.common.msg.core;
18 18 import java.io.Serializable;
19 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 22 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
23 23
24 24 public interface ResponseMsg<T extends Serializable> extends ToDeviceMsg {
25 25
26   - MsgType getRequestMsgType();
  26 + SessionMsgType getRequestMsgType();
27 27
28 28 Integer getRequestId();
29 29
... ...
... ... @@ -16,14 +16,15 @@
16 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 23 * @author Andrew Shvayka
23 24 */
24 25 public class RpcSubscribeMsg implements FromDeviceMsg {
25 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 23 * @author Andrew Shvayka
23 24 */
24 25 public class RpcUnsubscribeMsg implements FromDeviceMsg {
25 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 21
22 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 26 private final boolean critical;
27 27
... ...
... ... @@ -16,7 +16,8 @@
16 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 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 26 @Data
26 27 public class RuleEngineErrorMsg implements ToDeviceMsg {
27 28
28   - private final MsgType inMsgType;
  29 + private final SessionMsgType inSessionMsgType;
29 30 private final RuleEngineError error;
30 31
31 32 @Override
... ... @@ -33,9 +34,8 @@ public class RuleEngineErrorMsg implements ToDeviceMsg {
33 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 41 public String getErrorMsg() {
... ... @@ -52,7 +52,7 @@ public class RuleEngineErrorMsg implements ToDeviceMsg {
52 52 return "Rule filters match, but no rule with two-way action configured!";
53 53 case NO_RESPONSE_FROM_ACTIONS:
54 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 56 return "Timeout during processing of message by plugin!";
57 57 default:
58 58 throw new RuntimeException("Error " + error + " is not supported!");
... ...
... ... @@ -16,14 +16,15 @@
16 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 23 * @author Andrew Shvayka
23 24 */
24 25 public class SessionCloseMsg implements FromDeviceMsg {
25 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 17
18 18 import lombok.ToString;
19 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 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 24 @ToString
... ... @@ -30,9 +31,8 @@ public class SessionCloseNotification implements ToDeviceMsg {
30 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 23 * @author Andrew Shvayka
23 24 */
24 25 public class SessionOpenMsg implements FromDeviceMsg {
25 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 16 package org.thingsboard.server.common.msg.core;
17 17
18 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 21 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
21 22
22 23 /**
... ... @@ -29,9 +30,8 @@ public class ToDeviceRpcRequestMsg implements ToDeviceMsg {
29 30 private final String method;
30 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 37 @Override
... ...
... ... @@ -17,7 +17,8 @@ package org.thingsboard.server.common.msg.core;
17 17
18 18 import lombok.Data;
19 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 24 * @author Andrew Shvayka
... ... @@ -29,7 +30,7 @@ public class ToDeviceRpcResponseMsg implements FromDeviceMsg {
29 30 private final String data;
30 31
31 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 17
18 18 import lombok.Data;
19 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 23 * @author Andrew Shvayka
... ... @@ -30,7 +30,7 @@ public class ToServerRpcRequestMsg implements FromDeviceRequestMsg {
30 30 private final String params;
31 31
32 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 17
18 18 import lombok.Data;
19 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 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
22 23
23 24 /**
... ... @@ -29,9 +30,8 @@ public class ToServerRpcResponseMsg implements ToDeviceMsg {
29 30 private final int requestId;
30 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 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 20 import org.thingsboard.server.common.data.id.DeviceId;
21 21 import org.thingsboard.server.common.data.id.SessionId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
  23 +import org.thingsboard.server.common.msg.MsgType;
23 24 import org.thingsboard.server.common.msg.cluster.ServerAddress;
24 25 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
25 26 import org.thingsboard.server.common.msg.session.SessionType;
... ... @@ -28,7 +29,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceActorSessionMsg;
28 29 import java.util.Optional;
29 30
30 31 @ToString
31   -public class BasicToDeviceActorMsg implements ToDeviceActorMsg {
  32 +public class BasicDeviceToDeviceActorMsg implements DeviceToDeviceActorMsg {
32 33
33 34 private static final long serialVersionUID = -1866795134993115408L;
34 35
... ... @@ -40,16 +41,16 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg {
40 41 private final ServerAddress serverAddress;
41 42 private final FromDeviceMsg msg;
42 43
43   - public BasicToDeviceActorMsg(ToDeviceActorMsg other, FromDeviceMsg msg) {
  44 + public BasicDeviceToDeviceActorMsg(DeviceToDeviceActorMsg other, FromDeviceMsg msg) {
44 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 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 54 super();
54 55 this.serverAddress = serverAddress;
55 56 this.tenantId = tenantId;
... ... @@ -95,7 +96,12 @@ public class BasicToDeviceActorMsg implements ToDeviceActorMsg {
95 96 }
96 97
97 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 19 import java.util.Optional;
20 20
21 21 import org.thingsboard.server.common.data.id.SessionId;
  22 +import org.thingsboard.server.common.msg.TbActorMsg;
22 23 import org.thingsboard.server.common.msg.aware.CustomerAwareMsg;
23 24 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
24 25 import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
... ... @@ -26,7 +27,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
26 27 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
27 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 32 SessionId getSessionId();
32 33
... ... @@ -36,5 +37,5 @@ public interface ToDeviceActorMsg extends DeviceAwareMsg, CustomerAwareMsg, Tena
36 37
37 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 19
20 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 15 */
16 16 package org.thingsboard.server.common.msg.session;
17 17
18   -public enum MsgType {
  18 +public enum SessionMsgType {
19 19 GET_ATTRIBUTES_REQUEST(true), POST_ATTRIBUTES_REQUEST(true), GET_ATTRIBUTES_RESPONSE,
20 20 SUBSCRIBE_ATTRIBUTES_REQUEST, UNSUBSCRIBE_ATTRIBUTES_REQUEST, ATTRIBUTES_UPDATE_NOTIFICATION,
21 21
... ... @@ -32,11 +32,11 @@ public enum MsgType {
32 32
33 33 private final boolean requiresRulesProcessing;
34 34
35   - MsgType() {
  35 + SessionMsgType() {
36 36 this(false);
37 37 }
38 38
39   - MsgType(boolean requiresRulesProcessing) {
  39 + SessionMsgType(boolean requiresRulesProcessing) {
40 40 this.requiresRulesProcessing = requiresRulesProcessing;
41 41 }
42 42
... ...
... ... @@ -21,6 +21,6 @@ public interface ToDeviceMsg extends Serializable {
21 21
22 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 13 * See the License for the specific language governing permissions and
14 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 21 import java.util.UUID;
19 22
20 23 /**
21 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 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 13 * See the License for the specific language governing permissions and
14 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 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 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 13 * See the License for the specific language governing permissions and
14 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 18 import lombok.Data;
  19 +import org.thingsboard.server.common.msg.TbActorMsg;
19 20
20 21 /**
21 22 * @author Andrew Shvayka
22 23 */
23 24 @Data
24   -public class TimeoutMsg<T> {
  25 +public abstract class TimeoutMsg<T> implements TbActorMsg {
25 26 private final T id;
26 27 private final long timeout;
27 28 }
... ...
... ... @@ -16,7 +16,7 @@
16 16 package org.thingsboard.server.common.transport;
17 17
18 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 20 import org.thingsboard.server.common.msg.session.SessionActorToAdaptorMsg;
21 21 import org.thingsboard.server.common.msg.session.SessionContext;
22 22 import org.thingsboard.server.common.transport.adaptor.AdaptorException;
... ... @@ -25,7 +25,7 @@ import java.util.Optional;
25 25
26 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 30 Optional<V> convertToAdaptorMsg(C ctx, SessionActorToAdaptorMsg msg) throws AdaptorException;
31 31
... ...
... ... @@ -75,6 +75,8 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
75 75 log.trace("Save system rule chain with predefined id {}", SYSTEM_TENANT);
76 76 ruleChain.setTenantId(SYSTEM_TENANT);
77 77 }
  78 + //TODO: Temporary Hack to continue tests;
  79 + ruleChain.setRoot(true);
78 80 RuleChain savedRuleChain = ruleChainDao.save(ruleChain);
79 81 if (ruleChain.isRoot() && ruleChain.getTenantId() != null && ruleChain.getId() == null) {
80 82 try {
... ...
... ... @@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
23 23 import org.thingsboard.server.common.data.kv.AttributeKey;
24 24 import org.thingsboard.server.common.data.kv.AttributeKvEntry;
  25 +import org.thingsboard.server.common.msg.MsgType;
25 26
26 27 import java.util.List;
27 28 import java.util.Set;
... ... @@ -54,4 +55,8 @@ public class DeviceAttributesEventNotificationMsg implements ToDeviceActorNotifi
54 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 21 import org.thingsboard.server.common.data.id.DeviceId;
22 22 import org.thingsboard.server.common.data.id.TenantId;
23 23 import org.thingsboard.server.common.data.kv.AttributeKey;
  24 +import org.thingsboard.server.common.msg.MsgType;
24 25
25 26 import java.util.Set;
26 27
... ... @@ -33,4 +34,8 @@ public class DeviceCredentialsUpdateNotificationMsg implements ToDeviceActorNoti
33 34 private final TenantId tenantId;
34 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 19 import lombok.Data;
20 20 import org.thingsboard.server.common.data.id.DeviceId;
21 21 import org.thingsboard.server.common.data.id.TenantId;
  22 +import org.thingsboard.server.common.msg.MsgType;
22 23
23 24 @Data
24 25 @AllArgsConstructor
... ... @@ -27,4 +28,9 @@ public class DeviceNameOrTypeUpdateMsg implements ToDeviceActorNotificationMsg {
27 28 private final DeviceId deviceId;
28 29 private final String deviceName;
29 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 15 */
16 16 package org.thingsboard.server.extensions.api.device;
17 17
  18 +import org.thingsboard.server.common.msg.TbActorMsg;
18 19 import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
19 20 import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
20 21
... ... @@ -23,6 +24,6 @@ import java.io.Serializable;
23 24 /**
24 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 21 import org.thingsboard.server.extensions.api.plugins.handlers.*;
22 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
23 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 25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
26 26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
27 27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
... ...
... ... @@ -21,7 +21,7 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
21 21 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
22 22 import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
23 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 25 import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
26 26 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
27 27 import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
... ...
... ... @@ -15,7 +15,7 @@
15 15 */
16 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 19 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
20 20 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
21 21 import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg;
... ... @@ -28,7 +28,7 @@ import java.util.Optional;
28 28
29 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 33 Optional<ToDeviceMsg> convert(PluginToRuleMsg<?> response);
34 34
... ...
... ... @@ -25,6 +25,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
25 25 import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
26 26 import org.thingsboard.server.common.msg.cluster.ServerAddress;
27 27 import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
  28 +import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
28 29 import org.thingsboard.server.extensions.api.plugins.msg.*;
29 30 import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
30 31 import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
... ...
... ... @@ -18,7 +18,8 @@ package org.thingsboard.server.extensions.api.plugins.handlers;
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.thingsboard.server.common.data.id.RuleId;
20 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 23 import org.thingsboard.server.extensions.api.plugins.PluginContext;
23 24 import org.thingsboard.server.extensions.api.plugins.msg.GetAttributesRequestRuleToPluginMsg;
24 25 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -56,8 +57,8 @@ public class DefaultRuleMsgHandler implements RuleMsgHandler {
56 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 15 */
16 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 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 23 */
24 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 */
16 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 19 import org.thingsboard.server.extensions.api.component.ConfigurableComponent;
20 20
21   -import javax.script.ScriptException;
22   -
23 21 /**
24 22 * @author Andrew Shvayka
25 23 */
26 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 20 import org.apache.velocity.VelocityContext;
21 21 import org.apache.velocity.runtime.parser.ParseException;
22 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 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 25 import org.thingsboard.server.extensions.api.component.Action;
26 26 import org.thingsboard.server.extensions.api.plugins.PluginAction;
... ... @@ -74,7 +74,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug
74 74 }
75 75
76 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 78 String sendFlag = configuration.getSendFlag();
79 79 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) {
80 80 VelocityContext context = VelocityUtils.createContext(metadata);
... ... @@ -86,7 +86,7 @@ public class SendMailAction extends SimpleRuleLifecycleComponent implements Plug
86 86 bccTemplate.ifPresent(t -> builder.bcc(VelocityUtils.merge(t, context)));
87 87 subjectTemplate.ifPresent(t -> builder.subject(VelocityUtils.merge(t, context)));
88 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 90 builder.build()));
91 91 } else {
92 92 return Optional.empty();
... ...
... ... @@ -16,9 +16,10 @@
16 16 package org.thingsboard.server.extensions.core.action.rpc;
17 17
18 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 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 23 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
23 24 import org.thingsboard.server.extensions.api.component.Action;
24 25 import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration;
... ... @@ -41,12 +42,12 @@ public class RpcPluginAction extends SimpleRuleLifecycleComponent implements Plu
41 42 }
42 43
43 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 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 51 } else {
51 52 return Optional.empty();
52 53 }
... ...
... ... @@ -20,7 +20,7 @@ import org.apache.velocity.Template;
20 20 import org.apache.velocity.VelocityContext;
21 21 import org.apache.velocity.runtime.parser.ParseException;
22 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 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 25 import org.thingsboard.server.extensions.api.component.Action;
26 26 import org.thingsboard.server.extensions.api.plugins.PluginAction;
... ... @@ -64,7 +64,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem
64 64 }
65 65
66 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 68 String sendFlag = configuration.getSendFlag();
69 69 if (StringUtils.isEmpty(sendFlag) || (Boolean) metadata.get(sendFlag).orElse(Boolean.FALSE)) {
70 70 VelocityContext context = VelocityUtils.createContext(metadata);
... ... @@ -77,7 +77,7 @@ public class ServerSideRpcCallAction extends SimpleRuleLifecycleComponent implem
77 77 rpcCallMethodTemplate.ifPresent(t -> builder.rpcCallMethod(VelocityUtils.merge(t, context)));
78 78 rpcCallBodyTemplate.ifPresent(t -> builder.rpcCallBody(VelocityUtils.merge(t, context)));
79 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 81 builder.build()));
82 82 } else {
83 83 return Optional.empty();
... ...
... ... @@ -19,9 +19,10 @@ import org.springframework.util.StringUtils;
19 19 import org.thingsboard.server.common.msg.core.GetAttributesRequest;
20 20 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
21 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 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 26 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
26 27 import org.thingsboard.server.extensions.api.component.Action;
27 28 import org.thingsboard.server.extensions.api.plugins.PluginAction;
... ... @@ -50,20 +51,20 @@ public class TelemetryPluginAction extends SimpleRuleLifecycleComponent implemen
50 51 }
51 52
52 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 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 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 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 68 } else {
68 69 return Optional.empty();
69 70 }
... ...
... ... @@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j;
19 19 import org.apache.velocity.Template;
20 20 import org.apache.velocity.VelocityContext;
21 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 23 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
24 24 import org.thingsboard.server.common.msg.session.ToDeviceMsg;
25 25 import org.thingsboard.server.extensions.api.plugins.PluginAction;
... ... @@ -52,7 +52,7 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi
52 52 }
53 53
54 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 56 FromDeviceRequestMsg payload;
57 57 if (msg.getPayload() instanceof FromDeviceRequestMsg) {
58 58 payload = (FromDeviceRequestMsg) msg.getPayload();
... ... @@ -70,14 +70,14 @@ public abstract class AbstractTemplatePluginAction<T extends TemplateActionConfi
70 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 74 log.trace("Creating context for: {} and payload {}", ctx.getDeviceMetaData(), msg.getPayload());
75 75 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload());
76 76 return VelocityUtils.merge(template, context);
77 77 }
78 78
79 79 abstract protected Optional<RuleToPluginMsg> buildRuleToPluginMsg(RuleContext ctx,
80   - ToDeviceActorMsg msg,
  80 + DeviceToDeviceActorMsg msg,
81 81 FromDeviceRequestMsg payload);
82 82
83 83 @Override
... ...
... ... @@ -16,8 +16,7 @@
16 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 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 20 import org.thingsboard.server.extensions.api.rules.RuleContext;
22 21 import org.thingsboard.server.extensions.api.rules.RuleFilter;
23 22
... ... @@ -39,7 +38,7 @@ public abstract class BasicJsFilter implements RuleFilter<JsFilterConfiguration>
39 38 }
40 39
41 40 @Override
42   - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) {
  41 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
43 42 try {
44 43 return doFilter(ctx, msg);
45 44 } catch (ScriptException e) {
... ... @@ -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 52 @Override
54 53 public void resume() {
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 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 21 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
22 22 import org.thingsboard.server.extensions.api.component.Filter;
23 23 import org.thingsboard.server.extensions.api.device.DeviceAttributes;
... ... @@ -34,7 +34,7 @@ import javax.script.ScriptException;
34 34 public class DeviceAttributesFilter extends BasicJsFilter {
35 35
36 36 @Override
37   - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException {
  37 + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException {
38 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 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.thingsboard.server.common.data.kv.KvEntry;
20 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 22 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
23 23 import org.thingsboard.server.extensions.api.component.Filter;
24 24 import org.thingsboard.server.extensions.api.rules.RuleContext;
... ... @@ -34,7 +34,7 @@ import java.util.List;
34 34 public class DeviceTelemetryFilter extends BasicJsFilter {
35 35
36 36 @Override
37   - protected boolean doFilter(RuleContext ctx, ToDeviceActorMsg msg) throws ScriptException {
  37 + protected boolean doFilter(RuleContext ctx, DeviceToDeviceActorMsg msg) throws ScriptException {
38 38 FromDeviceMsg deviceMsg = msg.getPayload();
39 39 if (deviceMsg instanceof TelemetryUploadRequest) {
40 40 TelemetryUploadRequest telemetryMsg = (TelemetryUploadRequest) deviceMsg;
... ...
... ... @@ -16,8 +16,7 @@
16 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 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 20 import org.thingsboard.server.extensions.api.component.Filter;
22 21 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 22 import org.thingsboard.server.extensions.api.rules.RuleFilter;
... ... @@ -27,8 +26,6 @@ import java.util.Arrays;
27 26 import java.util.Set;
28 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 30 * @author Andrew Shvayka
34 31 */
... ... @@ -46,7 +43,7 @@ public class DeviceTypeFilter extends SimpleRuleLifecycleComponent implements Ru
46 43 }
47 44
48 45 @Override
49   - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) {
  46 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
50 47 return deviceTypes.contains(ctx.getDeviceMetaData().getDeviceType());
51 48 }
52 49 }
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.core.filter;
17 17
18 18 import lombok.extern.slf4j.Slf4j;
19 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 21 import org.thingsboard.server.extensions.api.component.Filter;
22 22 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 23 import org.thingsboard.server.extensions.api.rules.RuleFilter;
... ... @@ -27,7 +27,7 @@ import java.util.Arrays;
27 27 import java.util.Set;
28 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 33 * @author Andrew Shvayka
... ... @@ -46,7 +46,7 @@ public class MethodNameFilter extends SimpleRuleLifecycleComponent implements Ru
46 46 }
47 47
48 48 @Override
49   - public boolean filter(RuleContext ctx, ToDeviceActorMsg msg) {
  49 + public boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg) {
50 50 if (msg.getPayload().getMsgType() == TO_SERVER_RPC_REQUEST) {
51 51 return methods.contains(((ToServerRpcRequestMsg) msg.getPayload()).getMethod());
52 52 } else {
... ...
... ... @@ -16,8 +16,9 @@
16 16 package org.thingsboard.server.extensions.core.filter;
17 17
18 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 22 import org.thingsboard.server.extensions.api.component.Filter;
22 23 import org.thingsboard.server.extensions.api.rules.RuleContext;
23 24 import org.thingsboard.server.extensions.api.rules.RuleFilter;
... ... @@ -35,30 +36,30 @@ import java.util.stream.Collectors;
35 36 @Slf4j
36 37 public class MsgTypeFilter extends SimpleRuleLifecycleComponent implements RuleFilter<MsgTypeFilterConfiguration> {
37 38
38   - private List<MsgType> msgTypes;
  39 + private List<SessionMsgType> sessionMsgTypes;
39 40
40 41 @Override
41 42 public void init(MsgTypeFilterConfiguration configuration) {
42   - msgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> {
  43 + sessionMsgTypes = Arrays.stream(configuration.getMessageTypes()).map(type -> {
43 44 switch (type) {
44 45 case "GET_ATTRIBUTES":
45   - return MsgType.GET_ATTRIBUTES_REQUEST;
  46 + return SessionMsgType.GET_ATTRIBUTES_REQUEST;
46 47 case "POST_ATTRIBUTES":
47   - return MsgType.POST_ATTRIBUTES_REQUEST;
  48 + return SessionMsgType.POST_ATTRIBUTES_REQUEST;
48 49 case "POST_TELEMETRY":
49   - return MsgType.POST_TELEMETRY_REQUEST;
  50 + return SessionMsgType.POST_TELEMETRY_REQUEST;
50 51 case "RPC_REQUEST":
51   - return MsgType.TO_SERVER_RPC_REQUEST;
  52 + return SessionMsgType.TO_SERVER_RPC_REQUEST;
52 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 56 }).collect(Collectors.toList());
56 57 }
57 58
58 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 63 return true;
63 64 }
64 65 }
... ...
... ... @@ -22,7 +22,7 @@ import org.apache.velocity.VelocityContext;
22 22 import org.apache.velocity.runtime.parser.ParseException;
23 23 import org.thingsboard.server.common.data.DataConstants;
24 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 26 import org.thingsboard.server.extensions.api.component.Processor;
27 27 import org.thingsboard.server.extensions.api.rules.*;
28 28 import org.thingsboard.server.extensions.core.utils.VelocityUtils;
... ... @@ -57,7 +57,7 @@ public class AlarmDeduplicationProcessor extends SimpleRuleLifecycleComponent
57 57 }
58 58
59 59 @Override
60   - public RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg msg) throws RuleException {
  60 + public RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException {
61 61 RuleProcessingMetaData md = new RuleProcessingMetaData();
62 62 VelocityContext context = VelocityUtils.createContext(ctx.getDeviceMetaData(), msg.getPayload());
63 63 String alarmId = VelocityUtils.merge(alarmIdTemplate, context);
... ...
... ... @@ -27,7 +27,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus;
27 27 import org.thingsboard.server.common.data.kv.KvEntry;
28 28 import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
29 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 31 import org.thingsboard.server.common.msg.session.FromDeviceMsg;
32 32 import org.thingsboard.server.extensions.api.component.Processor;
33 33 import org.thingsboard.server.extensions.api.rules.RuleContext;
... ... @@ -102,7 +102,7 @@ public class AlarmProcessor implements RuleProcessor<AlarmProcessorConfiguration
102 102 }
103 103
104 104 @Override
105   - public RuleProcessingMetaData process(RuleContext ctx, ToDeviceActorMsg wrapper) throws RuleException {
  105 + public RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg wrapper) throws RuleException {
106 106 RuleProcessingMetaData md = new RuleProcessingMetaData();
107 107
108 108 FromDeviceMsg msg = wrapper.getPayload();
... ...
... ... @@ -17,7 +17,8 @@ package org.thingsboard.server.extensions.kafka.action;
17 17
18 18 import lombok.Builder;
19 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 23 import java.io.Serializable;
23 24
... ... @@ -30,5 +31,5 @@ public class KafkaActionPayload implements Serializable {
30 31 private final boolean sync;
31 32
32 33 private final Integer requestId;
33   - private final MsgType msgType;
  34 + private final SessionMsgType sessionMsgType;
34 35 }
... ...
... ... @@ -16,7 +16,7 @@
16 16 package org.thingsboard.server.extensions.kafka.action;
17 17
18 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 20 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
21 21 import org.thingsboard.server.extensions.api.component.Action;
22 22 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -30,7 +30,7 @@ import java.util.Optional;
30 30 public class KafkaPluginAction extends AbstractTemplatePluginAction<KafkaPluginActionConfiguration> {
31 31
32 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 34 KafkaActionPayload.KafkaActionPayloadBuilder builder = KafkaActionPayload.builder();
35 35 builder.msgType(payload.getMsgType());
36 36 builder.requestId(payload.getRequestId());
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.mqtt.action;
17 17
18 18 import lombok.Builder;
19 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 22 import java.io.Serializable;
23 23
... ... @@ -30,5 +30,5 @@ public class MqttActionPayload implements Serializable {
30 30 private final String msgBody;
31 31
32 32 private final Integer requestId;
33   - private final MsgType msgType;
  33 + private final SessionMsgType sessionMsgType;
34 34 }
... ...
... ... @@ -15,7 +15,7 @@
15 15 */
16 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 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 20 import org.thingsboard.server.extensions.api.component.Action;
21 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -28,7 +28,7 @@ import java.util.Optional;
28 28 public class MqttPluginAction extends AbstractTemplatePluginAction<MqttPluginActionConfiguration> {
29 29
30 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 32 MqttActionPayload.MqttActionPayloadBuilder builder = MqttActionPayload.builder();
33 33 builder.sync(configuration.isSync());
34 34 builder.msgType(payload.getMsgType());
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.rabbitmq.action;
17 17
18 18 import lombok.Builder;
19 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 22 import java.io.Serializable;
23 23
... ... @@ -35,5 +35,5 @@ public class RabbitMqActionPayload implements Serializable {
35 35
36 36 private final boolean sync;
37 37 private final Integer requestId;
38   - private final MsgType msgType;
  38 + private final SessionMsgType sessionMsgType;
39 39 }
... ...
... ... @@ -15,7 +15,7 @@
15 15 */
16 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 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 20 import org.thingsboard.server.extensions.api.component.Action;
21 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -32,7 +32,7 @@ import java.util.Optional;
32 32 public class RabbitMqPluginAction extends AbstractTemplatePluginAction<RabbitMqPluginActionConfiguration> {
33 33
34 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 36 RabbitMqActionPayload.RabbitMqActionPayloadBuilder builder = RabbitMqActionPayload.builder();
37 37 builder.sync(configuration.isSync());
38 38 builder.exchange(configuration.getExchange());
... ...
... ... @@ -19,7 +19,8 @@ import lombok.Builder;
19 19 import lombok.Data;
20 20 import org.springframework.http.HttpMethod;
21 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 25 import java.io.Serializable;
25 26
... ... @@ -33,5 +34,5 @@ public class RestApiCallActionPayload implements Serializable {
33 34 private final boolean sync;
34 35
35 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 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.springframework.http.HttpMethod;
20 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 22 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
23 23 import org.thingsboard.server.extensions.api.component.Action;
24 24 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -33,7 +33,7 @@ import java.util.Optional;
33 33 public class RestApiCallPluginAction extends AbstractTemplatePluginAction<RestApiCallPluginActionConfiguration> {
34 34
35 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 37 RestApiCallActionPayload.RestApiCallActionPayloadBuilder builder = RestApiCallActionPayload.builder();
38 38 builder.msgType(payload.getMsgType());
39 39 builder.requestId(payload.getRequestId());
... ...
... ... @@ -17,7 +17,7 @@ package org.thingsboard.server.extensions.sns.action;
17 17
18 18 import lombok.Builder;
19 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 22 import java.io.Serializable;
23 23
... ... @@ -32,6 +32,6 @@ public class SnsTopicActionPayload implements Serializable {
32 32 private final String msgBody;
33 33
34 34 private final Integer requestId;
35   - private final MsgType msgType;
  35 + private final SessionMsgType sessionMsgType;
36 36 private final boolean sync;
37 37 }
... ...
... ... @@ -15,7 +15,7 @@
15 15 */
16 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 19 import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
20 20 import org.thingsboard.server.extensions.api.component.Action;
21 21 import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
... ... @@ -31,7 +31,7 @@ import java.util.Optional;
31 31 public class SnsTopicPluginAction extends AbstractTemplatePluginAction<SnsTopicPluginActionConfiguration> {
32 32
33 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 35 SnsTopicActionPayload.SnsTopicActionPayloadBuilder builder = SnsTopicActionPayload.builder();
36 36 builder.msgType(payload.getMsgType());
37 37 builder.requestId(payload.getRequestId());
... ...