Moved scoring calculation into scoring system

This commit is contained in:
lieght
2026-01-11 07:45:55 +01:00
parent 955cb6109c
commit cc7acf9f0c
4 changed files with 25 additions and 26 deletions

View File

@@ -1,5 +1,6 @@
package org.toop.framework.networking.server.tournaments; 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.Server;
import org.toop.framework.networking.server.client.NettyClient; import org.toop.framework.networking.server.client.NettyClient;
import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker; import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker;
@@ -51,13 +52,8 @@ public class AsyncTournamentRunner implements TournamentRunner {
CompletableFuture<Void> f = CompletableFuture<Void> f =
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
try { try {
var game = server.startGame(gameType, a, b); GameResultFuture game = server.startGame(gameType, a, b);
int result = game.result().join(); scoreSystem.matchEndAwait(game);
switch (result) {
case 0 -> scoreSystem.addScore(a);
case 1 -> scoreSystem.addScore(b);
}
} finally { } finally {
a.clearGame(); a.clearGame();
b.clearGame(); b.clearGame();
@@ -71,7 +67,7 @@ public class AsyncTournamentRunner implements TournamentRunner {
f.whenComplete((_, _) -> runningMatches.remove(f)); f.whenComplete((_, _) -> runningMatches.remove(f));
} }
Thread.sleep(10); Thread.sleep(10); // Safety
} }
server.endTournament(scoreSystem.getScore(), gameType); server.endTournament(scoreSystem.getScore(), gameType);

View File

@@ -1,5 +1,6 @@
package org.toop.framework.networking.server.tournaments; 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.Server;
import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker; import org.toop.framework.networking.server.tournaments.matchmakers.MatchMaker;
import org.toop.framework.networking.server.tournaments.scoresystems.ScoreSystem; 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.*; import java.util.concurrent.*;
public class BasicTournamentRunner implements TournamentRunner { public class BasicTournamentRunner implements TournamentRunner {
public BasicTournamentRunner() {}
@Override @Override
public void run(Server server, MatchMaker matchMaker, ScoreSystem scoreSystem, String gameType) { public void run(Server server, MatchMaker matchMaker, ScoreSystem scoreSystem, String gameType) {
ExecutorService threadPool = Executors.newSingleThreadExecutor(); ExecutorService threadPool = Executors.newSingleThreadExecutor();
try { try {
threadPool.execute(() -> { threadPool.execute(() -> {
for (var match : matchMaker) { for (TournamentMatch match : matchMaker) {
// Play game and await the results // Play game and await the results
var game = server.startGame(gameType, match.getClient0(), match.getClient1()); GameResultFuture game = server.startGame(gameType, match.getClient0(), match.getClient1());
int result = game.result().join(); scoreSystem.matchEndAwait(game);
// 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 -> {}
}
match.getClient0().clearGame(); match.getClient0().clearGame();
match.getClient1().clearGame(); match.getClient1().clearGame();

View File

@@ -1,5 +1,6 @@
package org.toop.framework.networking.server.tournaments.scoresystems; 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.client.NettyClient;
import java.util.List; import java.util.List;
@@ -17,7 +18,19 @@ public class BasicScoreSystem implements ScoreSystem {
} }
@Override @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); int clientScore = scores.get(client);
scores.put(client, clientScore + getWinPointAmount()); scores.put(client, clientScore + getWinPointAmount());
} }

View File

@@ -1,17 +1,18 @@
package org.toop.framework.networking.server.tournaments.scoresystems; 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.client.NettyClient;
import org.toop.framework.networking.server.tournaments.TournamentMatch;
import java.util.Map; import java.util.Map;
public interface ScoreSystem { public interface ScoreSystem {
void addScore(NettyClient client); void matchEndAwait(GameResultFuture result);
Map<NettyClient, Integer> getScore(); Map<NettyClient, Integer> getScore();
default int getWinPointAmount() { default int getWinPointAmount() {
return 1; return 1;
} }
default int getInitScore() { default int getInitScore() {
return 0; return 0;
} }