#!/usr/bin/env node // Simple test client for ChatRTC signaling server const io = require('socket.io-client'); const SERVER_URL = process.argv[2] || 'http://localhost:3000'; const NICKNAME = process.argv[3] || `TestUser_${Math.floor(Math.random() * 1000)}`; console.log(`๐Ÿงช Testing ChatRTC Signaling Server`); console.log(`๐Ÿ“ก Connecting to: ${SERVER_URL}`); console.log(`๐Ÿ‘ค Nickname: ${NICKNAME}`); console.log('โ”€'.repeat(50)); const socket = io(SERVER_URL, { transports: ['websocket', 'polling'] }); // Connection events socket.on('connect', () => { console.log('โœ… Connected to server'); console.log(`๐Ÿ”— Socket ID: ${socket.id}`); // Join room after connection setTimeout(() => { socket.emit('join-room', { nickname: NICKNAME, roomId: 'test-room' }); }, 100); }); socket.on('disconnect', (reason) => { console.log(`โŒ Disconnected: ${reason}`); }); socket.on('connect_error', (error) => { console.error('โŒ Connection error:', error.message); process.exit(1); }); // Room events socket.on('joined-room', (data) => { console.log('๐Ÿ  Successfully joined room:'); console.log(` Room ID: ${data.roomId}`); console.log(` Nickname: ${data.nickname}`); console.log(` Users in room: ${data.users.length}`); // Send a test message after joining setTimeout(() => { socket.emit('chat-message', { message: `Hello from ${NICKNAME}! ๐Ÿ‘‹` }); }, 500); }); socket.on('user-joined', (data) => { console.log(`๐Ÿ‘‹ User joined: ${data.nickname} (${data.socketId})`); }); socket.on('user-left', (data) => { console.log(`๐Ÿ‘‹ User left: ${data.nickname} (${data.socketId})`); }); // Message events socket.on('chat-message', (data) => { console.log(`๐Ÿ’ฌ Message from ${data.fromNickname}: ${data.message}`); }); // WebRTC signaling events socket.on('offer', (data) => { console.log(`๐Ÿ“ž Received offer from ${data.fromNickname}`); // Send back a mock answer setTimeout(() => { socket.emit('answer', { targetSocketId: data.fromSocketId, answer: { type: 'answer', sdp: 'mock-answer-sdp-for-testing' } }); }, 100); }); socket.on('answer', (data) => { console.log(`๐Ÿ“ž Received answer from ${data.fromNickname}`); }); socket.on('ice-candidate', (data) => { console.log(`๐ŸงŠ Received ICE candidate from ${data.fromNickname}`); }); // Error handling socket.on('error', (data) => { console.error(`โŒ Server error: ${data.message}`); if (data.code) { console.error(` Error code: ${data.code}`); } }); // Test sequence let testStep = 0; const runTests = () => { testStep++; switch (testStep) { case 1: console.log('๐Ÿงช Test 1: Sending ping...'); socket.emit('ping'); break; case 2: console.log('๐Ÿงช Test 2: Requesting room list...'); socket.emit('get-rooms'); break; case 3: console.log('๐Ÿงช Test 3: Requesting room users...'); socket.emit('get-room-users'); break; case 4: console.log('๐Ÿงช Test 4: Sending mock WebRTC offer...'); socket.emit('offer', { offer: { type: 'offer', sdp: 'mock-offer-sdp-for-testing' } }); break; case 5: console.log('๐Ÿงช Test 5: Updating media state...'); socket.emit('media-state', { isVideoEnabled: false, isAudioEnabled: true }); break; default: console.log('โœ… All tests completed!'); setTimeout(() => { console.log('๐Ÿ‘‹ Disconnecting...'); socket.disconnect(); process.exit(0); }, 1000); return; } setTimeout(runTests, 2000); }; // Additional event handlers for tests socket.on('pong', (data) => { console.log(`๐Ÿ“ Pong received (${data.timestamp})`); }); socket.on('rooms-list', (rooms) => { console.log(`๐Ÿ  Rooms list received (${rooms.length} rooms):`); rooms.forEach(room => { console.log(` - ${room.roomId}: ${room.userCount} users`); }); }); socket.on('room-users', (data) => { console.log(`๐Ÿ‘ฅ Room users for ${data.roomId} (${data.users.length} users):`); data.users.forEach(user => { console.log(` - ${user.nickname} (joined: ${user.joinedAt})`); }); }); socket.on('user-media-state', (data) => { console.log(`๐Ÿ“น Media state update from ${data.nickname}: Video=${data.isVideoEnabled}, Audio=${data.isAudioEnabled}`); }); // Start tests after successful room join socket.on('joined-room', () => { setTimeout(() => { console.log('๐Ÿงช Starting test sequence...'); runTests(); }, 1000); }); // Graceful shutdown process.on('SIGINT', () => { console.log('\n๐Ÿ‘‹ Shutting down test client...'); socket.disconnect(); process.exit(0); }); process.on('SIGTERM', () => { console.log('\n๐Ÿ‘‹ Shutting down test client...'); socket.disconnect(); process.exit(0); });