From f3aaab516fa52ee4ea221d5d4912738c2286c0d8 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Fri, 15 May 2026 13:36:26 +0200 Subject: [PATCH] Fixed: DisconnectedPlayer and ReconnectPlayer apply with minimodel not initialized, disconnection countdown when the game is ended. Fixed: the player is now removed from order if it was added before. --- src/main/java/it/polimi/ingsw/gc14/LimitedMap.java | 3 ++- .../it/polimi/ingsw/gc14/Model/OrderLogicCard.java | 2 ++ .../Network/NetworkEvents/DisconnectedPlayer.java | 11 +++++++---- .../gc14/Network/NetworkEvents/ReconnectPlayer.java | 10 ++++++---- .../java/it/polimi/ingsw/gc14/ServerLauncher.java | 4 ++-- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/LimitedMap.java b/src/main/java/it/polimi/ingsw/gc14/LimitedMap.java index d4833ae..c9e7c5f 100644 --- a/src/main/java/it/polimi/ingsw/gc14/LimitedMap.java +++ b/src/main/java/it/polimi/ingsw/gc14/LimitedMap.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * A {@link LinkedHashMap} with a configurable size limit and an associated action. @@ -15,7 +16,7 @@ import java.util.Set; */ public class LimitedMap implements Map { - private final LinkedHashMap map = new LinkedHashMap<>(); + private final ConcurrentHashMap map = new ConcurrentHashMap<>(); /** * The maximum number of elements allowed in the map before the action is triggered. diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java index dd6863c..1fac78a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java @@ -70,7 +70,9 @@ public abstract class OrderLogicCard implements Serializable { playerList=new ArrayList<>(); } + playerList.removeIf(x->player.getUserName().equals(x.player.getUserName())); playerList.add(new OrderPlayer(player,false)); + players.removeIf(x->player.getUserName().equals(x.getUserName())); players.add(player); } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/DisconnectedPlayer.java b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/DisconnectedPlayer.java index 06234c7..a7db467 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/DisconnectedPlayer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/DisconnectedPlayer.java @@ -35,10 +35,13 @@ public class DisconnectedPlayer extends NetworkEvent implements Serializable{ public boolean apply(MiniModel miniModel){ if(isError) return false; - miniModel.setPlayer(player); - miniModel.setOrderLogicCard(orderLogicCard); - miniModel.setCurrentState(currentState); - miniModel.setSlotPlayerMap(slotPlayerMap); + if(miniModel!=null) + { + miniModel.setPlayer(player); + miniModel.setOrderLogicCard(orderLogicCard); + miniModel.setCurrentState(currentState); + miniModel.setSlotPlayerMap(slotPlayerMap); + } return true; } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/ReconnectPlayer.java b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/ReconnectPlayer.java index 2289a58..ffcca72 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/ReconnectPlayer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/ReconnectPlayer.java @@ -33,10 +33,12 @@ public class ReconnectPlayer extends NetworkEvent implements Serializable{ public boolean apply(MiniModel miniModel){ if(isError) return false; - miniModel.setPlayer(player); - miniModel.setOrderLogicCard(orderLogicCard); - miniModel.setCurrentState(currentState); - miniModel.setSlotPlayerMap(slotPlayerMap); + if(miniModel!=null) { + miniModel.setPlayer(player); + miniModel.setOrderLogicCard(orderLogicCard); + miniModel.setCurrentState(currentState); + miniModel.setSlotPlayerMap(slotPlayerMap); + } return true; } diff --git a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java index ada11eb..5f38dbf 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java +++ b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java @@ -156,7 +156,7 @@ public class ServerLauncher { System.out.println("\n!!! Save failed !!!\n"); } } - if (event.getEventType().equals(EventType.DISCONNECTED_PLAYER) && playerList.values().stream().filter(x -> x).count() == 1) { + if (event.getEventType().equals(EventType.DISCONNECTED_PLAYER) && playerList.values().stream().filter(x -> x).count() == 1&& game.getCurrentState().getGameStage() != GameStages.ENDED) { if (disconnectionTimer != null && !disconnectionTimer.isDone()) { disconnectionTimer.cancel(false); } @@ -277,7 +277,7 @@ public class ServerLauncher { break; } catch(RemoteException e){ - throw new RuntimeException(e); + //throw new RuntimeException(e); } } }