1.3 KiB
1.3 KiB
2026-06-10 — RDP Guacamole Client.State 常量修复
摘要
修复浏览器 RDP 已收到 sync 但 UI 永远停在「连接中」:guacamole-common-js 1.5 运行时使用 Client.State.CONNECTED,而非错误的 STATE_CONNECTED(undefined)。
动机
Playwright E2E 与 WS 抓包显示 sync 已到达,但 Pinia 状态未变为 connected;根因是 onstatechange 与 undefined 比较永远不成立。
涉及文件
frontend/src/composables/rdp/useRdpSession.ts— 使用Client.State/Tunnel.State;connect 序号防竞态frontend/src/pages/RdpPage.vue—mounted守卫避免重复 connectfrontend/src/types/guacamole.d.ts— 类型与运行时对齐frontend/e2e/pages/rdp-connect.spec.mjs— JWT 注入登录、nav 侧栏、canvas.first()frontend/e2e/helpers.mjs—loginWithAccessToken、/rdp导航scripts/rdp_ws_probe.py、scripts/guacd_rdp_probe.py— 生产 WS/guacd 探针
迁移 / 重启
- 仅前端热更新(
web/appsync 到容器)
验证
cd frontend && npx vite build
# 生产 Playwright(需 NEXUS_E2E_ACCESS_TOKEN 由容器 mint JWT)
NEXUS_E2E_ACCESS_TOKEN=... npx playwright test e2e/pages/rdp-connect.spec.mjs
生产 E2E:约 12s 内出现「已连接」+ 1024×768 画布。