added TimeoutMessage

This commit is contained in:
Jonah Bauer 2021-12-14 16:26:02 +01:00
parent ba1fed5eb7
commit abe305fc95
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())
);
}
} else if (observerMessage instanceof TimeoutMessage) {
client.println("Timed out.");
} else {
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;
@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()
.registerTypeAdapterFactory(SealedClassTypeAdapterFactory.of(ObserverMessage.class, "Message"))
.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;
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.player.PlayerMessage;
import eu.jonahbauer.wizard.common.messages.player.PredictMessage;
@ -44,6 +45,7 @@ public final class ChangingPrediction extends RoundState {
@Override
public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
return transition(game, oldPrediction + 1);
}

View File

@ -1,5 +1,6 @@
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.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game;
@ -57,6 +58,7 @@ public final class DeterminingTrump extends RoundState {
@Override
public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
Card.Suit[] suits;
if (werewolf) {
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;
import eu.jonahbauer.wizard.common.messages.observer.TimeoutMessage;
import eu.jonahbauer.wizard.core.machine.states.GameData;
import eu.jonahbauer.wizard.core.machine.Game;
import eu.jonahbauer.wizard.core.machine.GameState;
@ -32,6 +33,7 @@ public final class Predicting extends RoundState {
@Override
public Optional<GameState> onTimeout(Game game) {
game.notify(new TimeoutMessage());
try {
checkPrediction(game, 0);
return transition(game, 0);

View File

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

View File

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