diff --git a/pages-game/game/minesweeper/play.vue b/pages-game/game/minesweeper/play.vue index bf9714f..5ab0cea 100644 --- a/pages-game/game/minesweeper/play.vue +++ b/pages-game/game/minesweeper/play.vue @@ -555,15 +555,20 @@ export default { }, async initNakama(token, server, key, stableUid = null) { try { - // 兜底逻辑: 如果服务器地址是占位符或无效地址,使用默认值 - const serverUrl = (server && server.includes('yourdomain.com')) || !server + // 兜底逻辑: 如果服务器地址是占位符、本地地址或无效地址,使用默认值 + const isInvalidServer = !server + || server.includes('yourdomain.com') + || server.includes('127.0.0.1') + || server.includes('localhost'); + + const serverUrl = isInvalidServer ? 'wss://kdy.1024tool.vip' : server; const serverKey = key || 'defaultkey'; - // 如果检测到占位符地址并使用了默认值,记录日志 - if (server && server.includes('yourdomain.com')) { - console.warn('[Nakama] 检测到占位符服务器地址,已自动切换为默认服务器: kdy.1024tool.vip'); + // 如果检测到无效地址并使用了默认值,记录日志 + if (isInvalidServer && server) { + console.warn('[Nakama] 检测到无效服务器地址 (' + server + '),已自动切换为默认服务器: wss://kdy.1024tool.vip'); } nakamaManager.initClient(serverUrl, serverKey); @@ -629,6 +634,17 @@ export default { } } + // 如果此时还未连接(即没有现有对局),建立连接以支持在线人数统计和大厅功能 + if (!this.isConnected) { + try { + await nakamaManager.connect(); + this.isConnected = true; + console.log('[Nakama] WebSocket 已连接(用于大厅和在线人数)'); + } catch (err) { + console.warn('[Nakama] 建立连接失败:', err); + } + } + // 加入大厅频道用于统计在线人数 this.joinLobby(); @@ -1103,9 +1119,12 @@ export default { }, async joinLobby() { try { - // 加入 minesweeper_lobby 频道, Type 1 (Room), Persistence True, Hidden False - await nakamaManager.joinChat('minesweeper_lobby', 1, true, false); - console.log('Successfully joined minesweeper lobby'); + // 加入 minesweeper_lobby 频道 + // Type 1 = Room (公开房间,可以有多个用户) + // Persistence = true (保留历史消息) + // Hidden = false (可见频道) + const channel = await nakamaManager.joinChat('minesweeper_lobby', 1, true, false); + console.log('Successfully joined minesweeper lobby, channel ID:', channel?.id); } catch (error) { console.warn('Failed to join lobby channel:', error); }