diff --git a/app/src/main/java/org/toop/app/widget/view/ServerView.java b/app/src/main/java/org/toop/app/widget/view/ServerView.java index 25cd0da..9408b27 100644 --- a/app/src/main/java/org/toop/app/widget/view/ServerView.java +++ b/app/src/main/java/org/toop/app/widget/view/ServerView.java @@ -45,7 +45,7 @@ public final class ServerView extends ViewWidget { private void setupLayout(String userName) { var playerHeader = Primitive.header(user, false); - if (userName.equals("host")) { + if (userName.equals("host")) { // TODO is fragile var tournamentButton = Primitive.hbox( gameListTour, Primitive.button( @@ -77,7 +77,10 @@ public final class ServerView extends ViewWidget { add(Pos.CENTER, playerListSection); var disconnectButton = Primitive.button( - "disconnect", () -> transitionPrevious(), false); + "disconnect", + this::transitionPrevious, + false + ); add(Pos.BOTTOM_LEFT, Primitive.vbox(disconnectButton)); } diff --git a/framework/src/main/java/org/toop/framework/networking/server/Server.java b/framework/src/main/java/org/toop/framework/networking/server/Server.java index 68e411f..9003ef4 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/Server.java +++ b/framework/src/main/java/org/toop/framework/networking/server/Server.java @@ -299,12 +299,12 @@ public class Server implements GameServer { 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(); diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournament.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournament.java deleted file mode 100644 index 50db018..0000000 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/BasicTournament.java +++ /dev/null @@ -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; - } -} diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/Tournament.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/Tournament.java index 12d588a..94aa3a4 100644 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/Tournament.java +++ b/framework/src/main/java/org/toop/framework/networking/server/tournaments/Tournament.java @@ -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 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); + } + } } diff --git a/framework/src/main/java/org/toop/framework/networking/server/tournaments/TournamentBuilder.java b/framework/src/main/java/org/toop/framework/networking/server/tournaments/TournamentBuilder.java deleted file mode 100644 index cf52d76..0000000 --- a/framework/src/main/java/org/toop/framework/networking/server/tournaments/TournamentBuilder.java +++ /dev/null @@ -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; - } -}