196 líneas
5.2 KiB
JavaScript
Archivo Ejecutable
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);
|
|
});
|