From fdd319a4612356eedae816b461842f06e3c6a644 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Thu, 18 Sep 2025 20:15:55 +0200 Subject: [PATCH] Erweiterungen --- .../base/ui/view/MainView.java | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java b/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java index cdbd835..615b4c4 100644 --- a/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java +++ b/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java @@ -562,34 +562,55 @@ public final class MainView extends Main implements BeforeEnterObserver @ClientCallable public void logout() { + UI ui = UI.getCurrent(); + try { - // Cleanup in separatem Thread ohne UI-Navigation + // Wartemeldung anzeigen + var dialog = showWaitDialog("Emulator wird heruntergefahren, bitte warten..."); + + // Cleanup in separatem Thread - KEINE sofortige Session-Manipulation executor.submit(() -> { try { + logger.info("Shutdown wird gestartet..."); shutdown(); + logger.info("Shutdown erfolgreich abgeschlossen"); } catch (Exception ex) { logger.error("Fehler beim Shutdown während Logout", ex); + } finally { + // UI-Update erst NACH vollständigem Shutdown + ui.access(() -> { + try { + logger.info("Starte Logout-Cleanup nach Shutdown"); + dialog.close(); + + // Session cleanup erst nach Shutdown + if (niederlassung != null) { + Application.activeNiederlassungen.remove(niederlassung.name()); + logger.info("Niederlassung {} aus aktiven Niederlassungen entfernt", niederlassung.name()); + } + if (username != null) { + Application.activeUsers.remove(username); + logger.info("Benutzer {} aus aktiven Benutzern entfernt", username); + } + + // Session invalidieren und weiterleiten erst ganz am Ende + ui.getSession().getSession().invalidate(); + logger.info("Session invalidiert - Weiterleitung zur Login-Seite"); + ui.getPage().setLocation("login"); + + } catch (Exception ex) { + logger.error("Fehler beim Logout UI-Update", ex); + // Fallback: Browser reload + ui.getPage().reload(); + } + }); } }); - // Session cleanup sofort - if (niederlassung != null) { - Application.activeNiederlassungen.remove(niederlassung.name()); - } - if (username != null) { - Application.activeUsers.remove(username); - } - - // Session invalidieren - UI.getCurrent().getSession().getSession().invalidate(); - - // Direkte Browser-Weiterleitung ohne Vaadin Navigation - UI.getCurrent().getPage().setLocation("login"); - } catch (Exception ex) { logger.error("Fehler beim Logout", ex); - // Fallback: Browser reload - UI.getCurrent().getPage().reload(); + // Fallback: Browser reload falls sofortiger Fehler + ui.getPage().reload(); } } }