From 66672cbe561dd94bc0955a7f9cdb7aaf10d16fb7 Mon Sep 17 00:00:00 2001 From: shuaiplus <2327005759@qq.com> Date: Thu, 8 May 2025 21:16:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=85=A5=E9=80=BB=E8=BE=91=E5=AE=8C?= =?UTF-8?q?=E7=BE=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/main.js | 48 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/web/main.js b/web/main.js index 93b972f..3d63f6b 100644 --- a/web/main.js +++ b/web/main.js @@ -81,6 +81,15 @@ function createUserItem(user, isMe) { function handleClientList(idx, list, selfId) { const rd = roomsData[idx]; if (!rd) return; + // 更新在线用户列表和映射 + rd.userList = list; + rd.userMap = {}; + list.forEach(u => { rd.userMap[u.clientId] = u; }); + rd.myId = selfId; + if (activeRoomIndex === idx) { + renderUserList(); + renderMainHeader(); // 刷新顶部信息栏 + } // 初始化计数 rd.initCount = (rd.initCount || 0) + 1; // 收到 2 次列表后标记初始化完成,并填充已知用户集合 @@ -89,29 +98,41 @@ function handleClientList(idx, list, selfId) { // 基准用户集合 rd.knownUserIds = new Set(list.map(u => u.clientId)); } - // 更新在线用户列表和映射 - rd.userList = list; - rd.userMap = {}; - list.forEach(u => { rd.userMap[u.clientId] = u; }); - rd.myId = selfId; - // 渲染用户列表 - if (activeRoomIndex === idx) renderUserList(); + } -// 调整 handleClientSecured: 仅在初始化完成后才处理,并避免重复提示 +// 调整 handleClientSecured: 立即更新UI,仅在初始化完成后才处理加入提示 function handleClientSecured(idx, user) { const rd = roomsData[idx]; if (!rd) return; - // 仅在初始列表加载完成后才处理加入提示 + + // 无论初始化状态如何,始终更新用户映射 + rd.userMap[user.clientId] = user; + + // 检查用户是否已在列表中 + const existingUserIndex = rd.userList.findIndex(u => u.clientId === user.clientId); + if (existingUserIndex === -1) { + // 用户不在列表中,添加它 + rd.userList.push(user); + } else { + // 用户已在列表中,更新它 + rd.userList[existingUserIndex] = user; + } + + // 无论初始化状态如何,始终刷新当前房间UI + if (activeRoomIndex === idx) { + renderUserList(); + renderMainHeader(); // 也刷新顶部信息栏 + } + + // 仅在初始化完成后才处理加入提示 if (!rd.isInitialized) { - rd.userMap[user.clientId] = user; return; } + // 检测是否为已知用户集合中不存在的用户 const isNew = !rd.knownUserIds.has(user.clientId); - // 更新列表和映射 - rd.userMap[user.clientId] = user; - if (isNew) rd.userList.push(user); + // 提示新用户加入 if (isNew) { rd.knownUserIds.add(user.clientId); @@ -120,7 +141,6 @@ function handleClientSecured(idx, user) { rd.messages.push({ type: 'system', text: msg }); if (activeRoomIndex === idx) addSystemMsg(msg, true); } - if (activeRoomIndex === idx) renderUserList(); } // 用户下线