Tournament now uses propper builder pattern

This commit is contained in:
lieght
2026-01-11 09:03:49 +01:00
parent cc7acf9f0c
commit c9ea8f5e5b
5 changed files with 70 additions and 67 deletions

View File

@@ -299,12 +299,12 @@ public class Server implements GameServer<TurnBasedGame, NettyClient, Long> {
matchMaker.shuffle(new RandomShuffle()); // Remove if not wanting to shuffle
}
Tournament tournament = new BasicTournament(new TournamentBuilder(
this,
new AsyncTournamentRunner(),
matchMaker,
new BasicScoreSystem(tournamentUsers)
));
Tournament tournament = new Tournament.Builder()
.server(this)
.tournamentRunner(new AsyncTournamentRunner())
.matchMaker(matchMaker)
.scoreSystem(new BasicScoreSystem(tournamentUsers))
.build();
try {
new Thread(() -> tournament.run(gameType)).start();

View File

@@ -1,29 +0,0 @@
package org.toop.framework.networking.server.tournaments;
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;
public class BasicTournament implements Tournament {
private final Server server;
private final ScoreSystem scoreSystem;
private final TournamentRunner tournamentRunner;
private final MatchMaker matchMaker;
public BasicTournament(TournamentBuilder builder) {
server = builder.server;
scoreSystem = builder.scoreSystem;
tournamentRunner = builder.tournamentRunner;
matchMaker = builder.matchMaker;
}
@Override
public boolean run(String gameType) throws RuntimeException {
if (server.gameTypes().stream().noneMatch(e -> e.equalsIgnoreCase(gameType))) return false;
tournamentRunner.run(server, matchMaker, scoreSystem, gameType);
return true;
}
}

View File

@@ -1,11 +1,64 @@
package org.toop.framework.networking.server.tournaments;
import org.toop.framework.networking.server.client.NettyClient;
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;
import java.util.HashMap;
import java.util.Objects;
public interface Tournament {
// void init(TournamentBuilder builder);
boolean run(String gameType);
// HashMap<NettyClient, Integer> end();
public class Tournament {
private final Server server;
private final ScoreSystem scoreSystem;
private final TournamentRunner tournamentRunner;
private final MatchMaker matchMaker;
private Tournament(Tournament.Builder builder) {
server = builder.server;
scoreSystem = builder.scoreSystem;
tournamentRunner = builder.tournamentRunner;
matchMaker = builder.matchMaker;
}
public void run(String gameType) throws IllegalArgumentException {
if (server.gameTypes().stream().noneMatch(e -> e.equalsIgnoreCase(gameType)))
throw new IllegalArgumentException("Invalid game type");
tournamentRunner.run(server, matchMaker, scoreSystem, gameType);
}
public static class Builder {
private Server server;
private ScoreSystem scoreSystem;
private TournamentRunner tournamentRunner;
private MatchMaker matchMaker;
public Builder server(Server server) {
this.server = server;
return this;
}
public Builder scoreSystem(ScoreSystem scoreSystem) {
this.scoreSystem = scoreSystem;
return this;
}
public Builder tournamentRunner(TournamentRunner tournamentRunner) {
this.tournamentRunner = tournamentRunner;
return this;
}
public Builder matchMaker(MatchMaker matchMaker) {
this.matchMaker = matchMaker;
return this;
}
public Tournament build() {
Objects.requireNonNull(server, "server");
Objects.requireNonNull(scoreSystem, "scoreSystem");
Objects.requireNonNull(tournamentRunner, "tournamentRunner");
Objects.requireNonNull(matchMaker, "matchMaker");
return new Tournament(this);
}
}
}

View File

@@ -1,24 +0,0 @@
package org.toop.framework.networking.server.tournaments;
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;
public class TournamentBuilder {
public Server server;
public ScoreSystem scoreSystem;
public TournamentRunner tournamentRunner;
public MatchMaker matchMaker;
public TournamentBuilder(
Server server,
TournamentRunner tournamentRunner,
MatchMaker matchMaker,
ScoreSystem scoreSystem
) {
this.server = server;
this.tournamentRunner = tournamentRunner;
this.matchMaker = matchMaker;
this.scoreSystem = scoreSystem;
}
}