Statut de connexion au serveur
This commit is contained in:
87
main.js
87
main.js
@@ -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 =>
|
||||
|
||||
Reference in New Issue
Block a user