Fix: additional controls over data structures
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user