Statut de connexion au serveur

This commit is contained in:
Pierre Marx
2025-09-04 12:32:09 -04:00
parent e6eaba3018
commit 3f21bc0465
6 changed files with 210 additions and 1 deletions

87
main.js
View File

@@ -1,10 +1,13 @@
const { app, BrowserWindow, ipcMain, session } = require('electron');
const path = require('path');
const fs = require('fs');
const signalR = require('@microsoft/signalr');
let mainWindow;
let config;
let currentAgent = null;
let signalRConnection = null;
let signalRStatus = 'disconnected'; // disconnected, connecting, connected, error
// Charger la configuration
function loadConfig() {
@@ -42,6 +45,82 @@ function createWindow() {
});
}
// === GESTION SIGNALR ===
function initializeSignalR() {
if (!config.signalR || !config.signalR.enabled) {
console.log('SignalR 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...');
signalRStatus = 'connecting';
sendSignalRStatus();
});
signalRConnection.onreconnected(() => {
console.log('SignalR: Reconnecté');
signalRStatus = 'connected';
sendSignalRStatus();
});
signalRConnection.onclose(() => {
console.log('SignalR: Connexion fermée');
signalRStatus = 'disconnected';
sendSignalRStatus();
});
// Démarrer la connexion
startSignalRConnection();
} catch (error) {
console.error('Erreur initialisation SignalR:', error);
signalRStatus = 'error';
sendSignalRStatus();
}
}
async function startSignalRConnection() {
try {
signalRStatus = 'connecting';
sendSignalRStatus();
await signalRConnection.start();
console.log('SignalR: Connexion établie');
signalRStatus = 'connected';
sendSignalRStatus();
} catch (error) {
console.error('Erreur connexion SignalR:', error);
signalRStatus = 'error';
sendSignalRStatus();
// Réessayer dans 5 secondes
setTimeout(() => {
if (signalRConnection && signalRStatus !== 'connected') {
startSignalRConnection();
}
}, 5000);
}
}
function sendSignalRStatus() {
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('signalr-status', signalRStatus);
}
}
// Initialisation de l'application
app.whenReady().then(() => {
// Configuration de la session pour éviter les problèmes CORS
@@ -61,6 +140,9 @@ app.whenReady().then(() => {
loadConfig();
createWindow();
// Initialiser SignalR après le chargement de la config
initializeSignalR();
});
// Quitter quand toutes les fenêtres sont fermées
@@ -84,6 +166,11 @@ ipcMain.handle('get-config', () => {
return config;
});
// Obtenir le statut SignalR
ipcMain.handle('get-signalr-status', () => {
return signalRStatus;
});
// Connexion agent
ipcMain.handle('login-agent', (event, credentials) => {
const agent = config.agents.find(a =>