const io = require('socket.io-client'); // 使用用户 API Key 测试 Zulip 集成 async function testWithUserApiKey() { console.log('🚀 使用用户 API Key 测试 Zulip 集成...'); console.log('📡 用户 API Key: lCPWCPfGh7WU...pqNfGF8'); console.log('📡 Zulip 服务器: https://zulip.xinghangee.icu/'); console.log('📡 游戏服务器: https://whaletownend.xinghangee.icu/game'); const socket = io('wss://whaletownend.xinghangee.icu/game', { transports: ['websocket', 'polling'], // WebSocket优先,polling备用 timeout: 20000, forceNew: true, reconnection: true, reconnectionAttempts: 3, reconnectionDelay: 1000 }); let testStep = 0; socket.on('connect', () => { console.log('✅ WebSocket 连接成功'); testStep = 1; // 使用包含用户 API Key 的 token const loginMessage = { type: 'login', token: 'lCPWCPfGh7...fGF8_user_token' }; console.log('📤 步骤 1: 发送登录消息(使用用户 API Key)'); socket.emit('login', loginMessage); }); socket.on('login_success', (data) => { console.log('✅ 步骤 1 完成: 登录成功'); console.log(' 会话ID:', data.sessionId); console.log(' 用户ID:', data.userId); console.log(' 用户名:', data.username); console.log(' 当前地图:', data.currentMap); testStep = 2; // 等待 Zulip 客户端初始化 console.log('⏳ 等待 3 秒让 Zulip 客户端初始化...'); setTimeout(() => { const chatMessage = { t: 'chat', content: '🎮 【用户API Key测试】来自游戏的消息!\\n' + '时间: ' + new Date().toLocaleString() + '\\n' + '使用用户 API Key 发送此消息。', scope: 'local' }; console.log('📤 步骤 2: 发送消息到 Zulip(使用用户 API Key)'); console.log(' 目标 Stream: Whale Port'); socket.emit('chat', chatMessage); }, 3000); }); socket.on('chat_sent', (data) => { console.log('✅ 步骤 2 完成: 消息发送成功'); console.log(' 响应:', JSON.stringify(data, null, 2)); // 只在第一次收到 chat_sent 时发送第二条消息 if (testStep === 2) { testStep = 3; setTimeout(() => { // 先切换到 Pumpkin Valley 地图 console.log('📤 步骤 3: 切换到 Pumpkin Valley 地图'); const positionUpdate = { t: 'position', x: 150, y: 400, mapId: 'pumpkin_valley' }; socket.emit('position_update', positionUpdate); // 等待位置更新后发送消息 setTimeout(() => { const chatMessage2 = { t: 'chat', content: '🎃 在南瓜谷发送的测试消息!', scope: 'local' }; console.log('📤 步骤 4: 在 Pumpkin Valley 发送消息'); socket.emit('chat', chatMessage2); }, 1000); }, 2000); } }); socket.on('chat_render', (data) => { console.log('📨 收到来自 Zulip 的消息:'); console.log(' 发送者:', data.from); console.log(' 内容:', data.txt); console.log(' Stream:', data.stream || '未知'); console.log(' Topic:', data.topic || '未知'); }); socket.on('error', (error) => { console.log('❌ 收到错误:', JSON.stringify(error, null, 2)); }); socket.on('disconnect', () => { console.log('🔌 WebSocket 连接已关闭'); console.log(''); console.log('📊 测试结果:'); console.log(' 完成步骤:', testStep, '/ 4'); if (testStep >= 3) { console.log(' ✅ 核心功能正常!'); console.log(' 💡 请检查 Zulip 中的 "Whale Port" 和 "Pumpkin Valley" Streams 查看消息'); } process.exit(0); }); socket.on('connect_error', (error) => { console.error('❌ 连接错误:', error.message); process.exit(1); }); // 20秒后自动关闭(给足够时间完成测试) setTimeout(() => { console.log('⏰ 测试时间到,关闭连接'); socket.disconnect(); }, 20000); } console.log('🔧 准备测试环境...'); testWithUserApiKey().catch(console.error);