User's LAN test feedback after 10: 1. Tab B 一直 connecting(socket.io CORS / sync 问题) 2. Player 0/1 下拉框和 p0/p1 后缀到底是什么?UI 重复入口 3. 自创房间还能再点"加入 P0"——应隐藏或显示"已在房间" 4. 翻牌后收牌/再翻牌无反应——socket.io 没真连?lastWinner tie? 5. 没删除房间按钮 待修:删老 input、强化 LobbyRoomList、加 DELETE 端点、显示连接状态。
4.1 KiB
4.1 KiB
11 · 用户测试反馈(LAN 部署第一轮)→ 多个 UX bug
用户测试反馈(按问题编号)
这是 10 那轮 commit
1956c23之后用户实测发现的问题汇总。
问题 1:第二个人加入后依然显示 connecting
症状:Tab A 创建房间 + 加入 P0,Tab B 刷新列表 → 点 "加入 P1" → 房间写入 + UI 切换。但 boardgame.io 的 Client 一直停在 "connecting"(socket.io 握手没完成)。
可能根因:
- socket.io 的 CORS 配置可能和 fetch 的 CORS 不一致
- server 上
origins的 RegExp 列表,socket.io 的 cors 中间件读取方式可能不同 - 或者 Tab B 的
credentials/matchID没正确传递,导致 servermaster.onSync失败 → 一直 reconnecting
待查:socket.io 的 handshake.headers.origin 和 fetch 的 Origin 头处理方式差异。
问题 2:UI 困惑 —— Player0/1 选择和 p0/p1 后缀到底是什么?
现状:
OnlineConfigBar顶部有一个Player:下拉框(值0/1)—— 这是老版手动配置入口LobbyRoomList房间列表里显示(你: 0)、加入 P0、加入 P1按钮 —— 这是新版按钮LobbyClient.joinMatchbody 里传playerName: "${playerName}-${playerID}-xxxx"—— 这里 playerName 里有p0/p1后缀
用户困惑点:老下拉框和新按钮同时存在,自己都不知道该用哪个。
应该做的:
- 删掉
OnlineConfigBar的 Player / Secret 输入框(旧的 workaround) - 全部走 "加入 P0 / 加入 P1" 按钮
- 显示当前在哪个房间、哪个 playerID
问题 3:自己创建的房间还能再次加入?
症状:用户创建房间(自动 join P0),UI 上 "加入 P0" 按钮仍然可见。点击 → server 返回 409。
根因:用户已经在那个房间了,应该不能再点 "加入 P0"。要么隐藏按钮,要么显示"你已在房间(点此返回)"。
现在行为:
canJoin0 = !m.players.find((p) => p.id === '0')?.name—— 自己的房间 P0 已经被自己占了,应该 false- 但用户报告按钮还显示 —— 可能
refresh()时机不对,或者 React state 没更新
应该做的:
- refresh 时机:onSelect 之后立即 refresh
- 显示"已在房间"的视觉指示,而不是消失按钮(消失让人困惑)
问题 4:点击翻牌后系统无法进行下一步
症状:点击"翻牌"后,pile 显示 1 张。但接下来点"收牌"或者再点"翻牌"没反应。
可能根因:
- boardgame.io Client 没真正 connected(connecting 状态)→ move 走 socket.io → 失败
- 或者 move 走了但 server 端 lastWinner 是 tie → collect 不收牌(这个已经在 dev-log 09 修了)
- 或者 activePlayers 配置不对,导致 player 不能调 move
应该做的:
- 显式显示 socket.io 连接状态(connected/connecting/disconnected)
- disconnected 时按钮 disabled + 提示
- 翻牌后 lastWinner 是 tie 时,UI 上显示"平局!再翻一张",让用户知道为什么 collect 没反应
问题 5:没有删除房间按钮
症状:测试中创建了奇怪的房间(多人创建的、不同账号的)堆积在列表里,没法清理。
应该做的:
- 给"自己的房间"加"删除房间"按钮(调
POST /games/:name/:id/leave或者直接 wipe) - 或者提供一个"清理所有非活跃房间"按钮(dev 用)
- 注意:boardgame.io 0.50.2 没有 delete endpoint,要自己加
后续修复(dev-log 11+)
按以下顺序:
- 写文档(本文)
- 删
OnlineConfigBar的 Player/Secret 输入框 LobbyRoomList强化:- "你已在房间 X (P0)" 视觉指示
- 自己的房间显示"返回房间"而不是消失按钮
- 显示 socket.io 连接状态(绿色=connected、黄色=connecting、红色=disconnected)
- 加
POST /games/:name/:idDELETE 端点(只允许创建者删) MillBoard也要支持联机模式(目前 MillOnlineView 是简化的,缺连接状态)- 修 activePlayers 配置问题(如有)
待用户验收
- 部署环境:本机 + 局域网其它机器
- 验收路径:见 10 的验证步骤 + 本文档的问题修复清单