From d82ffad191a0fdb2f7bffe31417c7d66ad0c22a3 Mon Sep 17 00:00:00 2001 From: Zelytra Date: Tue, 12 Mar 2024 21:02:49 +0100 Subject: [PATCH] Add master fallback to session --- .../fr/zelytra/session/SessionManager.java | 37 ++++++++++++------- webapp/src/components/fleet/FleetLobby.vue | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/fr/zelytra/session/SessionManager.java b/backend/src/main/java/fr/zelytra/session/SessionManager.java index a527b663..89d7676a 100644 --- a/backend/src/main/java/fr/zelytra/session/SessionManager.java +++ b/backend/src/main/java/fr/zelytra/session/SessionManager.java @@ -102,24 +102,33 @@ public Fleet joinSession(String sessionId, Player player) { * @param player The player to remove from their session. */ public void leaveSession(Player player) { - for (Fleet fleet : sessions.values()) { - SotServer sotServer = getSotServerFromPlayer(player); - if (sotServer != null) { - playerLeaveSotServer(player, sotServer); - } + Fleet fleet = getFleetByPlayerName(player.getUsername()); - fleet.getPlayers().remove(player); - fleet.getServers().forEach((key, value) -> value.getConnectedPlayers().remove(player)); - SessionSocket.broadcastDataToSession(fleet.getSessionId(), MessageType.UPDATE, fleet); - Log.info("[" + fleet.getSessionId() + "] " + player.getUsername() + " Leave the session !"); + SotServer sotServer = getSotServerFromPlayer(player); + if (sotServer != null) { + playerLeaveSotServer(player, sotServer); + } - // Clean empty session - if (fleet.getPlayers().isEmpty()) { - sessions.remove(fleet.getSessionId()); - Log.info("[" + fleet.getSessionId() + "] Has been disbanded"); - } + fleet.getPlayers().remove(player); + fleet.getServers().forEach((key, value) -> value.getConnectedPlayers().remove(player)); + + // Check if player was master, then give another user the master role + if (player.isMaster() && !fleet.getPlayers().isEmpty()) { + Player newMaster = fleet.getPlayers().get(0); + newMaster.setMaster(true); + Log.info("[" + fleet.getSessionId() + "] Master as left, giving the role to " + newMaster.getUsername()); } + + SessionSocket.broadcastDataToSession(fleet.getSessionId(), MessageType.UPDATE, fleet); + Log.info("[" + fleet.getSessionId() + "] " + player.getUsername() + " Leave the session !"); + + // Clean empty session + if (fleet.getPlayers().isEmpty()) { + sessions.remove(fleet.getSessionId()); + Log.info("[" + fleet.getSessionId() + "] Has been disbanded"); + } + } /** diff --git a/webapp/src/components/fleet/FleetLobby.vue b/webapp/src/components/fleet/FleetLobby.vue index b63682f0..122f026d 100644 --- a/webapp/src/components/fleet/FleetLobby.vue +++ b/webapp/src/components/fleet/FleetLobby.vue @@ -90,7 +90,7 @@