Browse Source

Improvements

pull/3958/head
zbeacon 6 years ago
parent
commit
b2b09b3010
  1. 11
      common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java
  2. 3
      common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandler.java
  3. 22
      common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/auth/SessionInfoCreator.java
  4. 41
      common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java

11
common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewayDeviceSessionCtx.java

@ -15,8 +15,6 @@
*/
package org.thingsboard.server.transport.mqtt.session;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.transport.SessionMsgListener;
@ -39,14 +37,6 @@ public class GatewayDeviceSessionCtx extends MqttDeviceAwareSessionContext imple
DeviceProfile deviceProfile, ConcurrentMap<MqttTopicMatcher, Integer> mqttQoSMap) {
super(UUID.randomUUID(), mqttQoSMap);
this.parent = parent;
JsonParser parser = new JsonParser();
boolean activityTimeFromGatewayDevice = Boolean.FALSE;
if (this.parent.getDeviceInfo().getAdditionalInfo() != null && !"null".equals(this.parent.getDeviceInfo().getAdditionalInfo())) {
JsonObject additionalInfo = parser.parse(this.parent.getDeviceInfo().getAdditionalInfo()).getAsJsonObject();
if (additionalInfo.get("activityTimeFromGatewayDevice") != null) {
activityTimeFromGatewayDevice = additionalInfo.get("activityTimeFromGatewayDevice").getAsBoolean();
}
}
setSessionInfo(SessionInfoProto.newBuilder()
.setNodeId(parent.getNodeId())
.setSessionIdMSB(sessionId.getMostSignificantBits())
@ -61,7 +51,6 @@ public class GatewayDeviceSessionCtx extends MqttDeviceAwareSessionContext imple
.setGwSessionIdLSB(parent.getSessionId().getLeastSignificantBits())
.setDeviceProfileIdMSB(deviceInfo.getDeviceProfileId().getId().getMostSignificantBits())
.setDeviceProfileIdLSB(deviceInfo.getDeviceProfileId().getId().getLeastSignificantBits())
.setActivityTimeFromGatewayDevice(activityTimeFromGatewayDevice)
.build());
setDeviceInfo(deviceInfo);
setDeviceProfile(deviceProfile);

3
common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/GatewaySessionHandler.java

@ -34,7 +34,6 @@ import io.netty.handler.codec.mqtt.MqttPublishMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.DeviceInfo;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.transport.TransportService;
import org.thingsboard.server.common.transport.TransportServiceCallback;
@ -180,8 +179,6 @@ public class GatewaySessionHandler {
return deviceSessionCtx.getPayloadAdaptor();
}
public TransportDeviceInfo getDeviceInfo() { return deviceSessionCtx.getDeviceInfo(); }
void deregisterSession(String deviceName) {
GatewayDeviceSessionCtx deviceSessionCtx = devices.remove(deviceName);
if (deviceSessionCtx != null) {

22
common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/auth/SessionInfoCreator.java

@ -15,16 +15,20 @@
*/
package org.thingsboard.server.common.transport.auth;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.common.transport.TransportContext;
import org.thingsboard.server.gen.transport.TransportProtos;
import java.io.IOException;
import java.util.UUID;
@Slf4j
public class SessionInfoCreator {
public static TransportProtos.SessionInfoProto create(ValidateDeviceCredentialsResponse msg, TransportContext context, UUID sessionId) {
return TransportProtos.SessionInfoProto.newBuilder()
.setNodeId(context.getNodeId())
TransportProtos.SessionInfoProto.Builder builder = TransportProtos.SessionInfoProto.newBuilder();
builder.setNodeId(context.getNodeId())
.setSessionIdMSB(sessionId.getMostSignificantBits())
.setSessionIdLSB(sessionId.getLeastSignificantBits())
.setDeviceIdMSB(msg.getDeviceInfo().getDeviceId().getId().getMostSignificantBits())
@ -34,8 +38,18 @@ public class SessionInfoCreator {
.setDeviceName(msg.getDeviceInfo().getDeviceName())
.setDeviceType(msg.getDeviceInfo().getDeviceType())
.setDeviceProfileIdMSB(msg.getDeviceInfo().getDeviceProfileId().getId().getMostSignificantBits())
.setDeviceProfileIdLSB(msg.getDeviceInfo().getDeviceProfileId().getId().getLeastSignificantBits())
.build();
.setDeviceProfileIdLSB(msg.getDeviceInfo().getDeviceProfileId().getId().getLeastSignificantBits());
if (!"null".equals(msg.getDeviceInfo().getAdditionalInfo())) {
try {
JsonNode infoNode = context.getMapper().readTree(msg.getDeviceInfo().getAdditionalInfo());
if (infoNode.get("gateway").asBoolean()) {
builder.setActivityTimeFromGatewayDevice(infoNode.get("activityTimeFromGatewayDevice").asBoolean());
}
} catch (IOException e) {
log.trace("[{}][{}] Failed to fetch device additional info", sessionId, msg.getDeviceInfo().getDeviceName(), e);
}
}
return builder.build();
}
}

41
common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/service/DefaultTransportService.java

@ -61,6 +61,7 @@ import org.thingsboard.server.common.transport.util.JsonUtils;
import org.thingsboard.server.gen.transport.TransportProtos;
import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceRequestMsg;
import org.thingsboard.server.gen.transport.TransportProtos.ProvisionDeviceResponseMsg;
import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto;
import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg;
import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
@ -510,10 +511,9 @@ public class DefaultTransportService implements TransportService {
long lastActivityTime = sessionMD.getLastActivityTime();
TransportProtos.SessionInfoProto sessionInfo = sessionMD.getSessionInfo();
if (sessionInfo.getGwSessionIdMSB() != 0 &&
sessionInfo.getGwSessionIdLSB() != 0 &&
sessionInfo.getActivityTimeFromGatewayDevice()) {
sessionInfo.getGwSessionIdLSB() != 0) {
SessionMetaData gwMetaData = sessions.get(new UUID(sessionInfo.getGwSessionIdMSB(), sessionInfo.getGwSessionIdLSB()));
if (gwMetaData != null) {
if (gwMetaData != null && gwMetaData.getSessionInfo().getActivityTimeFromGatewayDevice()) {
lastActivityTime = Math.max(gwMetaData.getLastActivityTime(), lastActivityTime);
}
}
@ -647,7 +647,40 @@ public class DefaultTransportService implements TransportService {
}
} else if (EntityType.DEVICE.equals(entityType)) {
Optional<Device> deviceOpt = dataDecodingEncodingService.decode(msg.getData().toByteArray());
deviceOpt.ifPresent(this::onDeviceUpdate);
if (deviceOpt.isPresent()) {
Device device = deviceOpt.get();
if (device.getAdditionalInfo() != null) {
if (device.getAdditionalInfo().get("gateway") != null
&& device.getAdditionalInfo().get("gateway").asBoolean()) {
sessions.forEach((uuid, currentMD) -> {
if (device.getId().equals(new DeviceId(new UUID(currentMD.getSessionInfo().getDeviceIdMSB(), currentMD.getSessionInfo().getDeviceIdLSB())))) {
boolean newActivityTimeFromGatewayDevice = device.getAdditionalInfo().get("activityTimeFromGatewayDevice").asBoolean();
if (currentMD.getSessionInfo().getActivityTimeFromGatewayDevice() != newActivityTimeFromGatewayDevice) {
SessionInfoProto currentSessionInfo = currentMD.getSessionInfo();
SessionInfoProto newSessionInfo = SessionInfoProto.newBuilder()
.setNodeId(currentSessionInfo.getNodeId())
.setSessionIdMSB(currentSessionInfo.getSessionIdMSB())
.setSessionIdLSB(currentSessionInfo.getSessionIdLSB())
.setDeviceIdMSB(currentSessionInfo.getDeviceIdMSB())
.setDeviceIdLSB(currentSessionInfo.getDeviceIdLSB())
.setTenantIdMSB(currentSessionInfo.getTenantIdMSB())
.setTenantIdLSB(currentSessionInfo.getTenantIdLSB())
.setDeviceName(currentSessionInfo.getDeviceName())
.setDeviceType(currentSessionInfo.getDeviceType())
.setGwSessionIdMSB(currentSessionInfo.getGwSessionIdMSB())
.setGwSessionIdLSB(currentSessionInfo.getGwSessionIdLSB())
.setDeviceProfileIdMSB(currentSessionInfo.getDeviceProfileIdMSB())
.setDeviceProfileIdLSB(currentSessionInfo.getDeviceProfileIdLSB())
.setActivityTimeFromGatewayDevice(newActivityTimeFromGatewayDevice)
.build();
currentMD.setSessionInfo(newSessionInfo);
}
}
});
}
}
onDeviceUpdate(device);
}
}
} else if (toSessionMsg.hasEntityDeleteMsg()) {
TransportProtos.EntityDeleteMsg msg = toSessionMsg.getEntityDeleteMsg();

Loading…
Cancel
Save