3 Commits

Author SHA1 Message Date
lieght
5caf6900d1 Removed input mistake, removed print 2026-01-11 10:50:53 +01:00
lieght
94d85bf78d Null handling 2026-01-11 09:07:30 +01:00
lieght
c9ea8f5e5b Tournament now uses propper builder pattern 2026-01-11 09:03:49 +01:00
7 changed files with 75 additions and 73 deletions

View File

@@ -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));
}

View File

@@ -250,7 +250,7 @@ public class Server implements GameServer<TurnBasedGame, NettyClient, Long> {
userNames.remove(first);
userNames.remove(second);
startGame(key, null, getUser(userLeft), getUser(userRight));
startGame(key, getUser(userLeft), getUser(userRight));
}
}
}
@@ -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

@@ -56,7 +56,6 @@ public class NettyClient implements Client<OnlineTurnBasedGame, ServerPlayer> {
@Override
public void send(String message) {
IO.println(message);
ctx.channel().writeAndFlush(message + "\r\n");
}

View File

@@ -1,12 +1,9 @@
package org.toop.framework.networking.server.handlers;
import org.toop.framework.game.players.ServerPlayer;
import org.toop.framework.networking.server.OnlineTurnBasedGame;
import org.toop.framework.networking.server.Server;
import org.toop.framework.networking.server.client.Client;
import org.toop.framework.networking.server.client.NettyClient;
import org.toop.framework.networking.server.parsing.ParsedMessage;
import org.toop.framework.networking.server.tournaments.*;
import org.toop.framework.utils.Utils;
public class MessageHandler implements Handler<ParsedMessage> {
@@ -111,8 +108,11 @@ public class MessageHandler implements Handler<ParsedMessage> {
private void handleMove(ParsedMessage p, NettyClient client) {
if(!hasArgs(p.args())) return;
var player = client.player();
if (player == null) return;
// TODO check if not number
client.player().setMove(1L << Integer.parseInt(p.args()[0]));
player.setMove(1L << Integer.parseInt(p.args()[0]));
}
private void handleTournament(ParsedMessage p, NettyClient client) {

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;
}
}