From cc7acf9f0cd2b6d7b7643aa41ed53b3398cf9c02 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Sun, 11 Jan 2026 07:45:55 +0100 Subject: [PATCH] Moved scoring calculation into scoring system --- .../tournaments/AsyncTournamentRunner.java | 12 ++++-------- .../tournaments/BasicTournamentRunner.java | 19 ++++--------------- .../scoresystems/BasicScoreSystem.java | 15 ++++++++++++++- .../tournaments/scoresystems/ScoreSystem.java | 5 +++-- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/AsyncTournamentRunner.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/AsyncTournamentRunner.java index e2af24a..61f9faa 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/AsyncTournamentRunner.java +++ b/framework/src/main/java/org/toop/framework/networking/server/tournaments/AsyncTournamentRunner.java @@ -1,5 +1,6 @@ package org.toop.framework.networking.server.tournaments; +import org.toop.framework.networking.server.GameResultFuture; import org.toop.framework.networking.server.Server; import org.toop.framework.networking.server.client.NettyClient; import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker; @@ -51,13 +52,8 @@ public class AsyncTournamentRunner implements TournamentRunner { CompletableFuture f = CompletableFuture.runAsync(() -> { try { - var game = server.startGame(gameType, a, b); - int result = game.result().join(); - - switch (result) { - case 0 -> scoreSystem.addScore(a); - case 1 -> scoreSystem.addScore(b); - } + GameResultFuture game = server.startGame(gameType, a, b); + scoreSystem.matchEndAwait(game); } finally { a.clearGame(); b.clearGame(); @@ -71,7 +67,7 @@ public class AsyncTournamentRunner implements TournamentRunner { f.whenComplete((_, _) -> runningMatches.remove(f)); } - Thread.sleep(10); + Thread.sleep(10); // Safety } server.endTournament(scoreSystem.getScore(), gameType); diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournamentRunner.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournamentRunner.java index 3ee631e..4e4dc20 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournamentRunner.java +++ b/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournamentRunner.java @@ -1,5 +1,6 @@ package org.toop.framework.networking.server.tournaments; +import org.toop.framework.networking.server.GameResultFuture; import org.toop.framework.networking.server.Server; import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker; import org.toop.framework.networking.server.tournaments.scoresystems.ScoreSystem; @@ -7,27 +8,15 @@ import org.toop.framework.networking.server.tournaments.scoresystems.ScoreSystem import java.util.concurrent.*; public class BasicTournamentRunner implements TournamentRunner { - - public BasicTournamentRunner() {} - @Override public void run(Server server, MatchMaker matchMaker, ScoreSystem scoreSystem, String gameType) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); try { threadPool.execute(() -> { - for (var match : matchMaker) { + for (TournamentMatch match : matchMaker) { // Play game and await the results - var game = server.startGame(gameType, match.getClient0(), match.getClient1()); - int result = game.result().join(); - // End - - // Get result and calculate new score - switch (result) { - case 0 -> scoreSystem.addScore(match.getClient0()); - case 1 -> scoreSystem.addScore(match.getClient1()); - case -1 -> {} // Draw - default -> {} - } + GameResultFuture game = server.startGame(gameType, match.getClient0(), match.getClient1()); + scoreSystem.matchEndAwait(game); match.getClient0().clearGame(); match.getClient1().clearGame(); diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/BasicScoreSystem.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/BasicScoreSystem.java index d90867e..32b5b43 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/BasicScoreSystem.java +++ b/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/BasicScoreSystem.java @@ -1,5 +1,6 @@ package org.toop.framework.networking.server.tournaments.scoresystems; +import org.toop.framework.networking.server.GameResultFuture; import org.toop.framework.networking.server.client.NettyClient; import java.util.List; @@ -17,7 +18,19 @@ public class BasicScoreSystem implements ScoreSystem { } @Override - public void addScore(NettyClient client) { + public void matchEndAwait(GameResultFuture result) { + + if (result.game().users().length < 2) return; + + switch (result.result().join()) { + case 0 -> givePoints(result.game().users()[0]); + case 1 -> givePoints(result.game().users()[1]); + case -1 -> {} // Draw + default -> {} + } + } + + private void givePoints(NettyClient client) { int clientScore = scores.get(client); scores.put(client, clientScore + getWinPointAmount()); } diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/ScoreSystem.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/ScoreSystem.java index a33ba2b..36cd8c4 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/ScoreSystem.java +++ b/framework/src/main/java/org/toop/framework/networking/server/tournaments/scoresystems/ScoreSystem.java @@ -1,17 +1,18 @@ package org.toop.framework.networking.server.tournaments.scoresystems; +import org.toop.framework.networking.server.GameResultFuture; import org.toop.framework.networking.server.client.NettyClient; +import org.toop.framework.networking.server.tournaments.TournamentMatch; import java.util.Map; public interface ScoreSystem { - void addScore(NettyClient client); + void matchEndAwait(GameResultFuture result); Map getScore(); default int getWinPointAmount() { return 1; } - default int getInitScore() { return 0; }