zhaowenyu
2026-03-07 d7fef91a4cbb702988dc820bcde82c166253ceec
ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
@@ -317,7 +317,7 @@
        Long userId = Long.parseLong(userIdStr);
        lastDisconnectTime.remove(userId); // 清除断开标记
        WebSocketSessionManager.addSession(userId, session);
        log.info("【ws】【{}】Connected,size: {}",userId, WebSocketSessionManager.getOnlineUserCount());
        log.info("【ws】【{}】Connected,size: {}", userId, WebSocketSessionManager.getOnlineUserCount());
    }
    @Override
@@ -329,7 +329,7 @@
        }
        Long userId = Long.parseLong(userIdStr);
        WebSocketSessionManager.removeSession(userId);
        log.info("【ws】【{}】Disconnected,size: {}",userId, WebSocketSessionManager.getOnlineUserCount());
        log.info("【ws】【{}】Disconnected,size: {}", userId, WebSocketSessionManager.getOnlineUserCount());
        long version = System.currentTimeMillis();
        lastDisconnectTime.put(userId, version);
        // 释放该用户所有 UAV 控制权
@@ -337,7 +337,7 @@
        // 延迟10秒删除token(若期间没重连)
        CompletableFuture.runAsync(() -> {
            try {
                Thread.sleep(3_000); // 延迟3秒
                Thread.sleep(5_000); // 延迟5秒
            } catch (InterruptedException ignored) {
            }
            // 如果版本号不一致,说明用户曾重连 → 不执行删除
@@ -345,14 +345,15 @@
                return;
            }
            if (!WebSocketSessionManager.containsUser(userId)) {
                uavControlService.releaseAllControls(userId);
                uavStreamManager.stopAllPullStreamByUser(userId);
                uavStateManager.removeSubscribe(userId);
                uavTelemetryManager.removeSubscribe(userId);
                uavSignalManager.removeSubscribe(userId);
                uavControlManager.removeSubscribe(userId);
                LoginUser loginUser = tokenService.getLoginUserByUserId(userId);
                if (loginUser != null) {
                    uavControlService.releaseAllControls(userId);
                    uavStreamManager.stopAllPullStreamByUser(userId);
                    uavStateManager.removeSubscribe(userId);
                    uavTelemetryManager.removeSubscribe(userId);
                    uavSignalManager.removeSubscribe(userId);
                    uavControlManager.removeSubscribe(userId);
                // 只移除本平台用户token,挂接用户token不移除
                if (loginUser != null && "0".equals(loginUser.getUser().getPlatform())) {
                    tokenService.delLoginUser(loginUser.getToken(), userId);
                    log.info("【cmd】用户 [{}] 超时未重连,已删除 token", userId);
                }