Class ConnectionRestService
java.lang.Object
com.bytedesk.core.base.BaseRestService<T,TRequest,TResponse>
com.bytedesk.core.base.BaseRestServiceWithExport<ConnectionEntity,ConnectionRequest,ConnectionResponse,ConnectionExcel>
com.bytedesk.core.socket.connection.ConnectionRestService
@Service
public class ConnectionRestService
extends BaseRestServiceWithExport<ConnectionEntity,ConnectionRequest,ConnectionResponse,ConnectionExcel>
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AuthServiceprivate final org.springframework.cache.CacheManagerprivate final ConnectionMetricsprivate final ConnectionRepositoryprivate static final longprivate final org.modelmapper.ModelMapperprivate final PresenceTtlResolverprivate final org.springframework.data.redis.core.StringRedisTemplateprivate final UidUtils -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidapplyConnectedState(ConnectionEntity entity, String protocol, Integer ttlSeconds, long now) private voidcacheLastDbWrite(String clientId, long ts) convertToExcel(ConnectionEntity entity) 转换为Excel对象 子类必须实现此方法convertToResponse(ConnectionEntity entity) intcountActiveConnections(String userUid) create(ConnectionRequest request) protected org.springframework.data.jpa.domain.Specification<ConnectionEntity>createSpecification(ConnectionRequest request) 创建Specification对象,子类必须实现 用于queryByOrg的通用实现voiddelete(ConnectionRequest request) voiddeleteByUid(String uid) protected ConnectionEntitydoSave(ConnectionEntity entity) 子类实现具体的保存逻辑private booleanensureConnectionExistsFromHeartbeat(String clientId, long now) private voidevictPresenceCaches(String userUid) protected org.springframework.data.domain.Page<ConnectionEntity>executePageQuery(org.springframework.data.jpa.domain.Specification<ConnectionEntity> spec, org.springframework.data.domain.Pageable pageable) 执行分页查询,子类必须实现 用于queryByOrg的通用实现existsByUid(String uid) intCleanup expired (stale) connections by TTLprivate ConnectionEntityfetchConnectionForUpdate(String clientId, Supplier<ConnectionEntity> creator) intflushHeartbeatCacheBatch(Map<String, Long> heartbeats) 批量刷新心跳缓存到数据库,返回成功更新条数。getPresence(String userUid) handleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, ConnectionEntity entity) voidUpdate heartbeat for a client connectionbooleanisUserOnline(String userUid) Determine online (has >=1 active non-expired connection)listActiveConnections(String userUid) voidmarkConnected(String userUid, String orgUid, String clientId, String deviceUid, String protocol, String channel, String ip, String userAgent, Integer ttlSeconds) Mark (or create) a connection as connected.voidmarkDisconnected(String clientId) Mark a client connection as disconnectedprivate voidtryWriteHeartbeatToCache(String clientId, long ts) update(ConnectionRequest request) Methods inherited from class com.bytedesk.core.base.BaseRestServiceWithExport
queryByOrgEntityMethods inherited from class com.bytedesk.core.base.BaseRestService
deleteByOrgUid, findByOrgUid, getUidFromRequest, queryByOrg, queryByUid, queryByUser, recover, save, setUserUidToRequest
-
Field Details
-
connectionRepository
-
modelMapper
private final org.modelmapper.ModelMapper modelMapper -
uidUtils
-
authService
-
presenceTtlResolver
-
connectionMetrics
-
stringRedisTemplate
private final org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate -
cacheManager
private final org.springframework.cache.CacheManager cacheManager -
MIN_INTERVAL_MS
private static final long MIN_INTERVAL_MS- See Also:
-
-
Constructor Details
-
ConnectionRestService
public ConnectionRestService()
-
-
Method Details
-
createSpecification
protected org.springframework.data.jpa.domain.Specification<ConnectionEntity> createSpecification(ConnectionRequest request) Description copied from class:BaseRestService创建Specification对象,子类必须实现 用于queryByOrg的通用实现- Specified by:
createSpecificationin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
executePageQuery
protected org.springframework.data.domain.Page<ConnectionEntity> executePageQuery(org.springframework.data.jpa.domain.Specification<ConnectionEntity> spec, org.springframework.data.domain.Pageable pageable) Description copied from class:BaseRestService执行分页查询,子类必须实现 用于queryByOrg的通用实现- Specified by:
executePageQueryin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
findByUid
@Cacheable(value="connection", key="#uid", unless="#result==null") public Optional<ConnectionEntity> findByUid(String uid) - Specified by:
findByUidin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
existsByUid
-
create
- Specified by:
createin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
update
- Specified by:
updatein classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
doSave
Description copied from class:BaseRestService子类实现具体的保存逻辑- Specified by:
doSavein classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
handleOptimisticLockingFailureException
public ConnectionEntity handleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, ConnectionEntity entity) - Specified by:
handleOptimisticLockingFailureExceptionin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
deleteByUid
- Specified by:
deleteByUidin classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
delete
- Specified by:
deletein classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
convertToResponse
- Specified by:
convertToResponsein classBaseRestService<ConnectionEntity,ConnectionRequest, ConnectionResponse>
-
convertToExcel
Description copied from class:BaseRestServiceWithExport转换为Excel对象 子类必须实现此方法- Specified by:
convertToExcelin classBaseRestServiceWithExport<ConnectionEntity,ConnectionRequest, ConnectionResponse, ConnectionExcel>
-
markConnected
@Transactional public void markConnected(String userUid, String orgUid, String clientId, String deviceUid, String protocol, String channel, String ip, String userAgent, Integer ttlSeconds) Mark (or create) a connection as connected. clientId format recommendation: userUid/client/deviceUid -
heartbeat
Update heartbeat for a client connection -
tryWriteHeartbeatToCache
-
cacheLastDbWrite
-
fetchConnectionForUpdate
private ConnectionEntity fetchConnectionForUpdate(String clientId, Supplier<ConnectionEntity> creator) -
applyConnectedState
private void applyConnectedState(ConnectionEntity entity, String protocol, Integer ttlSeconds, long now) -
ensureConnectionExistsFromHeartbeat
-
flushHeartbeatCacheBatch
批量刷新心跳缓存到数据库,返回成功更新条数。 该方法供定时任务调用。 -
markDisconnected
Mark a client connection as disconnected -
expireStaleSessions
@Transactional public int expireStaleSessions()Cleanup expired (stale) connections by TTL -
isUserOnline
Determine online (has >=1 active non-expired connection) -
countActiveConnections
-
getPresence
@Transactional(readOnly=true) @Cacheable(value="presence", key="#userUid", unless="#result == null") public PresenceResponse getPresence(String userUid) -
listActiveConnections
@Transactional(readOnly=true) @Cacheable(value="activeConnections", key="#userUid", unless="#result == null") public List<ConnectionResponse> listActiveConnections(String userUid) -
evictPresenceCaches
-