forked from datawhale/whale-town-end
- test_zulip.js: Zulip集成功能的端到端测试脚本 - full_diagnosis.js: 全面的WebSocket连接诊断工具 - test_protocol_difference.js: 不同协议(ws/wss/http/https)的对比测试 - test_redirect_and_websocket.js: HTTP重定向和WebSocket升级测试 - test_websocket_handshake_redirect.js: WebSocket握手重定向机制验证 - websocket_with_redirect_support.js: 支持重定向的WebSocket连接实现 提供完整的WebSocket连接问题诊断和解决方案
131 lines
4.2 KiB
JavaScript
131 lines
4.2 KiB
JavaScript
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); |