added TimeoutMessage

This commit is contained in:
Jonah Bauer 2021-12-14 16:26:02 +01:00
parent 2b4f629094
commit 421cae2ace
8 changed files with 17 additions and 1 deletions

View File

@ -149,6 +149,8 @@ public final class Game extends BaseState {
LocalDateTime.ofInstant(Instant.ofEpochMilli(input.getTimeout()), ZoneId.systemDefault()) LocalDateTime.ofInstant(Instant.ofEpochMilli(input.getTimeout()), ZoneId.systemDefault())
); );
} }
} else if (observerMessage instanceof TimeoutMessage) {
client.println("Timed out.");
} else { } else {
throw new AssertionError("Unknown observer message " + observerMessage.getClass().getSimpleName() + ""); throw new AssertionError("Unknown observer message " + observerMessage.getClass().getSimpleName() + "");
} }

View File

@ -7,7 +7,7 @@ import eu.jonahbauer.wizard.common.util.SealedClassTypeAdapterFactory;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@EqualsAndHashCode @EqualsAndHashCode
public abstract sealed class ObserverMessage permits CardMessage, HandMessage, PredictionMessage, ScoreMessage, StateMessage, TrickMessage, TrumpMessage, UserInputMessage { public abstract sealed class ObserverMessage permits CardMessage, HandMessage, PredictionMessage, ScoreMessage, StateMessage, TimeoutMessage, TrickMessage, TrumpMessage, UserInputMessage {
private static final Gson GSON = new GsonBuilder() private static final Gson GSON = new GsonBuilder()
.registerTypeAdapterFactory(SealedClassTypeAdapterFactory.of(ObserverMessage.class, "Message")) .registerTypeAdapterFactory(SealedClassTypeAdapterFactory.of(ObserverMessage.class, "Message"))
.create(); .create();

View File

@ -0,0 +1,4 @@
package eu.jonahbauer.wizard.common.messages.observer;
public final class TimeoutMessage extends ObserverMessage {
}

View File

@ -1,6 +1,7 @@
package eu.jonahbauer.wizard.core.machine.states.round; package eu.jonahbauer.wizard.core.machine.states.round;
import eu.jonahbauer.wizard.common.messages.observer.PredictionMessage; import eu.jonahbauer.wizard.common.messages.observer.PredictionMessage;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage; import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage; import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
import eu.jonahbauer.wizard.common.messages.player.PredictMessage; import eu.jonahbauer.wizard.common.messages.player.PredictMessage;
@ -44,6 +45,7 @@ public final class ChangingPrediction extends RoundState {
@Override @Override
public Optional<GameState> onTimeout(Game game) { public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
return transition(game, oldPrediction + 1); return transition(game, oldPrediction + 1);
} }

View File

@ -1,5 +1,6 @@
package eu.jonahbauer.wizard.core.machine.states.round; package eu.jonahbauer.wizard.core.machine.states.round;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.model.Card; import eu.jonahbauer.wizard.common.model.Card;
import eu.jonahbauer.wizard.core.machine.states.GameData; import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game; import eu.jonahbauer.wizard.core.machine.Game;
@ -57,6 +58,7 @@ public final class DeterminingTrump extends RoundState {
@Override @Override
public Optional<GameState> onTimeout(Game game) { public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
Card.Suit[] suits; Card.Suit[] suits;
if (werewolf) { if (werewolf) {
suits = new Card.Suit[]{Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW, Card.Suit.NONE}; suits = new Card.Suit[]{Card.Suit.BLUE, Card.Suit.GREEN, Card.Suit.RED, Card.Suit.YELLOW, Card.Suit.NONE};

View File

@ -1,5 +1,6 @@
package eu.jonahbauer.wizard.core.machine.states.round; package eu.jonahbauer.wizard.core.machine.states.round;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.core.machine.states.GameData; import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game; import eu.jonahbauer.wizard.core.machine.Game;
import eu.jonahbauer.wizard.core.machine.GameState; import eu.jonahbauer.wizard.core.machine.GameState;
@ -32,6 +33,7 @@ public final class Predicting extends RoundState {
@Override @Override
public Optional<GameState> onTimeout(Game game) { public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
try { try {
checkPrediction(game, 0); checkPrediction(game, 0);
return transition(game, 0); return transition(game, 0);

View File

@ -1,6 +1,7 @@
package eu.jonahbauer.wizard.core.machine.states.trick; package eu.jonahbauer.wizard.core.machine.states.trick;
import eu.jonahbauer.wizard.common.messages.observer.HandMessage; import eu.jonahbauer.wizard.common.messages.observer.HandMessage;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage; import eu.jonahbauer.wizard.common.messages.observer.UserInputMessage;
import eu.jonahbauer.wizard.common.messages.player.JuggleMessage; import eu.jonahbauer.wizard.common.messages.player.JuggleMessage;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage; import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
@ -30,6 +31,7 @@ public final class Juggling extends TrickState {
@Override @Override
public Optional<GameState> onTimeout(Game game) { public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
for (UUID player : get(PLAYERS)) { for (UUID player : get(PLAYERS)) {
juggledCards.computeIfAbsent(player, p -> { juggledCards.computeIfAbsent(player, p -> {
var hand = get(HANDS).get(p); var hand = get(HANDS).get(p);

View File

@ -1,5 +1,6 @@
package eu.jonahbauer.wizard.core.machine.states.trick; package eu.jonahbauer.wizard.core.machine.states.trick;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.common.model.Card; import eu.jonahbauer.wizard.common.model.Card;
import eu.jonahbauer.wizard.core.machine.states.GameData; import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game; import eu.jonahbauer.wizard.core.machine.Game;
@ -45,6 +46,7 @@ public final class PlayingCard extends TrickState {
@Override @Override
public Optional<GameState> onTimeout(Game game) { public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
var hand = get(HANDS).get(get(CURRENT_PLAYER)); var hand = get(HANDS).get(get(CURRENT_PLAYER));
var stack = get(STACK); var stack = get(STACK);