@ -21,7 +21,6 @@ import com.google.common.util.concurrent.MoreExecutors;
import com.google.gson.Gson ;
import com.google.gson.JsonObject ;
import com.google.protobuf.ByteString ;
import lombok.Getter ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.beans.factory.annotation.Value ;
import org.springframework.context.ApplicationEventPublisher ;
@ -124,6 +123,15 @@ import java.util.stream.Collectors;
public class DefaultTransportService implements TransportService {
public static final String OVERWRITE_ACTIVITY_TIME = "overwriteActivityTime" ;
public static final String SESSION_EXPIRED_MESSAGE = "Session has expired due to last activity time!" ;
public static final TransportProtos . SessionEventMsg SESSION_EVENT_MSG_OPEN = getSessionEventMsg ( TransportProtos . SessionEvent . OPEN ) ;
public static final TransportProtos . SessionEventMsg SESSION_EVENT_MSG_CLOSED = getSessionEventMsg ( TransportProtos . SessionEvent . CLOSED ) ;
public static final TransportProtos . SessionCloseNotificationProto SESSION_CLOSE_NOTIFICATION_PROTO = TransportProtos . SessionCloseNotificationProto . newBuilder ( )
. setMessage ( SESSION_EXPIRED_MESSAGE ) . build ( ) ;
public static final TransportProtos . SubscribeToAttributeUpdatesMsg SUBSCRIBE_TO_ATTRIBUTE_UPDATES_ASYNC_MSG = TransportProtos . SubscribeToAttributeUpdatesMsg . newBuilder ( )
. setSessionType ( TransportProtos . SessionType . ASYNC ) . build ( ) ;
public static final TransportProtos . SubscribeToRPCMsg SUBSCRIBE_TO_RPC_ASYNC_MSG = TransportProtos . SubscribeToRPCMsg . newBuilder ( )
. setSessionType ( TransportProtos . SessionType . ASYNC ) . build ( ) ;
private final AtomicInteger atomicTs = new AtomicInteger ( 0 ) ;
@ -272,9 +280,7 @@ public class DefaultTransportService implements TransportService {
@Override
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 ;
return sessions . computeIfAbsent ( toSessionId ( sessionInfo ) , ( x ) - > new SessionMetaData ( sessionInfo , TransportProtos . SessionType . ASYNC , listener ) ) ;
}
@Override
@ -456,7 +462,7 @@ public class DefaultTransportService implements TransportService {
private TransportDeviceInfo getTransportDeviceInfo ( TransportProtos . DeviceInfoProto di ) {
TransportDeviceInfo tdi = new TransportDeviceInfo ( ) ;
tdi . setTenantId ( new TenantId ( new UUID ( di . getTenantIdMSB ( ) , di . getTenantIdLSB ( ) ) ) ) ;
tdi . setTenantId ( TenantId . fromUUID ( new UUID ( di . getTenantIdMSB ( ) , di . getTenantIdLSB ( ) ) ) ) ;
tdi . setCustomerId ( new CustomerId ( new UUID ( di . getCustomerIdMSB ( ) , di . getCustomerIdLSB ( ) ) ) ) ;
tdi . setDeviceId ( new DeviceId ( new UUID ( di . getDeviceIdMSB ( ) , di . getDeviceIdLSB ( ) ) ) ) ;
tdi . setDeviceProfileId ( new DeviceProfileId ( new UUID ( di . getDeviceProfileIdMSB ( ) , di . getDeviceProfileIdLSB ( ) ) ) ) ;
@ -724,12 +730,8 @@ public class DefaultTransportService implements TransportService {
}
sessions . remove ( uuid ) ;
sessionsToRemove . add ( uuid ) ;
process ( sessionInfo , getSessionEventMsg ( TransportProtos . SessionEvent . CLOSED ) , null ) ;
TransportProtos . SessionCloseNotificationProto sessionCloseNotificationProto = TransportProtos . SessionCloseNotificationProto
. newBuilder ( )
. setMessage ( "Session has expired due to last activity time!" )
. build ( ) ;
sessionMD . getListener ( ) . onRemoteSessionCloseCommand ( uuid , sessionCloseNotificationProto ) ;
process ( sessionInfo , SESSION_EVENT_MSG_CLOSED , null ) ;
sessionMD . getListener ( ) . onRemoteSessionCloseCommand ( uuid , SESSION_CLOSE_NOTIFICATION_PROTO ) ;
}
} else {
if ( lastActivityTime > sessionAD . getLastReportedActivityTime ( ) ) {
@ -810,7 +812,7 @@ public class DefaultTransportService implements TransportService {
if ( log . isTraceEnabled ( ) ) {
log . trace ( "[{}] Processing msg: {}" , toSessionId ( sessionInfo ) , msg ) ;
}
TenantId tenantId = new TenantId ( new UUID ( sessionInfo . getTenantIdMSB ( ) , sessionInfo . getTenantIdLSB ( ) ) ) ;
TenantId tenantId = TenantId . fromUUID ( new UUID ( sessionInfo . getTenantIdMSB ( ) , sessionInfo . getTenantIdLSB ( ) ) ) ;
DeviceId deviceId = new DeviceId ( new UUID ( sessionInfo . getDeviceIdMSB ( ) , sessionInfo . getDeviceIdLSB ( ) ) ) ;
EntityType rateLimitedEntityType = rateLimitService . checkLimits ( tenantId , deviceId , dataPoints ) ;
@ -900,14 +902,14 @@ public class DefaultTransportService implements TransportService {
} else if ( EntityType . TENANT_PROFILE . equals ( entityType ) ) {
tenantProfileCache . remove ( new TenantProfileId ( entityUuid ) ) ;
} else if ( EntityType . TENANT . equals ( entityType ) ) {
rateLimitService . remove ( new TenantId ( entityUuid ) ) ;
rateLimitService . remove ( TenantId . fromUUID ( entityUuid ) ) ;
} else if ( EntityType . DEVICE . equals ( entityType ) ) {
rateLimitService . remove ( new DeviceId ( entityUuid ) ) ;
onDeviceDeleted ( new DeviceId ( entityUuid ) ) ;
}
} else if ( toSessionMsg . hasResourceUpdateMsg ( ) ) {
TransportProtos . ResourceUpdateMsg msg = toSessionMsg . getResourceUpdateMsg ( ) ;
TenantId tenantId = new TenantId ( new UUID ( msg . getTenantIdMSB ( ) , msg . getTenantIdLSB ( ) ) ) ;
TenantId tenantId = TenantId . fromUUID ( new UUID ( msg . getTenantIdMSB ( ) , msg . getTenantIdLSB ( ) ) ) ;
ResourceType resourceType = ResourceType . valueOf ( msg . getResourceType ( ) ) ;
String resourceId = msg . getResourceKey ( ) ;
transportResourceCache . update ( tenantId , resourceType , resourceId ) ;
@ -918,7 +920,7 @@ public class DefaultTransportService implements TransportService {
} else if ( toSessionMsg . hasResourceDeleteMsg ( ) ) {
TransportProtos . ResourceDeleteMsg msg = toSessionMsg . getResourceDeleteMsg ( ) ;
TenantId tenantId = new TenantId ( new UUID ( msg . getTenantIdMSB ( ) , msg . getTenantIdLSB ( ) ) ) ;
TenantId tenantId = TenantId . fromUUID ( new UUID ( msg . getTenantIdMSB ( ) , msg . getTenantIdLSB ( ) ) ) ;
ResourceType resourceType = ResourceType . valueOf ( msg . getResourceType ( ) ) ;
String resourceId = msg . getResourceKey ( ) ;
transportResourceCache . evict ( tenantId , resourceType , resourceId ) ;
@ -1006,7 +1008,7 @@ public class DefaultTransportService implements TransportService {
}
protected TenantId getTenantId ( TransportProtos . SessionInfoProto sessionInfo ) {
return new TenantId ( new UUID ( sessionInfo . getTenantIdMSB ( ) , sessionInfo . getTenantIdLSB ( ) ) ) ;
return TenantId . fromUUID ( new UUID ( sessionInfo . getTenantIdMSB ( ) , sessionInfo . getTenantIdLSB ( ) ) ) ;
}
protected CustomerId getCustomerId ( TransportProtos . SessionInfoProto sessionInfo ) {
@ -1023,7 +1025,7 @@ public class DefaultTransportService implements TransportService {
return new DeviceId ( new UUID ( sessionInfo . getDeviceIdMSB ( ) , sessionInfo . getDeviceIdLSB ( ) ) ) ;
}
public static TransportProtos . SessionEventMsg getSessionEventMsg ( TransportProtos . SessionEvent event ) {
private static TransportProtos . SessionEventMsg getSessionEventMsg ( TransportProtos . SessionEvent event ) {
return TransportProtos . SessionEventMsg . newBuilder ( )
. setSessionType ( TransportProtos . SessionType . ASYNC )
. setEvent ( event ) . build ( ) ;