From 7e23aaa8492d1bc7a1bc6bdf6d71306582e87570 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Mon, 22 Sep 2025 12:04:34 +0200 Subject: [PATCH] Fixed race condition on startup of AI vs Player game # Conflicts: # src/main/java/org/toop/frontend/UI/RemoteGameSelector.java --- .../org/toop/frontend/UI/LocalGameSelector.java | 1 + .../org/toop/frontend/UI/RemoteGameSelector.java | 7 ++++--- .../org/toop/frontend/games/LocalTicTacToe.java | 13 +++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/toop/frontend/UI/LocalGameSelector.java b/src/main/java/org/toop/frontend/UI/LocalGameSelector.java index 082b57c..524b10b 100644 --- a/src/main/java/org/toop/frontend/UI/LocalGameSelector.java +++ b/src/main/java/org/toop/frontend/UI/LocalGameSelector.java @@ -92,6 +92,7 @@ public class LocalGameSelector extends JFrame { } cardLayout.show(cards, "TicTacToe"); } + lttt.startThreads(); } public void showMainMenu() { diff --git a/src/main/java/org/toop/frontend/UI/RemoteGameSelector.java b/src/main/java/org/toop/frontend/UI/RemoteGameSelector.java index 2184c34..dfc0d2e 100644 --- a/src/main/java/org/toop/frontend/UI/RemoteGameSelector.java +++ b/src/main/java/org/toop/frontend/UI/RemoteGameSelector.java @@ -104,7 +104,7 @@ public class RemoteGameSelector { // }); GlobalEventBus.post( - new NetworkEvents.SendCommand( + new Events.ServerEvents.SendCommand( connectionId, "create_game", nameTextField.getText(), @@ -130,8 +130,9 @@ public class RemoteGameSelector { frame.remove(mainMenu); localTicTacToe = LocalTicTacToe.createRemote( - ipTextField.getText(), Integer.parseInt(portTextField.getText())); // TODO: Unsafe parse - UIGameBoard ttt = new UIGameBoard(localTicTacToe, this); // TODO: Fix later + ipTextField.getText(), portTextField.getText()); + UIGameBoard ttt = new UIGameBoard(localTicTacToe, this); + localTicTacToe.startThreads(); frame.add(ttt.getTTTPanel()); // TODO: Fix later frame.revalidate(); frame.repaint(); diff --git a/src/main/java/org/toop/frontend/games/LocalTicTacToe.java b/src/main/java/org/toop/frontend/games/LocalTicTacToe.java index fab148f..3cf3eea 100644 --- a/src/main/java/org/toop/frontend/games/LocalTicTacToe.java +++ b/src/main/java/org/toop/frontend/games/LocalTicTacToe.java @@ -16,6 +16,8 @@ import org.toop.game.tictactoe.TicTacToe; import org.toop.game.tictactoe.ai.MinMaxTicTacToe; import java.util.function.Supplier; +import static java.lang.Thread.sleep; + /** * A representation of a local tic-tac-toe game. Calls are made to a server for information about * current game state. MOST OF THIS CODE IS TRASH, THROW IT OUT OF THE WINDOW AFTER DEMO. @@ -76,7 +78,7 @@ public class LocalTicTacToe { // TODO: Implement runnable this.connectionId = this.createConnection(ip, port); this.createGame("X", "O"); this.isLocal = false; - this.executor.submit(this::remoteGameThread); + //this.executor.submit(this::remoteGameThread); } private LocalTicTacToe(boolean[] aiFlags) { @@ -91,7 +93,14 @@ public class LocalTicTacToe { // TODO: Implement runnable } this.isLocal = true; - this.executor.submit(this::localGameThread); + //this.executor.submit(this::localGameThread); + } + public void startThreads(){ + if (isLocal) { + this.executor.submit(this::localGameThread); + }else { + this.executor.submit(this::remoteGameThread); + } } public static LocalTicTacToe createLocal(boolean[] aiPlayers) {