tet
This commit is contained in:
parent
4bdfc1b3f9
commit
e198f1e3ee
@ -306,11 +306,7 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||
}));
|
||||
});
|
||||
|
||||
// Handler pour le pong WebSocket natif
|
||||
ws.on('pong', () => {
|
||||
lastHeartbeatResponse = Date.now();
|
||||
console.log('🏓 [WEBSOCKET] Pong reçu - connexion OK');
|
||||
});
|
||||
// Pas besoin de handler 'pong' - on vérifie l'accès aux logs directement
|
||||
|
||||
|
||||
ws.on('message', async (data) => {
|
||||
@ -331,65 +327,43 @@ const connectWebSocket = async (pterodactylToken, serverId) => {
|
||||
if (heartbeatTimeout) clearTimeout(heartbeatTimeout);
|
||||
|
||||
lastHeartbeatResponse = Date.now();
|
||||
let missedHeartbeats = 0;
|
||||
const MAX_MISSED_HEARTBEATS = 2; // 2 heartbeats manqués = reconnexion
|
||||
|
||||
heartbeatInterval = setInterval(() => {
|
||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||
try {
|
||||
const timeSinceLastResponse = Date.now() - lastHeartbeatResponse;
|
||||
const timeSinceLastLog = Date.now() - lastHeartbeatResponse;
|
||||
|
||||
// Si on a pas eu de réponse depuis plus de 30s, incrémenter le compteur
|
||||
if (timeSinceLastResponse > 30000) {
|
||||
missedHeartbeats++;
|
||||
console.warn(`⚠️ [WEBSOCKET] Heartbeat manqué (${missedHeartbeats}/${MAX_MISSED_HEARTBEATS}). Dernière réponse: ${Math.round(timeSinceLastResponse/1000)}s`);
|
||||
|
||||
if (missedHeartbeats >= MAX_MISSED_HEARTBEATS) {
|
||||
console.error('💔 [WEBSOCKET] Trop de heartbeats manqués! Reconnexion forcée...');
|
||||
if (ws) {
|
||||
ws.terminate(); // Fermeture immédiate sans attendre
|
||||
}
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// Reset le compteur si on a reçu une réponse récemment
|
||||
if (missedHeartbeats > 0) {
|
||||
console.log('✅ [WEBSOCKET] Heartbeat de retour à la normale');
|
||||
missedHeartbeats = 0;
|
||||
// Si on n'a pas reçu de log depuis plus de 40s, c'est que l'accès aux logs est perdu
|
||||
if (timeSinceLastLog > 40000) {
|
||||
console.error(`💔 [WEBSOCKET] Aucun log reçu depuis ${Math.round(timeSinceLastLog/1000)}s - accès aux logs perdu! Reconnexion forcée...`);
|
||||
if (ws) {
|
||||
ws.terminate(); // Fermeture immédiate sans attendre
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Envoyer le heartbeat
|
||||
ws.send(JSON.stringify({ event: 'send heartbeat', args: [] }));
|
||||
console.log('💓 [WEBSOCKET] Heartbeat envoyé');
|
||||
|
||||
// Aussi envoyer un ping WebSocket natif pour vérifier la connexion TCP
|
||||
if (ws.ping) {
|
||||
ws.ping();
|
||||
console.log('🏓 [WEBSOCKET] Ping natif envoyé');
|
||||
}
|
||||
// Redemander l'accès aux logs pour s'assurer qu'on les reçoit toujours
|
||||
ws.send(JSON.stringify({
|
||||
event: 'send logs',
|
||||
args: [null]
|
||||
}));
|
||||
console.log(`📡 [WEBSOCKET] Vérification accès aux logs (dernier reçu: ${Math.round(timeSinceLastLog/1000)}s)`);
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ [WEBSOCKET] Erreur lors de l\'envoi du heartbeat:', error.message);
|
||||
missedHeartbeats++;
|
||||
if (missedHeartbeats >= MAX_MISSED_HEARTBEATS && ws) {
|
||||
console.error('💔 [WEBSOCKET] Erreurs répétées, reconnexion forcée...');
|
||||
console.error('❌ [WEBSOCKET] Erreur lors de la vérification des logs:', error.message);
|
||||
if (ws) {
|
||||
ws.terminate();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.warn('⚠️ [WEBSOCKET] Heartbeat impossible: WebSocket non ouvert (état:', ws ? ws.readyState : 'null', ')');
|
||||
missedHeartbeats++;
|
||||
if (missedHeartbeats >= MAX_MISSED_HEARTBEATS) {
|
||||
console.error('💔 [WEBSOCKET] WebSocket fermé, nettoyage...');
|
||||
if (heartbeatInterval) {
|
||||
clearInterval(heartbeatInterval);
|
||||
heartbeatInterval = null;
|
||||
}
|
||||
console.warn('⚠️ [WEBSOCKET] Vérification impossible: WebSocket non ouvert (état:', ws ? ws.readyState : 'null', ')');
|
||||
if (heartbeatInterval) {
|
||||
clearInterval(heartbeatInterval);
|
||||
heartbeatInterval = null;
|
||||
}
|
||||
}
|
||||
}, 20000); // Vérifier toutes les 20s au lieu de 30s
|
||||
console.log('💓 [WEBSOCKET] Heartbeat configuré (20s, max 2 manqués)');
|
||||
}, 20000); // Vérifier toutes les 20s
|
||||
console.log('📡 [WEBSOCKET] Vérification d\'accès aux logs configurée (20s, timeout 40s)');
|
||||
}
|
||||
|
||||
// Détecter les réponses du serveur (console output, status, etc) pour mettre à jour le lastHeartbeatResponse
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user