From 98bff669e993c8941d56f481dd068b2311c86999 Mon Sep 17 00:00:00 2001 From: Ticho Hidding Date: Sun, 5 Oct 2025 18:21:28 +0200 Subject: [PATCH] start van match.java. allemaal events --- app/src/main/java/org/toop/app/GameType.java | 4 +- app/src/main/java/org/toop/app/Match.java | 92 +++++++++++++++++++ .../org/toop/app/layer/layers/GameLayer.java | 7 ++ 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/toop/app/Match.java diff --git a/app/src/main/java/org/toop/app/GameType.java b/app/src/main/java/org/toop/app/GameType.java index 85137a3..0218ece 100644 --- a/app/src/main/java/org/toop/app/GameType.java +++ b/app/src/main/java/org/toop/app/GameType.java @@ -5,14 +5,14 @@ public enum GameType { public static String toName(GameType type) { return switch (type) { - case TICTACTOE -> "Tic Tac Toe"; + case TICTACTOE -> "tic-tac-toe"; case OTHELLO -> "Othello"; }; } public static GameType toType(String name) { return switch (name) { - case "Tic Tac Toe" -> TICTACTOE; + case "tic-tac-toe" -> TICTACTOE; case "Reversi" -> OTHELLO; default -> TICTACTOE; diff --git a/app/src/main/java/org/toop/app/Match.java b/app/src/main/java/org/toop/app/Match.java new file mode 100644 index 0000000..a324fb8 --- /dev/null +++ b/app/src/main/java/org/toop/app/Match.java @@ -0,0 +1,92 @@ +package org.toop.app; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.toop.framework.asset.ResourceLoader; +import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.networking.NetworkingClientManager; +import org.toop.framework.networking.events.NetworkEvents; + +import static java.lang.Thread.sleep; + + +public class Match { + private String player1,player2; + private boolean player1AI,player2AI; + private String ip; + private int port; + private boolean isLocal; + private GameType type; + private long clientId; + private static final Logger logger = LogManager.getLogger(Match.class); + + public Match(String player1, String player2, boolean player1AI, boolean player2AI, GameType type) { + this.player1 = player1; + this.player2 = player2; + this.player1AI = player1AI; + this.player2AI = player2AI; + this.type = type; + this.isLocal = true; + + startGameLoop(); + } + public Match(String player1, boolean player1AI, String ip, int port, GameType type) { + this.player1 = player1; + this.player1AI = player1AI; + this.ip = ip; + this.port = port; + this.type = type; + this.isLocal = false; + + new EventFlow() + .listen(this::handleStartClientResponse) + .listen(this::handleYourTurn); + + startServerConnection(); + //startGameLoop(); + } + private void handleYourTurn(NetworkEvents.YourTurnResponse response) { + //System.out.println(response.toString()); + //new EventFlow().addPostEvent(NetworkEvents.SendMove.class, clientId,(short)1).asyncPostEvent(); + try{ + sleep(2000); + } + catch (InterruptedException e){} + new EventFlow().addPostEvent(NetworkEvents.SendCommand.class, clientId,"MOVE 2").asyncPostEvent(); + } + + private void loginAndSubscribe(GameType type) { + if(clientId > 0){ + new EventFlow().addPostEvent(NetworkEvents.SendLogin.class,clientId,player1).asyncPostEvent(); + new EventFlow().addPostEvent(NetworkEvents.SendSubscribe.class,clientId,GameType.toName(type)).asyncPostEvent(); + startGameLoop(); + } + else { + logger.warn("Internal client ID is invalid. Failed to log in."); + } + } + + void handleStartClientResponse(NetworkEvents.StartClientResponse response) { + this.clientId = response.clientId(); + loginAndSubscribe(type); + } + + private boolean startServerConnection() { + if(!isLocal){ + if(ip == null || port <= 0){ + logger.warn("IP address or port is invalid"); + return false; + } + else{ + new EventFlow().addPostEvent(NetworkEvents.StartClient.class,ip,port).asyncPostEvent(); + return true; + } + } + return false; + } + private void startGameLoop() { + if(!isLocal){ + //new EventFlow().addPostEvent(NetworkEvents.SendMove.class,clientId,2).asyncPostEvent(); + } + } +} diff --git a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java index 3d2e645..7c6e3c0 100644 --- a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java @@ -2,14 +2,21 @@ package org.toop.app.layer.layers; import javafx.geometry.Pos; import org.toop.app.App; +import org.toop.app.GameType; +import org.toop.app.Match; import org.toop.app.canvas.TicTacToeCanvas; import org.toop.app.layer.Container; import org.toop.app.layer.Layer; import org.toop.app.layer.containers.VerticalContainer; +import java.time.LocalDateTime; + public class GameLayer extends Layer { + Match match; public GameLayer() { super("game.css"); + //temp + match = new Match("name"+LocalDateTime.now().getSecond(),false,"127.0.0.1",7789, GameType.TICTACTOE); reload(); }