- 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>
111 lines
3.2 KiB
JavaScript
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); |