Fixed: disconnection during lobby creation

This commit is contained in:
rubenpirreram
2026-05-14 13:48:12 +02:00
parent 087c38d190
commit 815b40a8e7
2 changed files with 15 additions and 151 deletions
@@ -96,20 +96,25 @@ public class Game implements Serializable {
return false;
}
disconnetedPlayers.put(player,true);
if(currentState.getCurrentPlayer().equals(player))
if(!currentState.getGameStage().equals(GameStages.TOTEM_CHOICE))
if (currentState.equals(GameStages.WAITING)) {
playersList.remove(player);
return true;
}
if(currentState.getCurrentPlayer().equals(player)) {
if (!currentState.getGameStage().equals(GameStages.TOTEM_CHOICE)) {
nextPlayerSetup();
else
{
if(totemChoiceQueue.isEmpty())
{
player.totem=getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size()-1));
}
else {
return true;
}
else {
if (totemChoiceQueue.isEmpty()) {
player.totem = getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size() - 1));
} else {
totemChoiceQueue.add(player);
}
currentState.PlayerUpdate(totemChoiceQueue.poll(),null);
currentState.PlayerUpdate(totemChoiceQueue.poll(), null);
return true;
}
}
return true;
}
@@ -1,141 +0,0 @@
package it.polimi.ingsw.gc14.Controller;
import it.polimi.ingsw.gc14.Model.Game;
import it.polimi.ingsw.gc14.Model.Player;
import it.polimi.ingsw.gc14.Network.IClient;
import it.polimi.ingsw.gc14.View.IView;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.rmi.RemoteException;
import static org.junit.jupiter.api.Assertions.*;
class ClientControllerTest {
private FakeView view;
private FakeClient client;
private ClientController controller;
@BeforeEach
void setUp() {
view = new FakeView();
client = new FakeClient();
controller = new ClientController(view);
controller.setClient(client);
}
@Test
void testConstructorInitialization() {
assertSame(view, controller.view);
assertNotNull(controller.localController);
}
@Test
void testSetModelUpdatesLocalControllerAndView() {
Game game = createGame();
controller.setModel(game);
assertSame(game, controller.localController.getModel());
assertSame(game, view.model);
}
@Test
void testOnError() {
controller.onError("Errore di test");
assertEquals("Errore di test", view.lastError);
}
@Test
void testSetClientDelegatesAction() {
FakeClient newClient = new FakeClient();
controller.setClient(newClient);
Game game = createGame();
controller.setModel(game);
String current = game.getCurrentState().getCurrentPlayer().getUserName();
controller.drawUpperTribeCard(current, 0);
assertEquals("drawUpperTribeCard", newClient.lastMethodCalled);
assertEquals(current, newClient.lastUsername);
assertEquals(0, newClient.lastPos);
}
@Test
void testDrawUpperTribeCardDelegatesCorrectly() {
Game game = createGame();
controller.setModel(game);
String current = game.getCurrentState().getCurrentPlayer().getUserName();
controller.drawUpperTribeCard(current, 0);
assertEquals("drawUpperTribeCard", client.lastMethodCalled);
assertEquals(current, client.lastUsername);
assertEquals(0, client.lastPos);
assertNull(view.lastError);
}
@Test
void testDrawUpperTribeCardWrongPlayerShowsError() {
Game game = createGame();
controller.setModel(game);
String current = game.getCurrentState().getCurrentPlayer().getUserName();
String wrong = current.equals("p1") ? "p2" : "p1";
controller.drawUpperTribeCard(wrong, 0);
assertEquals("It's not your turn!", view.lastError);
assertNull(client.lastMethodCalled);
}
@Test
void testSlotChoiceDelegatesCorrectly() {
Game game = createGame();
controller.setModel(game);
String current = game.getCurrentState().getCurrentPlayer().getUserName();
controller.slotChoice(current, 1);
assertEquals("slotChoice", client.lastMethodCalled);
assertEquals(current, client.lastUsername);
assertEquals(1, client.lastPos);
assertNull(view.lastError);
}
private Game createGame() {
Game game = new Game(2);
game.addPlayer(new Player("p1"));
game.addPlayer(new Player("p2"));
return game;
}
private static class FakeView implements IView {
Game model;
String lastError;
@Override public void setModel(Game game) { this.model = game; }
@Override public void render() {}
@Override public void showMessage(String message) {}
@Override public void showError(String message) { this.lastError = message; }
}
private static class FakeClient implements IClient {
String lastMethodCalled;
String lastUsername;
int lastPos;
@Override public boolean connect(String username, int preferredInt) { return true; }
@Override public void drawUpperTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawUpperTribeCard"; lastUsername = u; lastPos = pos; }
@Override public void drawLowerTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawLowerTribeCard"; lastUsername = u; lastPos = pos; }
@Override public void drawUpperBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawUpperBuildingCard"; lastUsername = u; lastPos = pos; }
@Override public void drawLowerBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "drawLowerBuildingCard"; lastUsername = u; lastPos = pos; }
@Override public void skipTurn(String u) throws RemoteException { lastMethodCalled = "skipTurn"; lastUsername = u; }
@Override public void pickOptionalTribeCard(String u, int pos) throws RemoteException { lastMethodCalled = "pickOptionalTribeCard"; lastUsername = u; lastPos = pos; }
@Override public void pickOptionalBuildingCard(String u, int pos) throws RemoteException { lastMethodCalled = "pickOptionalBuildingCard"; lastUsername = u; lastPos = pos; }
@Override public void noOptionalCard(String u) throws RemoteException { lastMethodCalled = "noOptionalCard"; lastUsername = u; }
@Override public void slotChoice(String u, int pos) throws RemoteException { lastMethodCalled = "slotChoice"; lastUsername = u; lastPos = pos; }
}
}