|
|
|
@ -108,6 +108,8 @@ import java.util.concurrent.atomic.AtomicInteger; |
|
|
|
@TbTransportComponent |
|
|
|
public class DefaultTransportService implements TransportService { |
|
|
|
|
|
|
|
public static final String OVERWRITE_ACTIVITY_TIME = "overwriteActivityTime"; |
|
|
|
|
|
|
|
@Value("${transport.sessions.inactivity_timeout}") |
|
|
|
private long sessionInactivityTimeout; |
|
|
|
@Value("${transport.sessions.report_timeout}") |
|
|
|
@ -233,8 +235,10 @@ public class DefaultTransportService implements TransportService { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void registerAsyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener) { |
|
|
|
sessions.putIfAbsent(toSessionId(sessionInfo), new SessionMetaData(sessionInfo, TransportProtos.SessionType.ASYNC, listener)); |
|
|
|
public SessionMetaData registerAsyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener) { |
|
|
|
SessionMetaData newValue = new SessionMetaData(sessionInfo, TransportProtos.SessionType.ASYNC, listener); |
|
|
|
SessionMetaData oldValue = sessions.putIfAbsent(toSessionId(sessionInfo), newValue); |
|
|
|
return oldValue != null ? oldValue : newValue; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -513,7 +517,7 @@ public class DefaultTransportService implements TransportService { |
|
|
|
if (sessionInfo.getGwSessionIdMSB() != 0 && |
|
|
|
sessionInfo.getGwSessionIdLSB() != 0) { |
|
|
|
SessionMetaData gwMetaData = sessions.get(new UUID(sessionInfo.getGwSessionIdMSB(), sessionInfo.getGwSessionIdLSB())); |
|
|
|
if (gwMetaData != null && gwMetaData.getSessionInfo().getActivityTimeFromGatewayDevice()) { |
|
|
|
if (gwMetaData != null && gwMetaData.isOverwriteActivityTime()) { |
|
|
|
lastActivityTime = Math.max(gwMetaData.getLastActivityTime(), lastActivityTime); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -547,7 +551,7 @@ public class DefaultTransportService implements TransportService { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void registerSyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout) { |
|
|
|
public SessionMetaData registerSyncSession(TransportProtos.SessionInfoProto sessionInfo, SessionMsgListener listener, long timeout) { |
|
|
|
SessionMetaData currentSession = new SessionMetaData(sessionInfo, TransportProtos.SessionType.SYNC, listener); |
|
|
|
sessions.putIfAbsent(toSessionId(sessionInfo), currentSession); |
|
|
|
|
|
|
|
@ -557,6 +561,7 @@ public class DefaultTransportService implements TransportService { |
|
|
|
}, timeout, TimeUnit.MILLISECONDS); |
|
|
|
|
|
|
|
currentSession.setScheduledFuture(executorFuture); |
|
|
|
return currentSession; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -703,21 +708,18 @@ public class DefaultTransportService implements TransportService { |
|
|
|
} else { |
|
|
|
newDeviceProfile = null; |
|
|
|
} |
|
|
|
TransportProtos.SessionInfoProto.Builder newSessionInfoBuilder = TransportProtos.SessionInfoProto.newBuilder() |
|
|
|
TransportProtos.SessionInfoProto newSessionInfo = TransportProtos.SessionInfoProto.newBuilder() |
|
|
|
.mergeFrom(md.getSessionInfo()) |
|
|
|
.setDeviceProfileIdMSB(deviceProfileIdMSB) |
|
|
|
.setDeviceProfileIdLSB(deviceProfileIdLSB) |
|
|
|
.setDeviceName(device.getName()) |
|
|
|
.setDeviceType(device.getType()); |
|
|
|
.setDeviceType(device.getType()).build(); |
|
|
|
if (device.getAdditionalInfo().has("gateway") |
|
|
|
&& device.getAdditionalInfo().get("gateway").asBoolean() |
|
|
|
&& device.getAdditionalInfo().has("activityTimeFromGatewayDevice")) { |
|
|
|
boolean activityTimeFromGatewayDevice = device.getAdditionalInfo().get("activityTimeFromGatewayDevice").asBoolean(); |
|
|
|
if (md.getSessionInfo().getActivityTimeFromGatewayDevice() != activityTimeFromGatewayDevice) { |
|
|
|
newSessionInfoBuilder.setActivityTimeFromGatewayDevice(activityTimeFromGatewayDevice); |
|
|
|
} |
|
|
|
&& device.getAdditionalInfo().has(OVERWRITE_ACTIVITY_TIME) |
|
|
|
&& device.getAdditionalInfo().get(OVERWRITE_ACTIVITY_TIME).isBoolean()) { |
|
|
|
md.setOverwriteActivityTime(device.getAdditionalInfo().get(OVERWRITE_ACTIVITY_TIME).asBoolean()); |
|
|
|
} |
|
|
|
TransportProtos.SessionInfoProto newSessionInfo = newSessionInfoBuilder.build(); |
|
|
|
md.setSessionInfo(newSessionInfo); |
|
|
|
transportCallbackExecutor.submit(() -> md.getListener().onDeviceUpdate(newSessionInfo, device, Optional.ofNullable(newDeviceProfile))); |
|
|
|
} |
|
|
|
|