fix: démarrage manuel et gestion état serveur
Corrections :
- Serveur NE démarre PLUS automatiquement au lancement
- Utilisateur doit cliquer "Démarrer" (contrôle explicite)
- Logs stderr LiveKit traités comme INFO (pas ERROR)
- Détection démarrage dans stderr aussi ("starting LiveKit server")
- Frontend : charge données seulement si serveur actif
- Polling démarre/arrête selon état serveur
- État initial : bouton Démarrer enabled, Arrêter disabled
Expérience :
1. Lancer app → Interface visible, serveur arrêté
2. Cliquer "Démarrer" → Serveur démarre
3. Dashboard se met à jour automatiquement
4. Cliquer "Arrêter" → Serveur s'arrête, polling stop
Plus de démarrage automatique surprise !
This commit is contained in:
+26
-5
@@ -152,14 +152,34 @@ async function startServer() {
|
|||||||
|
|
||||||
serverProcess.stderr.on('data', (data) => {
|
serverProcess.stderr.on('data', (data) => {
|
||||||
const output = data.toString();
|
const output = data.toString();
|
||||||
console.error('[Serveur Error]', output);
|
|
||||||
|
// LiveKit envoie INFO/WARN dans stderr (comportement normal Go)
|
||||||
|
// Ne les traiter comme erreurs que s'ils contiennent vraiment "ERROR"
|
||||||
|
const isError = output.includes('ERROR') || output.includes('Error:');
|
||||||
|
|
||||||
|
console.log(isError ? '[Serveur Error]' : '[Serveur]', output);
|
||||||
|
|
||||||
if (mainWindow) {
|
if (mainWindow) {
|
||||||
mainWindow.webContents.send('server:log', {
|
mainWindow.webContents.send('server:log', {
|
||||||
level: 'error',
|
level: isError ? 'error' : 'info',
|
||||||
message: output.trim()
|
message: output.trim()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Détecter démarrage LiveKit dans stderr
|
||||||
|
if (output.includes('starting LiveKit server') || output.includes('Serveur prêt')) {
|
||||||
|
if (!serverStarted) {
|
||||||
|
serverStarted = true;
|
||||||
|
console.log('✅ Serveur démarré (détecté via stderr)');
|
||||||
|
|
||||||
|
if (mainWindow) {
|
||||||
|
mainWindow.webContents.send('server:status', { running: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
createTray();
|
||||||
|
resolve({ success: true, url: SERVER_URL });
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
serverProcess.on('error', (error) => {
|
serverProcess.on('error', (error) => {
|
||||||
@@ -361,9 +381,10 @@ app.whenReady().then(async () => {
|
|||||||
console.log('✅ Certificats présents\n');
|
console.log('✅ Certificats présents\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Démarrer le serveur automatiquement
|
// NE PAS démarrer automatiquement
|
||||||
console.log('🔄 Démarrage automatique du serveur...');
|
// L'utilisateur cliquera sur "Démarrer" dans l'interface
|
||||||
await startServer();
|
console.log('✅ Application prête');
|
||||||
|
console.log('💡 Cliquez sur "Démarrer" pour lancer le serveur\n');
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('window-all-closed', () => {
|
app.on('window-all-closed', () => {
|
||||||
|
|||||||
+14
-1
@@ -26,8 +26,12 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||||||
// Vérifier le statut initial du serveur
|
// Vérifier le statut initial du serveur
|
||||||
await checkServerStatus();
|
await checkServerStatus();
|
||||||
|
|
||||||
// Charger les données initiales
|
// Charger les données initiales SEULEMENT si serveur actif
|
||||||
|
if (serverRunning) {
|
||||||
loadInitialData();
|
loadInitialData();
|
||||||
|
} else {
|
||||||
|
console.log('⏸️ Serveur arrêté, en attente de démarrage...');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// ========== Navigation ==========
|
// ========== Navigation ==========
|
||||||
@@ -159,11 +163,20 @@ function updateServerStatus(running) {
|
|||||||
statusText.textContent = 'Actif';
|
statusText.textContent = 'Actif';
|
||||||
btnStart.disabled = true;
|
btnStart.disabled = true;
|
||||||
btnStop.disabled = false;
|
btnStop.disabled = false;
|
||||||
|
|
||||||
|
// Démarrer le polling
|
||||||
|
startStatsPolling();
|
||||||
|
|
||||||
|
// Charger les données initiales
|
||||||
|
loadInitialData();
|
||||||
} else {
|
} else {
|
||||||
indicator.textContent = '⚪';
|
indicator.textContent = '⚪';
|
||||||
statusText.textContent = 'Arrêté';
|
statusText.textContent = 'Arrêté';
|
||||||
btnStart.disabled = false;
|
btnStart.disabled = false;
|
||||||
btnStop.disabled = true;
|
btnStop.disabled = true;
|
||||||
|
|
||||||
|
// Arrêter le polling
|
||||||
|
stopStatsPolling();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user