// 综合验证脚本:测试客服在线状态认证和同步 const WebSocket = require('ws'); const readline = require('readline'); // 创建命令行交互接口 const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // 模拟客服ID列表 const TEST_MANAGER_ID = '22'; // 测试用客服ID const WEBSOCKET_URL = 'ws://localhost:3003'; // 模拟客服认证消息 function createManagerAuthMessage(managerId) { return { type: 'auth', managerId: managerId, userType: 'manager', timestamp: Date.now() }; } // 执行完整的验证流程 async function runCompleteVerification() { console.log('=========================================='); console.log('客服在线状态综合验证测试'); console.log('=========================================='); // 1. 建立WebSocket连接 console.log(`\n[步骤1] 正在连接WebSocket服务器: ${WEBSOCKET_URL}`); const ws = new WebSocket(WEBSOCKET_URL); ws.on('open', () => { console.log('[成功] WebSocket连接已建立'); // 2. 发送客服认证消息 console.log(`\n[步骤2] 发送客服认证消息,managerId: ${TEST_MANAGER_ID}`); const authMessage = createManagerAuthMessage(TEST_MANAGER_ID); console.log('发送的认证消息:', JSON.stringify(authMessage)); ws.send(JSON.stringify(authMessage)); }); // 3. 监听认证响应 ws.on('message', (data) => { try { const response = JSON.parse(data); console.log('\n[接收到服务器响应]:', JSON.stringify(response)); if (response.type === 'auth_success') { console.log('[成功] 客服认证成功!'); console.log('\n[验证结果]:'); console.log(`- 认证状态: 成功`); console.log(`- 客服ID: ${TEST_MANAGER_ID}`); console.log(`- 用户类型: ${response.payload?.type || '未知'}`); // 5. 说明下一步操作 console.log('\n=========================================='); console.log('验证完成!'); console.log('请前往服务器日志查看:'); console.log('1. 客服认证是否成功'); console.log('2. 客服在线状态是否正确更新'); console.log('3. isManagerOnline函数是否返回true'); console.log('=========================================='); // 保持连接一段时间以便观察心跳 setTimeout(() => { console.log('\n验证连接将在5秒后关闭...'); setTimeout(() => { ws.close(); rl.close(); }, 5000); }, 1000); } else if (response.type === 'auth_error') { console.error('[失败] 客服认证失败:', response.message); ws.close(); rl.close(); } else if (response.type === 'heartbeat') { console.log('[状态] 收到心跳消息,连接保持活跃'); // 发送心跳响应(如果需要) ws.send(JSON.stringify({ type: 'pong' })); } } catch (error) { console.error('[错误] 解析服务器响应失败:', error); } }); // 4. 监听错误和关闭事件 ws.on('error', (error) => { console.error('[错误] WebSocket连接错误:', error.message); }); ws.on('close', (code, reason) => { console.log(`[状态] WebSocket连接已关闭,代码: ${code}, 原因: ${reason || '正常关闭'}`); console.log('\n测试结束。请检查服务器日志以确认客服在线状态是否正确更新。'); }); } // 开始验证 runCompleteVerification().catch(err => { console.error('验证过程中发生错误:', err); rl.close(); }); // 处理用户中断 rl.on('SIGINT', () => { console.log('\n验证已取消'); rl.close(); });