Class_generator/export_logger/websocket-server.js
StillHammer 1f8688c4aa Fix WebSocket logging system and add comprehensive network features
- Fix WebSocket server to properly broadcast logs to all connected clients
- Integrate professional logging system with real-time WebSocket interface
- Add network status indicator with DigitalOcean Spaces connectivity
- Implement AWS Signature V4 authentication for private bucket access
- Add JSON content loader with backward compatibility to JS modules
- Restore navigation breadcrumb system with comprehensive logging
- Add multiple content formats: JSON + JS with automatic discovery
- Enhance top bar with logger toggle and network status indicator
- Remove deprecated temp-games module and clean up unused files

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 23:05:14 +08:00

111 lines
3.2 KiB
JavaScript

#!/usr/bin/env node
// Serveur WebSocket simple pour recevoir les logs temps réel
const WebSocket = require('ws');
const port = 8082;
// Créer le serveur WebSocket
const wss = new WebSocket.Server({ port: port });
console.log(`🚀 Serveur WebSocket démarré sur le port ${port}`);
console.log(`📡 En attente de connexions...`);
// Garder trace des clients connectés
const clients = new Set();
wss.on('connection', function connection(ws) {
console.log('✅ Nouveau client connecté');
clients.add(ws);
// Envoyer un message de bienvenue
const welcomeMessage = {
timestamp: new Date().toISOString(),
level: 'INFO',
message: '🎉 Connexion WebSocket établie - Logs en temps réel actifs'
};
ws.send(JSON.stringify(welcomeMessage));
// Gérer les messages du client (si nécessaire)
ws.on('message', function incoming(data) {
try {
const message = JSON.parse(data);
console.log('📨 Message reçu:', message);
// DIFFUSER LE LOG À TOUS LES CLIENTS CONNECTÉS !
broadcastLog(message);
} catch (error) {
console.log('📨 Message reçu (brut):', data.toString());
}
});
// Nettoyer quand le client se déconnecte
ws.on('close', function close() {
console.log('❌ Client déconnecté');
clients.delete(ws);
});
// Gérer les erreurs
ws.on('error', function error(err) {
console.log('❌ Erreur WebSocket:', err.message);
clients.delete(ws);
});
});
// Fonction pour diffuser un log à tous les clients connectés
function broadcastLog(logData) {
const message = JSON.stringify(logData);
let sentCount = 0;
clients.forEach(ws => {
if (ws.readyState === WebSocket.OPEN) {
try {
ws.send(message);
sentCount++;
} catch (error) {
console.log('❌ Erreur envoi vers client:', error.message);
clients.delete(ws);
}
} else {
// Nettoyer les connexions fermées
clients.delete(ws);
}
});
if (sentCount > 0) {
console.log(`📡 Log diffusé à ${sentCount} client(s): [${logData.level}] ${logData.message.substring(0, 50)}${logData.message.length > 50 ? '...' : ''}`);
}
}
// Export pour utilisation dans d'autres modules
if (typeof module !== 'undefined' && module.exports) {
module.exports = { broadcastLog, wss, clients };
}
// Gérer l'arrêt propre
process.on('SIGINT', () => {
console.log('\n🛑 Arrêt du serveur WebSocket...');
// Fermer toutes les connexions
clients.forEach(ws => {
if (ws.readyState === WebSocket.OPEN) {
ws.close();
}
});
// Fermer le serveur
wss.close(() => {
console.log('✅ Serveur WebSocket arrêté');
process.exit(0);
});
});
// Message de test toutes les 30 secondes pour vérifier que ça marche
setInterval(() => {
if (clients.size > 0) {
const testMessage = {
timestamp: new Date().toISOString(),
level: 'DEBUG',
message: `💓 Heartbeat - ${clients.size} client(s) connecté(s)`
};
broadcastLog(testMessage);
}
}, 30000);