From 507e4923d055e9807288817f52918a9054acca71 Mon Sep 17 00:00:00 2001 From: aleandro Date: Wed, 10 Jun 2026 16:23:10 +0200 Subject: [PATCH] Fix: additional controls over data structures --- .../java/it/polimi/ingsw/gc14/Model/Game.java | 22 ++++++++++++------- .../Network/TCP/Server/ClientHandler.java | 8 ++++--- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 059b88a..ac48c59 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -704,10 +704,11 @@ public class Game implements Serializable { private synchronized void nextPlayerSetup() { if (GameStages.SLOT_CHOICE == currentState.getGameStage()) { - Player tempPlayer = orderLogicCard.pull(); - if(disconnectedPlayers.containsKey(tempPlayer) && disconnectedPlayers.get(tempPlayer)) { - nextPlayerSetup(); - return; + Player tempPlayer; + while (true) { + tempPlayer = orderLogicCard.pull(); + if (tempPlayer == null) break; + if (!disconnectedPlayers.containsKey(tempPlayer) || !disconnectedPlayers.get(tempPlayer)) break; } if (tempPlayer != null) { currentState.PlayerUpdate(tempPlayer, null); @@ -1006,12 +1007,17 @@ public class Game implements Serializable { * ordered by prestige value and, in case of a tie, by food value. */ public synchronized void endGameForFeit() { - Player winner=playersList.stream().filter(x->!disconnectedPlayers.containsKey(x)||!disconnectedPlayers.get(x)).toList().get(0); + Player winner = playersList.stream() + .filter(x -> !disconnectedPlayers.containsKey(x) || !disconnectedPlayers.get(x)) + .findFirst().orElse(null); + if (winner == null) return; currentState.GameStageUpdate(GameStages.ENDED); - playerStanding=new ArrayList<>(playersList); + playerStanding = new ArrayList<>(playersList); playerStanding.remove(winner); - playerStanding.sort((y,x)->x.getPrestigeValue()==y.getPrestigeValue()?Integer.compare(x.getFoodValue(),y.getFoodValue()):Integer.compare(x.getPrestigeValue(),y.getPrestigeValue())); - playerStanding.add(0,winner); + playerStanding.sort((y, x) -> x.getPrestigeValue() == y.getPrestigeValue() + ? Integer.compare(x.getFoodValue(), y.getFoodValue()) + : Integer.compare(x.getPrestigeValue(), y.getPrestigeValue())); + playerStanding.add(0, winner); } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java index 1688d40..6f277bc 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java @@ -83,8 +83,8 @@ public class ClientHandler implements Runnable { */ @Override public void run() { + running = true; try { - running = true; while (running) { NetworkEvent event = (NetworkEvent) in.readObject(); if (!actionQueue.add(event)) { @@ -92,9 +92,11 @@ public class ClientHandler implements Runnable { } } } catch (IOException e) { - System.err.println("Error in incoming connection/disconnection"); + System.err.println("Error in incoming connection/disconnection: " + username); } catch (ClassNotFoundException e) { - System.err.println("Class not found"); + System.err.println("Class not found: " + username); + } finally { + if (running) disconnect(); } }