fix: 处理会话恢复后的状态监控启动

This commit is contained in:
Baobhan Sith
2025-05-13 17:37:01 +08:00
parent 2910951c21
commit 6bd1682ffe
5 changed files with 43 additions and 36 deletions
+5 -1
View File
@@ -33,7 +33,8 @@ import { handleRdpProxyConnection } from './handlers/rdp.handler';
import {
handleSshConnect,
handleSshInput,
handleSshResize
handleSshResize,
handleSshResumeSuccess
} from './handlers/ssh.handler';
import {
handleDockerGetStatus,
@@ -257,6 +258,9 @@ export function initializeConnectionHandler(wss: WebSocketServer, sshSuspendServ
// console.warn(`[WebSocket Handler][${type}] WebSocket 在发送 SSH_SUSPEND_RESUMED_NOTIF 前已关闭 (会话 ${newFrontendSessionId})。`);
}
// 在成功恢复并通知前端后,调用 handleSshResumeSuccess 启动状态监控
handleSshResumeSuccess(newFrontendSessionId);
} else {
// console.warn(`[WebSocket Handler][${type}] sshSuspendService.resumeSession 返回 null,无法恢复会话 ${suspendSessionId}。`);
throw new Error('服务未能恢复会话,或会话不存在/状态不正确。');
@@ -251,4 +251,18 @@ export function handleSshResize(ws: AuthenticatedWebSocket, payload: any): void
console.warn(`WebSocket: 会话 ${sessionId} 收到调整大小请求,但 Shell 尚未就绪或流不存在 (isShellReady: ${state.isShellReady})。尺寸将不会立即应用。`);
// A more robust solution would queue the resize or store it in ClientState to be applied later.
}
}
// 处理会话恢复后的状态监控启动
export function handleSshResumeSuccess(sessionId: string): void {
console.log(`[状态DEBUG] [SSH Handler ${sessionId}] 会话恢复成功,准备启动状态轮询`);
const state = clientStates.get(sessionId);
if (state && state.sshClient) {
statusMonitorService.startStatusPolling(sessionId);
console.log(`[状态DEBUG] [SSH Handler ${sessionId}] 已为恢复的会话调用 startStatusPolling`);
// 如果 Docker 状态也需要恢复,可以在这里添加
// startDockerStatusPolling(sessionId);
} else {
console.error(`[状态DEBUG] [SSH Handler ${sessionId}] 无法为恢复的会话启动状态轮询:未找到会话状态或 SSH 客户端。`);
}
}