Added pairs

This commit is contained in:
lieght
2025-12-13 17:33:14 +01:00
parent edd2c24b65
commit 22270e58dc
6 changed files with 233 additions and 180 deletions

View File

@@ -1,15 +1,14 @@
package org.toop.framework.networking.server; package org.toop.framework.networking.server;
import org.toop.framework.game.players.ServerPlayer; import org.toop.framework.game.players.ServerPlayer;
import org.toop.framework.utils.Pair;
import java.util.Map;
public interface ServerUser { public interface ServerUser {
long id(); long id();
String name(); String name();
Game game(); Game game();
ServerPlayer serverPlayer(); ServerPlayer serverPlayer();
void addGame(Game game, ServerPlayer player); void addGame(Pair<Game, ServerPlayer> gamePair);
void removeGame(); void removeGame();
void setName(String name); void setName(String name);
void sendMessage(String message); void sendMessage(String message);

View File

@@ -2,14 +2,12 @@ package org.toop.framework.networking.server;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import org.toop.framework.game.players.ServerPlayer; import org.toop.framework.game.players.ServerPlayer;
import org.toop.framework.utils.Pair;
import java.util.HashMap;
import java.util.Map;
public class User implements ServerUser { public class User implements ServerUser {
final private long id; final private long id;
private String name; private String name;
private final Map<Game, ServerPlayer> game = new HashMap<>(); private Pair<Game, ServerPlayer> gamePair;
private ChannelHandlerContext connectionContext; private ChannelHandlerContext connectionContext;
public User(long userId, String name) { public User(long userId, String name) {
@@ -28,24 +26,24 @@ public class User implements ServerUser {
} }
@Override @Override
public void addGame(Game game, ServerPlayer player) { public void addGame(Pair<Game, ServerPlayer> gamePair) {
if (this.game.isEmpty()) { if (this.gamePair == null) {
this.game.put(game, player); this.gamePair = gamePair;
} }
} }
@Override @Override
public void removeGame() { public void removeGame() {
this.game.clear(); this.gamePair = null;
} }
@Override @Override
public Game game() { public Game game() {
return this.game.keySet().iterator().next(); return this.gamePair.getLeft();
} }
public ServerPlayer serverPlayer() { public ServerPlayer serverPlayer() {
return this.game.values().iterator().next(); return this.gamePair.getRight();
} }
@Override @Override

View File

@@ -0,0 +1,21 @@
package org.toop.framework.utils;
public class ImmutablePair <T, K> implements Pair<T,K> {
final T left;
final K right;
public ImmutablePair(T left, K right) {
this.left = left;
this.right = right;
}
@Override
public T getLeft() {
return left;
}
@Override
public K getRight() {
return right;
}
}

View File

@@ -0,0 +1,29 @@
package org.toop.framework.utils;
public class MutablePair<T, K> implements Pair<T,K> {
T left;
K right;
public MutablePair(T left, K right) {
this.left = left;
this.right = right;
}
@Override
public T getLeft() {
return left;
}
public void setLeft(T left) {
this.left = left;
}
@Override
public K getRight() {
return right;
}
public void setRight(K right) {
this.right = right;
}
}

View File

@@ -0,0 +1,6 @@
package org.toop.framework.utils;
public interface Pair<T, K> {
T getLeft();
K getRight();
}

View File

@@ -1,167 +1,167 @@
package org.toop.framework.networking.server; //package org.toop.framework.networking.server;
//
import org.junit.jupiter.api.Assertions; //import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; //import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; //import org.junit.jupiter.api.Test;
import org.toop.framework.gameFramework.model.game.PlayResult; //import org.toop.framework.gameFramework.model.game.PlayResult;
import org.toop.framework.gameFramework.model.game.TurnBasedGame; //import org.toop.framework.gameFramework.model.game.TurnBasedGame;
import org.toop.framework.gameFramework.model.player.Player; //import org.toop.framework.gameFramework.model.player.Player;
//
import java.time.Duration; //import java.time.Duration;
import java.util.Arrays; //import java.util.Arrays;
import java.util.concurrent.ConcurrentHashMap; //import java.util.concurrent.ConcurrentHashMap;
//
public class ServerTest { //public class ServerTest {
//
static class TurnBasedGameMock implements TurnBasedGame { // static class TurnBasedGameMock implements TurnBasedGame {
private Player[] players; // private Player[] players;
//
public TurnBasedGameMock() {} // public TurnBasedGameMock() {}
//
@Override // @Override
public void init(Player[] players) { // public void init(Player[] players) {
this.players = players; // this.players = players;
} // }
//
@Override // @Override
public int getCurrentTurn() { // public int getCurrentTurn() {
return 0; // return 0;
} // }
//
@Override // @Override
public int getPlayerCount() { // public int getPlayerCount() {
return 0; // return 0;
} // }
//
@Override // @Override
public int getWinner() { // public int getWinner() {
return 0; // return 0;
} // }
//
@Override // @Override
public long[] getBoard() { // public long[] getBoard() {
return new long[0]; // return new long[0];
} // }
//
@Override // @Override
public TurnBasedGame deepCopy() { // public TurnBasedGame deepCopy() {
return null; // return null;
} // }
//
@Override // @Override
public long getLegalMoves() { // public long getLegalMoves() {
return 0; // return 0;
} // }
//
@Override // @Override
public PlayResult play(long move) { // public PlayResult play(long move) {
return null; // return null;
} // }
//
@Override // @Override
public Player getPlayer(int index) { // public Player getPlayer(int index) {
return null; // return null;
} // }
//
} // }
//
static class TestUser implements ServerUser { // static class TestUser implements ServerUser {
//
final private long id; // final private long id;
//
private String name; // private String name;
//
public TestUser(long id, String name) { // public TestUser(long id, String name) {
this.id = id; // this.id = id;
this.name = name; // this.name = name;
} // }
//
@Override // @Override
public long id() { // public long id() {
return id; // return id;
} // }
//
@Override // @Override
public String name() { // public String name() {
return name; // return name;
} // }
//
@Override // @Override
public Game[] games() { // public Game[] games() {
return new Game[0]; // return new Game[0];
} // }
//
@Override // @Override
public void addGame(Game game) { // public void addGame(Game game) {
//
} // }
//
@Override // @Override
public void removeGame(Game game) { // public void removeGame(Game game) {
//
} // }
//
@Override // @Override
public void setName(String name) { // public void setName(String name) {
this.name = name; // this.name = name;
} // }
//
@Override // @Override
public void sendMessage(String message) { // public void sendMessage(String message) {
//
} // }
} // }
//
private Server server; // private Server server;
private Duration waitTime = Duration.ofSeconds(2); // private Duration waitTime = Duration.ofSeconds(2);
//
@BeforeEach // @BeforeEach
void setup() { // void setup() {
//
var games = new ConcurrentHashMap<String, Class<? extends TurnBasedGame>>(); // var games = new ConcurrentHashMap<String, Class<? extends TurnBasedGame>>();
games.put("tictactoe", TurnBasedGameMock.class); // games.put("tictactoe", TurnBasedGameMock.class);
games.put("reversi", TurnBasedGameMock.class); // games.put("reversi", TurnBasedGameMock.class);
//
server = new Server(games, waitTime); // server = new Server(games, waitTime);
} // }
//
@Test // @Test
void testGameTypes() { // void testGameTypes() {
String[] expected = {"tictactoe", "reversi"}; // String[] expected = {"tictactoe", "reversi"};
String[] actual = server.gameTypes(); // String[] actual = server.gameTypes();
//
Arrays.sort(expected); // Arrays.sort(expected);
Arrays.sort(actual); // Arrays.sort(actual);
//
Assertions.assertArrayEquals(expected, actual); // Assertions.assertArrayEquals(expected, actual);
} // }
//
@Test // @Test
void testChallenge() { // void testChallenge() {
server.addUser(new TestUser(1, "test1")); // server.addUser(new TestUser(1, "test1"));
server.addUser(new TestUser(2, "test2")); // server.addUser(new TestUser(2, "test2"));
server.challengeUser("test1", "test2", "tictactoe"); // server.challengeUser("test1", "test2", "tictactoe");
//
IO.println(server.gameChallenges()); // IO.println(server.gameChallenges());
//
Assertions.assertEquals(1, server.gameChallenges().size()); // Assertions.assertEquals(1, server.gameChallenges().size());
//
try { // try {
Thread.sleep(waitTime.plusMillis(100)); // Thread.sleep(waitTime.plusMillis(100));
} catch (InterruptedException e) { // } catch (InterruptedException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
//
Assertions.assertEquals(0, server.gameChallenges().size()); // Assertions.assertEquals(0, server.gameChallenges().size());
} // }
//
@Test // @Test
void testStartGame() { // void testStartGame() {
server.startGame("tictactoe", new User(0, "A"), new User(1, "B")); // server.startGame("tictactoe", new User(0, "A"), new User(1, "B"));
Assertions.assertEquals(1, server.ongoingGames().size()); // Assertions.assertEquals(1, server.ongoingGames().size());
server.startGame("reversi", new User(0, "A"), new User(1, "B")); // server.startGame("reversi", new User(0, "A"), new User(1, "B"));
Assertions.assertEquals(2, server.ongoingGames().size()); // Assertions.assertEquals(2, server.ongoingGames().size());
} // }
//
//
} //}