From c015100ebf45278c96b2a99552fd0280a038bde2 Mon Sep 17 00:00:00 2001 From: Stef Date: Sat, 13 Dec 2025 17:49:54 +0100 Subject: [PATCH] Werkt nog niet --- .../gameThreads/ServerThreadBehaviour.java | 22 +++++++++++-------- .../framework/networking/server/Game.java | 7 +++++- .../networking/server/ServerHandler.java | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/game/gameThreads/ServerThreadBehaviour.java b/framework/src/main/java/org/toop/framework/game/gameThreads/ServerThreadBehaviour.java index 8789e41..91f9186 100644 --- a/framework/src/main/java/org/toop/framework/game/gameThreads/ServerThreadBehaviour.java +++ b/framework/src/main/java/org/toop/framework/game/gameThreads/ServerThreadBehaviour.java @@ -7,22 +7,26 @@ import org.toop.framework.gameFramework.model.game.TurnBasedGame; import org.toop.framework.gameFramework.model.game.threadBehaviour.AbstractThreadBehaviour; import org.toop.framework.gameFramework.model.player.Player; import org.toop.framework.gameFramework.view.GUIEvents; +import org.toop.framework.utils.ImmutablePair; import java.util.function.Consumer; +import static org.toop.framework.gameFramework.GameState.TURN_SKIPPED; +import static org.toop.framework.gameFramework.GameState.WIN; + public class ServerThreadBehaviour extends AbstractThreadBehaviour implements Runnable { - private Consumer onPlayerMove; + private Consumer> onPlayerMove; /** * Creates a new base behaviour for the specified game. * * @param game the turn-based game to control */ - public ServerThreadBehaviour(TurnBasedGame game, Consumer onPlayerMove) { + public ServerThreadBehaviour(TurnBasedGame game, Consumer> onPlayerMove) { super(game); } - private void notifyPlayerMove(int player) { - onPlayerMove.accept(player); + private void notifyPlayerMove(ImmutablePair pair) { + onPlayerMove.accept(pair); } /** Starts the game loop in a new thread. */ @@ -47,14 +51,14 @@ public class ServerThreadBehaviour extends AbstractThreadBehaviour implements Ru PlayResult result = game.play(move); GameState state = result.state(); + + if (state != TURN_SKIPPED){ + notifyPlayerMove(new ImmutablePair<>(currentPlayer.getName(), Long.numberOfTrailingZeros(move))); + } + switch (state) { case WIN, DRAW -> { isRunning.set(false); - new EventFlow().addPostEvent( - GUIEvents.GameEnded.class, - state == GameState.WIN, - result.player() - ).postEvent(); } case NORMAL, TURN_SKIPPED -> { /* continue normally */ } default -> { diff --git a/framework/src/main/java/org/toop/framework/networking/server/Game.java b/framework/src/main/java/org/toop/framework/networking/server/Game.java index eeb75a3..2c9a803 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/Game.java +++ b/framework/src/main/java/org/toop/framework/networking/server/Game.java @@ -12,10 +12,15 @@ public class Game implements OnlineGame { public Game(TurnBasedGame game, User... users) { this.game = game; - this.gameThread = new ServerThreadBehaviour(game, null); + this.gameThread = new ServerThreadBehaviour(game, (pair) -> notifyMoveMade(pair.getLeft(), pair.getRight())); this.users = users; } + private void notifyMoveMade(String speler, int move){ + users[0].sendMessage(String.format("SVR GAME MOVE {PLAYER: \"%s\", DETAILS: \"\", MOVE: \"%s\"}", speler, move)); + users[1].sendMessage(String.format("SVR GAME MOVE {PLAYER: \"%s\", DETAILS: \"\", MOVE: \"%s\"}", speler, move)); + } + @Override public long id() { return id; diff --git a/framework/src/main/java/org/toop/framework/networking/server/ServerHandler.java b/framework/src/main/java/org/toop/framework/networking/server/ServerHandler.java index de33c62..48bc77e 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/ServerHandler.java +++ b/framework/src/main/java/org/toop/framework/networking/server/ServerHandler.java @@ -121,7 +121,7 @@ public class ServerHandler extends SimpleChannelInboundHandler { if(hasArgs(p.args())) return; // TODO check if not number - user.serverPlayer().setMove(Integer.parseInt(p.args()[0])); + user.serverPlayer().setMove(1L << Integer.parseInt(p.args()[0])); } private ParsedMessage parse(String msg) {