195
server/test-client.js
Archivo ejecutable
195
server/test-client.js
Archivo ejecutable
@@ -0,0 +1,195 @@
|
||||
#!/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);
|
||||
});
|
||||
Referencia en una nueva incidencia
Block a user