mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 10:54:51 +00:00
Moved scoring calculation into scoring system
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user