From 421cae2ace9846982dca6c43c1e3c2a9469df8e3 Mon Sep 17 00:00:00 2001 From: Jonah Bauer Date: Tue, 14 Dec 2021 16:26:02 +0100 Subject: [PATCH] added TimeoutMessage --- .../main/java/eu/jonahbauer/wizard/client/cli/state/Game.java | 2 ++ .../wizard/common/messages/observer/ObserverMessage.java | 2 +- .../wizard/common/messages/observer/TimeoutMessage.java | 4 ++++ .../wizard/core/machine/states/round/ChangingPrediction.java | 2 ++ .../wizard/core/machine/states/round/DeterminingTrump.java | 2 ++ .../wizard/core/machine/states/round/Predicting.java | 2 ++ .../jonahbauer/wizard/core/machine/states/trick/Juggling.java | 2 ++ .../wizard/core/machine/states/trick/PlayingCard.java | 2 ++ 8 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/TimeoutMessage.java diff --git a/wizard-client/wizard-client-cli/src/main/java/eu/jonahbauer/wizard/client/cli/state/Game.java b/wizard-client/wizard-client-cli/src/main/java/eu/jonahbauer/wizard/client/cli/state/Game.java index ed66e99..0719c64 100644 --- a/wizard-client/wizard-client-cli/src/main/java/eu/jonahbauer/wizard/client/cli/state/Game.java +++ b/wizard-client/wizard-client-cli/src/main/java/eu/jonahbauer/wizard/client/cli/state/Game.java @@ -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() + ""); } diff --git a/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/ObserverMessage.java b/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/ObserverMessage.java index 3f95694..ef32b07 100644 --- a/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/ObserverMessage.java +++ b/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/ObserverMessage.java @@ -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(); diff --git a/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/TimeoutMessage.java b/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/TimeoutMessage.java new file mode 100644 index 0000000..a46cae1 --- /dev/null +++ b/wizard-common/src/main/java/eu/jonahbauer/wizard/common/messages/observer/TimeoutMessage.java @@ -0,0 +1,4 @@ +package eu.jonahbauer.wizard.common.messages.observer; + +public final class TimeoutMessage extends ObserverMessage { +} diff --git a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/ChangingPrediction.java b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/ChangingPrediction.java index cf7486e..9244564 100644 --- a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/ChangingPrediction.java +++ b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/ChangingPrediction.java @@ -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 onTimeout(Game game) { + game.notify(new TimeoutMessage()); return transition(game, oldPrediction + 1); } diff --git a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/DeterminingTrump.java b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/DeterminingTrump.java index 838e45b..0c9ccf1 100644 --- a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/DeterminingTrump.java +++ b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/DeterminingTrump.java @@ -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 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}; diff --git a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/Predicting.java b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/Predicting.java index b13082c..8c12217 100644 --- a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/Predicting.java +++ b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/round/Predicting.java @@ -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 onTimeout(Game game) { + game.notify(new TimeoutMessage()); try { checkPrediction(game, 0); return transition(game, 0); diff --git a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/Juggling.java b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/Juggling.java index 0a918b4..ea64c6c 100644 --- a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/Juggling.java +++ b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/Juggling.java @@ -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 onTimeout(Game game) { + game.notify(new TimeoutMessage()); for (UUID player : get(PLAYERS)) { juggledCards.computeIfAbsent(player, p -> { var hand = get(HANDS).get(p); diff --git a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/PlayingCard.java b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/PlayingCard.java index 7e80bcc..fd6c718 100644 --- a/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/PlayingCard.java +++ b/wizard-core/src/main/java/eu/jonahbauer/wizard/core/machine/states/trick/PlayingCard.java @@ -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 onTimeout(Game game) { + game.notify(new TimeoutMessage()); var hand = get(HANDS).get(get(CURRENT_PLAYER)); var stack = get(STACK);