Files
chatrtc/server/test-client.js
2025-06-15 16:32:37 +02:00

196 líneas
5.2 KiB
JavaScript
Archivo Ejecutable

#!/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);
});