Files
Nexus/docs/changelog/2026-06-10-rdp-client-state-constants-fix.md
2026-07-08 22:31:31 +08:00

1.3 KiB
Raw Permalink Blame History

2026-06-10 — RDP Guacamole Client.State 常量修复

摘要

修复浏览器 RDP 已收到 sync 但 UI 永远停在「连接中」:guacamole-common-js 1.5 运行时使用 Client.State.CONNECTED,而非错误的 STATE_CONNECTEDundefined)。

动机

Playwright E2E 与 WS 抓包显示 sync 已到达,但 Pinia 状态未变为 connected;根因是 onstatechangeundefined 比较永远不成立。

涉及文件

  • frontend/src/composables/rdp/useRdpSession.ts — 使用 Client.State / Tunnel.Stateconnect 序号防竞态
  • frontend/src/pages/RdpPage.vuemounted 守卫避免重复 connect
  • frontend/src/types/guacamole.d.ts — 类型与运行时对齐
  • frontend/e2e/pages/rdp-connect.spec.mjs — JWT 注入登录、nav 侧栏、canvas .first()
  • frontend/e2e/helpers.mjsloginWithAccessToken/rdp 导航
  • scripts/rdp_ws_probe.pyscripts/guacd_rdp_probe.py — 生产 WS/guacd 探针

迁移 / 重启

  • 仅前端热更新(web/app sync 到容器)

验证

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 画布。