Fix: additional controls over data structures

This commit is contained in:
2026-06-10 16:23:10 +02:00
parent 709d1743d0
commit 507e4923d0
2 changed files with 19 additions and 11 deletions
@@ -704,10 +704,11 @@ public class Game implements Serializable {
private synchronized void nextPlayerSetup() { private synchronized void nextPlayerSetup() {
if (GameStages.SLOT_CHOICE == currentState.getGameStage()) { if (GameStages.SLOT_CHOICE == currentState.getGameStage()) {
Player tempPlayer = orderLogicCard.pull(); Player tempPlayer;
if(disconnectedPlayers.containsKey(tempPlayer) && disconnectedPlayers.get(tempPlayer)) { while (true) {
nextPlayerSetup(); tempPlayer = orderLogicCard.pull();
return; if (tempPlayer == null) break;
if (!disconnectedPlayers.containsKey(tempPlayer) || !disconnectedPlayers.get(tempPlayer)) break;
} }
if (tempPlayer != null) { if (tempPlayer != null) {
currentState.PlayerUpdate(tempPlayer, null); currentState.PlayerUpdate(tempPlayer, null);
@@ -1006,11 +1007,16 @@ public class Game implements Serializable {
* ordered by prestige value and, in case of a tie, by food value. * ordered by prestige value and, in case of a tie, by food value.
*/ */
public synchronized void endGameForFeit() { 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); currentState.GameStageUpdate(GameStages.ENDED);
playerStanding = new ArrayList<>(playersList); playerStanding = new ArrayList<>(playersList);
playerStanding.remove(winner); playerStanding.remove(winner);
playerStanding.sort((y,x)->x.getPrestigeValue()==y.getPrestigeValue()?Integer.compare(x.getFoodValue(),y.getFoodValue()):Integer.compare(x.getPrestigeValue(),y.getPrestigeValue())); 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.add(0, winner);
} }
@@ -83,8 +83,8 @@ public class ClientHandler implements Runnable {
*/ */
@Override @Override
public void run() { public void run() {
try {
running = true; running = true;
try {
while (running) { while (running) {
NetworkEvent event = (NetworkEvent) in.readObject(); NetworkEvent event = (NetworkEvent) in.readObject();
if (!actionQueue.add(event)) { if (!actionQueue.add(event)) {
@@ -92,9 +92,11 @@ public class ClientHandler implements Runnable {
} }
} }
} catch (IOException e) { } catch (IOException e) {
System.err.println("Error in incoming connection/disconnection"); System.err.println("Error in incoming connection/disconnection: " + username);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
System.err.println("Class not found"); System.err.println("Class not found: " + username);
} finally {
if (running) disconnect();
} }
} }