From 6cb25bae631d61905d14a816140c069938644592 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Fri, 15 May 2026 18:02:34 +0200 Subject: [PATCH] Add: Endgame event creation end sending --- .../it/polimi/ingsw/gc14/Model/MiniModel.java | 5 ++ .../polimi/ingsw/gc14/Network/EventType.java | 1 + .../gc14/Network/NetworkEvents/EndedGame.java | 50 +++++++++++++++++++ .../gc14/Network/TCP/Client/TCPClient.java | 24 +++++---- .../it/polimi/ingsw/gc14/ServerLauncher.java | 22 +++++--- 5 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/EndedGame.java diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/MiniModel.java b/src/main/java/it/polimi/ingsw/gc14/Model/MiniModel.java index 78c9d10..ebbeb10 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/MiniModel.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/MiniModel.java @@ -18,6 +18,7 @@ public class MiniModel implements Serializable { public CurrentState currentState; public Map players; public List availableTotems; + public List standingPlayers; // --- Costruttori --- @@ -37,6 +38,7 @@ public class MiniModel implements Serializable { this.currentState = currentState; this.players = new HashMap<>(); this.availableTotems = availableTotems; + this.standingPlayers = new ArrayList<>(); setPlayers(players); } @@ -72,6 +74,9 @@ public class MiniModel implements Serializable { public void setPlayer(Player player) { players.put(player.getUserName(), player); } + public void setStandingPlayers(List standingPlayers) { + this.standingPlayers = standingPlayers; + } public int getPositionByUsername(String username) { diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/EventType.java b/src/main/java/it/polimi/ingsw/gc14/Network/EventType.java index 2bf097f..72d4394 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/EventType.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/EventType.java @@ -18,5 +18,6 @@ public enum EventType { DISCONNECTED_PLAYER, RECONNECT_PLAYER, NEXT_ROUND, + ENDED_GAME, NO_OPTIONAL_CARD } diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/EndedGame.java b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/EndedGame.java new file mode 100644 index 0000000..cfe3998 --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/Network/NetworkEvents/EndedGame.java @@ -0,0 +1,50 @@ +package it.polimi.ingsw.gc14.Network.NetworkEvents; + +import it.polimi.ingsw.gc14.Controller.GameController; +import it.polimi.ingsw.gc14.Model.GamePackage.CurrentState; +import it.polimi.ingsw.gc14.Model.MiniModel; +import it.polimi.ingsw.gc14.Model.OrderLogicCard; +import it.polimi.ingsw.gc14.Model.Player; +import it.polimi.ingsw.gc14.Model.Slot; +import it.polimi.ingsw.gc14.Network.EventType; +import it.polimi.ingsw.gc14.Network.NetworkEvent; +import it.polimi.ingsw.gc14.View.IView; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * NetworkEvent to draw a tribe card from the lower card list. + */ +public class EndedGame extends NetworkEvent implements Serializable{ + + List players; + //TODO + public EndedGame(Map slotPlayerMap, OrderLogicCard orderLogicCard, CurrentState currentState, List players){ + super("SERVER",EventType.ENDED_GAME,false); + this.slotPlayerMap = slotPlayerMap; + this.orderLogicCard = orderLogicCard; + this.currentState = currentState; + this.players = players; + } + + /** + * @param gameController the Game Controller on which to apply the event + * @return true if the player could draw the card, false otherwise + */ + @Override + public boolean apply(GameController gameController){ + return false; + } + public boolean apply(MiniModel miniModel) + { + miniModel.setSlotPlayerMap(slotPlayerMap); + miniModel.setOrderLogicCard(orderLogicCard); + miniModel.setCurrentState(currentState); + miniModel.setPlayers(players); + miniModel.setStandingPlayers(players); + return true; + } + +} diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java index b9b09fb..3e77626 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java @@ -156,20 +156,24 @@ public class TCPClient implements IClient { e.printStackTrace(); break; } - synchronized (controller) { - if (read instanceof NetworkEvent event) { - if (event.getIsError()) { - controller.view.showError(event.toString()); - } else { - event.apply(controller.miniModel); - controller.view.render(); - } - } else if (read instanceof MiniModel model) { - controller.setModel(model); + if (read instanceof NetworkEvent event) { + if (event.getIsError()) { + controller.view.showError(event.toString()); + } else { + synchronized (controller) { + event.apply(controller.miniModel); + } controller.view.render(); } + + } else if (read instanceof MiniModel model) { + synchronized (controller) { + controller.setModel(model); + } + controller.view.render(); } + } catch (ClassNotFoundException e) { e.printStackTrace(); break; diff --git a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java index 2868c5b..10a06b4 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java +++ b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java @@ -11,6 +11,7 @@ import it.polimi.ingsw.gc14.Network.EventType; import it.polimi.ingsw.gc14.Network.NetworkEvent; import it.polimi.ingsw.gc14.Network.NetworkEvents.ApplyNextRound; import it.polimi.ingsw.gc14.Network.NetworkEvents.DisconnectedPlayer; +import it.polimi.ingsw.gc14.Network.NetworkEvents.EndedGame; import it.polimi.ingsw.gc14.Network.NetworkEvents.TotemChoice; import it.polimi.ingsw.gc14.Network.RMI.Server.RMIServer; import it.polimi.ingsw.gc14.Network.TCP.Server.TCPServer; @@ -119,15 +120,21 @@ public class ServerLauncher { Game game=gameController.getModel(); if(!event.getIsError()) { - if(event.getEventType().equals(EventType.DISCONNECTED_PLAYER)&& game.getCurrentState().getGameStage().equals(GameStages.WAITING)) + if(game.getCurrentState().getGameStage().equals(GameStages.ENDED)) { - playerList.remove(event.getUsername()); - }else { - event.setData(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(), game.getPlayerByUsername(event.getUsername())); - if (event.getEventType().equals(EventType.TOTEM_CHOICE)) { - ((TotemChoice) event).setAvailableTotems(gameController.getModel().getAvailableTotems()); - } else if (event.getEventType().equals(EventType.DISCONNECTED_PLAYER) && game.getCurrentState().equals(GameStages.WAITING)) { + actionQueue.offer(new EndedGame(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(),game.getPlayerStanding())); + } + else { + if(event.getEventType().equals(EventType.DISCONNECTED_PLAYER)&& game.getCurrentState().getGameStage().equals(GameStages.WAITING)) + { playerList.remove(event.getUsername()); + }else { + event.setData(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(), game.getPlayerByUsername(event.getUsername())); + if (event.getEventType().equals(EventType.TOTEM_CHOICE)) { + ((TotemChoice) event).setAvailableTotems(gameController.getModel().getAvailableTotems()); + } else if (event.getEventType().equals(EventType.DISCONNECTED_PLAYER) && game.getCurrentState().equals(GameStages.WAITING)) { + playerList.remove(event.getUsername()); + } } } } @@ -161,6 +168,7 @@ public class ServerLauncher { } disconnectionTimer = timerExecutor.schedule(() -> { game.EndGameForFeit(game.getPlayerByUsername(playerList.keySet().stream().toList().getFirst())); + actionQueue.offer(new EndedGame(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(),game.getPlayerStanding())); System.out.println("Timer expired: no player reconnected in 60s."); }, 1, TimeUnit.MINUTES); }