Skip to content

Commit cc3fb97

Browse files
committed
fix(sdk): remove redundant Player generics
1 parent 36e00f8 commit cc3fb97

File tree

9 files changed

+36
-33
lines changed

9 files changed

+36
-33
lines changed

plugin/src/server/sc/plugin2021/Game.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import sc.plugin2021.util.GameRuleLogic
1111
import sc.plugin2021.util.WinReason
1212
import sc.protocol.responses.ProtocolMessage
1313
import sc.shared.*
14+
import java.lang.IndexOutOfBoundsException
1415

1516
@XStreamAlias(value = "game")
1617
class Game(UUID: String = GamePlugin.PLUGIN_UUID): RoundBasedGameInstance() {
@@ -30,7 +31,7 @@ class Game(UUID: String = GamePlugin.PLUGIN_UUID): RoundBasedGameInstance() {
3031

3132
override fun onPlayerJoined(): Player {
3233
val player = gameState.getPlayer(availableTeams.removeAt(0))
33-
?: throw NullPointerException("Too many players joined the game!")
34+
?: throw IndexOutOfBoundsException("Too many players joined the game!")
3435

3536
players.add(player)
3637
playerMap[player.color as Team] = player

plugin/src/server/sc/plugin2021/GamePlugin.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package sc.plugin2021
33
import sc.api.plugins.IGameInstance
44
import sc.api.plugins.IGamePlugin
55
import sc.api.plugins.host.IGamePluginHost
6+
import sc.framework.plugins.Player
67
import sc.plugin2021.util.Configuration.classesToRegister
78
import sc.plugins.PluginDescriptor
89
import sc.shared.ScoreDefinition

plugin/src/shared/sc/plugin2020/GameState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class GameState @JvmOverloads constructor(
1818
private val undeployedRedPieces: MutableList<Piece> = parsePiecesString(Constants.STARTING_PIECES, Team.RED),
1919
private val undeployedBluePieces: MutableList<Piece> = parsePiecesString(Constants.STARTING_PIECES, Team.BLUE),
2020
override var lastMove: Move? = null
21-
): TwoPlayerGameState<Player>(Team.RED) {
21+
): TwoPlayerGameState(Team.RED) {
2222

2323
override val round: Int
2424
get() = turn / 2

plugin/src/shared/sc/plugin2021/GameState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class GameState @JvmOverloads constructor(
1919
startTurn: Int = 0,
2020
val startColor: Color = Color.BLUE,
2121
@XStreamAsAttribute val startPiece: PieceShape = GameRuleLogic.getRandomPentomino()
22-
): TwoPlayerGameState<Player>(Team.ONE) {
22+
): TwoPlayerGameState(Team.ONE) {
2323

2424
companion object {
2525
val logger = LoggerFactory.getLogger(GameState::class.java)

server/test/sc/protocol/requests/RequestTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ class RequestTest: RealServerTest() {
402402
p1Listener.playerEventReceived = false
403403
p2Listener.playerEventReceived = false
404404
player1.send(PauseGameRequest(room.id, false))
405-
TestHelper.waitUntilEqual(false, { (room.game as RoundBasedGameInstance<*>).isPaused }, 2000)
405+
TestHelper.waitUntilEqual(false, { (room.game as RoundBasedGameInstance).isPaused() }, 2000)
406406

407407

408408
TestHelper.waitMillis(500)

server/test/sc/server/plugins/TestGame.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java.util.List;
1616
import java.util.Map;
1717

18-
public class TestGame extends RoundBasedGameInstance<TestPlayer> {
18+
public class TestGame extends RoundBasedGameInstance {
1919
private static final Logger logger = LoggerFactory.getLogger(TestGame.class);
2020

2121
private TestGameState state = new TestGameState();
@@ -32,7 +32,7 @@ protected void onRoundBasedAction(Player fromPlayer, ProtocolMessage data) {
3232

3333
final TestMove move = (TestMove) data;
3434
move.perform(this.state);
35-
next(this.state.getCurrentPlayer() == TestTeam.RED ? state.getRed() : state.getBlue());
35+
next(this.state.getCurrentPlayer() == TestTeam.RED ? state.getRed() : state.getBlue(), false);
3636
}
3737
}
3838

@@ -47,7 +47,8 @@ protected WinCondition checkWinCondition() {
4747

4848
@Override
4949
public Player onPlayerJoined() throws TooManyPlayersException {
50-
if (this.players.size() < 2) {
50+
List<Player> players = getPlayers();
51+
if (players.size() < 2) {
5152
if (players.size() == 0) {
5253
state.setRed(new TestPlayer(TestTeam.RED));
5354
players.add(state.getRed());
@@ -63,8 +64,8 @@ public Player onPlayerJoined() throws TooManyPlayersException {
6364

6465
}
6566

66-
public List<TestPlayer> getTestPlayers() {
67-
return this.players;
67+
public List<Player> getTestPlayers() {
68+
return getPlayers();
6869
}
6970

7071
@Override
@@ -83,17 +84,12 @@ public void onPlayerLeft(Player player, ScoreCause cause) {
8384
logger.debug("Player left {}", player);
8485
Map<Player, PlayerScore> result = generateScoreMap();
8586
result.put(player, new PlayerScore(false, "Spieler hat das Spiel verlassen."));
86-
result.get(player).setCause(cause);
87+
result.get(player).setCause((cause != null) ? cause : ScoreCause.LEFT);
8788
notifyOnGameOver(result);
8889
}
8990

9091
@Override
91-
public void onPlayerLeft(Player player) {
92-
onPlayerLeft(player, ScoreCause.LEFT);
93-
}
94-
95-
@Override
96-
public PlayerScore getScoreFor(TestPlayer p) {
92+
public PlayerScore getScoreFor(Player p) {
9793
return new PlayerScore(true, "Spieler hat gewonnen.");
9894
}
9995

@@ -122,16 +118,20 @@ public List<Player> getPlayers() {
122118
/** Sends welcomeMessage to all listeners and notify player on new gameStates or MoveRequests */
123119
@Override
124120
public void start() {
125-
for (final TestPlayer p : this.players) {
121+
for (final Player p : this.getPlayers()) {
126122
p.notifyListeners(new WelcomeMessage(p.getColor()));
127123
}
128124

129125
super.start();
130126
}
131127

132128
@Override
133-
protected ActionTimeout getTimeoutFor(TestPlayer player) {
129+
protected ActionTimeout getTimeoutFor(Player player) {
134130
return new ActionTimeout(false, 100000000L, 20000000L);
135131
}
136132

133+
@Override
134+
public String getPluginUUID() {
135+
return "test";
136+
}
137137
}

server/test/sc/server/plugins/TestGameState.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import sc.api.plugins.IGameState
44
import sc.api.plugins.ITeam
55
import sc.server.helpers.TestTeam
66

7-
class TestGameState: IGameState {
7+
class TestGameState(): IGameState {
88
override var turn = 0
9+
override var round = 1
10+
get() = turn / 2
911
var state = 0
1012
var lastPlayerIndex = 0
1113
var currentPlayer: TestTeam

socha-sdk/src/server-api/sc/api/plugins/TwoPlayerGameState.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,38 @@ import com.thoughtworks.xstream.annotations.XStreamOmitField
55
import org.slf4j.LoggerFactory
66
import sc.framework.plugins.Player
77

8-
abstract class TwoPlayerGameState<P : Player>(
8+
abstract class TwoPlayerGameState(
99
@XStreamAsAttribute val startTeam: ITeam<*>
1010
) : IGameState {
1111

1212
@XStreamOmitField
1313
private val logger = LoggerFactory.getLogger(TwoPlayerGameState::class.java)
1414

15-
abstract val first: P
16-
abstract val second: P
15+
abstract val first: Player
16+
abstract val second: Player
1717
abstract val board: IBoard
1818

1919
/** List of all teams. */
20-
val players: List<P>
20+
val players: List<Player>
2121
get() = listOf(first, second)
2222

2323
/** The Team active in the current turn. */
2424
abstract val currentTeam: ITeam<*>
2525

2626
/** The Player whose team's turn it is. */
27-
open val currentPlayer: P
27+
open val currentPlayer: Player
2828
get() = getPlayer(currentTeam)!!
2929

3030
/** The player opposite to the currently active one. */
31-
val otherPlayer: P
31+
val otherPlayer: Player
3232
get() = getPlayer(otherTeam)!!
3333

3434
/** The Team opposite to the currently active one. */
3535
val otherTeam: ITeam<*>
3636
get() = currentTeam.opponent()
3737

3838
/** Der Spieler, der das Spiel begonnen hat. */
39-
val startPlayer: P
39+
val startPlayer: Player
4040
get() = getPlayer(startTeam)!!
4141

4242
/** Die Namen der beiden Spieler. */
@@ -46,10 +46,10 @@ abstract class TwoPlayerGameState<P : Player>(
4646
/** Letzter getaetigter Zug. */
4747
abstract val lastMove: IMove?
4848

49-
fun getOpponent(player: P) =
49+
fun getOpponent(player: Player) =
5050
getPlayer(player.color.opponent())
5151

52-
fun getPlayer(team: ITeam<*>): P? = when(team.index) {
52+
fun getPlayer(team: ITeam<*>): Player? = when(team.index) {
5353
0 -> first
5454
1 -> second
5555
else -> null

socha-sdk/src/server-api/sc/framework/plugins/RoundBasedGameInstance.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,18 +142,17 @@ abstract class RoundBasedGameInstance : IGameInstance {
142142
else ActionTimeout(false)
143143

144144
val logger = logger
145-
val playerToTimeout = player
146-
145+
147146
// Signal the JVM to do a GC run now and lower the probability that the GC
148147
// runs when the players sends back its move, resulting in disqualification
149148
// because of soft timeout
150149
System.gc()
151150

152151
requestTimeout = timeout
153152
timeout.start {
154-
logger.warn("Player $playerToTimeout reached the timeout of ${timeout.hardTimeout}ms")
155-
playerToTimeout.hardTimeout = true
156-
onPlayerLeft(playerToTimeout, ScoreCause.HARD_TIMEOUT)
153+
logger.warn("Player $player reached the timeout of ${timeout.hardTimeout}ms")
154+
player.hardTimeout = true
155+
onPlayerLeft(player, ScoreCause.HARD_TIMEOUT)
157156
}
158157
player.requestMove()
159158
}

0 commit comments

Comments
 (0)