première version avec socketio

This commit is contained in:
Pierre Marx
2025-09-11 19:55:15 -04:00
parent bc6f95ce1d
commit b260c6ed0b
4 changed files with 325 additions and 54 deletions

89
main.js
View File

@@ -3,6 +3,7 @@ const path = require('path');
const fs = require('fs');
const os = require('os');
const signalR = require('@microsoft/signalr');
const ConnectionManager = require('./connection-manager');
let mainWindow;
let config;
@@ -87,58 +88,25 @@ function createWindow() {
});
}
// === GESTION SIGNALR ===
// === GESTION SIGNALR/WEBSOCKET ===
function initializeSignalR() {
if (!config.signalR || !config.signalR.enabled) {
console.log('SignalR désactivé dans la configuration');
console.log('SignalR/WebSocket désactivé dans la configuration');
signalRStatus = 'disabled';
sendSignalRStatus();
return;
}
try {
// Créer la connexion SignalR
signalRConnection = new signalR.HubConnectionBuilder()
.withUrl(config.signalR.serverUrl)
.withAutomaticReconnect([0, 2000, 5000, 10000, 30000])
.configureLogging(signalR.LogLevel.Information)
.build();
// Gérer les changements d'état
signalRConnection.onreconnecting(() => {
console.log('SignalR: Reconnexion en cours...');
logSignalR('🔄 SignalR en reconnexion...', {
previousStatus: signalRStatus,
timestamp: new Date().toISOString()
});
signalRStatus = 'connecting';
sendSignalRStatus();
});
signalRConnection.onreconnected(() => {
console.log('SignalR: Reconnecté');
logSignalR('🔗 SignalR reconnecté avec succès', {
connectionId: signalRConnection.connectionId,
timestamp: new Date().toISOString()
});
signalRStatus = 'connected';
sendSignalRStatus();
});
signalRConnection.onclose(() => {
console.log('SignalR: Connexion fermée');
logSignalR('🔌 SignalR déconnecté', {
lastConnectionId: signalRConnection.connectionId,
timestamp: new Date().toISOString()
});
signalRStatus = 'disconnected';
sendSignalRStatus();
});
// Configurer les méthodes SignalR
setupSignalRMethods();
// Utiliser le ConnectionManager avec fallback automatique SignalR → WebSocket
const connectionManager = new ConnectionManager(config.ServerIp || config.signalR.serverUrl.replace('http://', '').replace('/signalR', ''));
// Démarrer la connexion
// La connexion sera établie plus tard avec fallback automatique
signalRConnection = connectionManager;
// Les handlers d'état seront configurés après la connexion
// Démarrer la connexion (les handlers seront configurés après)
startSignalRConnection();
} catch (error) {
@@ -148,7 +116,14 @@ function initializeSignalR() {
}
}
function setupSignalRMethods() {
function setupSignalRHandlers() {
// Configuration des handlers après la connexion
const connection = signalRConnection.getConnection();
if (!connection) {
console.error('Pas de connexion active pour configurer les handlers');
return;
}
// === LOGGER UNIVERSEL POUR TOUS LES MESSAGES SIGNALR ===
// Intercepter TOUS les messages reçus du serveur pour découvrir les événements disponibles
@@ -185,7 +160,7 @@ function setupSignalRMethods() {
// Écouter tous les événements possibles et logger ce qu'on reçoit
possibleEvents.forEach(eventName => {
signalRConnection.on(eventName, (...args) => {
connection.on(eventName, (...args) => {
// Logger dans la console avec formatage
console.log('═══════════════════════════════════════════════════════════');
console.log(`📨 MESSAGE SIGNALR REÇU: ${eventName}`);
@@ -323,18 +298,28 @@ async function startSignalRConnection() {
try {
signalRStatus = 'connecting';
sendSignalRStatus();
logSignalR('🔌 Tentative de connexion SignalR...', {
serverUrl: config.signalR.serverUrl,
logSignalR('🔌 Tentative de connexion au serveur...', {
serverUrl: config.ServerIp || config.signalR.serverUrl,
status: 'connecting'
});
await signalRConnection.start();
console.log('SignalR: Connexion établie');
logSignalR('✅ Connexion SignalR établie avec succès', {
connectionId: signalRConnection.connectionId,
// Le ConnectionManager gère le fallback automatiquement
const connection = await signalRConnection.connect();
// Déterminer quel type de connexion a réussi
const connectionInfo = signalRConnection.getConnectionInfo();
console.log(`Connexion établie via ${connectionInfo.type}`);
logSignalR(`✅ Connexion établie avec succès (${connectionInfo.type})`, {
connectionType: connectionInfo.type,
isWebSocketFallback: connectionInfo.isWebSocketFallback,
status: 'connected',
serverUrl: config.signalR.serverUrl
serverUrl: connectionInfo.serverUrl
});
// Maintenant configurer les handlers sur la connexion active
setupSignalRHandlers();
signalRStatus = 'connected';
sendSignalRStatus();