Skip to content

Commit 8bcdce0

Browse files
committed
refactor(player): move generic code to sdk
1 parent fc7cb26 commit 8bcdce0

File tree

5 files changed

+39
-41
lines changed

5 files changed

+39
-41
lines changed

player/src/main/sc/player2021/Starter.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66
import sc.player2021.logic.Logic;
7-
import sc.plugin2021.PlayerClient;
8-
import sc.plugin2021.IGameHandler;
7+
import sc.player.PlayerClient;
8+
import sc.player.IGameHandler;
99
import sc.shared.SharedConfiguration;
1010

1111
import java.io.File;
@@ -20,9 +20,9 @@ public class Starter {
2020
public Starter(String host, int port, String reservation) {
2121
// Strategie zuweisen
2222
IGameHandler logic = new Logic();
23+
PlayerClient client = new PlayerClient(host, port, logic);
2324

2425
// einem Spiel beitreten
25-
PlayerClient client = new PlayerClient(host, port, logic);
2626
if (reservation == null || reservation.isEmpty()) {
2727
client.joinAnyGame();
2828
} else {
@@ -33,22 +33,22 @@ public Starter(String host, int port, String reservation) {
3333
public static void main(String[] args) {
3434
System.setProperty("file.encoding", "UTF-8");
3535

36-
// parameter definieren
36+
// Parameter definieren
3737
CmdLineParser parser = new CmdLineParser();
3838
CmdLineParser.Option hostOption = parser.addStringOption('h', "host");
3939
CmdLineParser.Option portOption = parser.addIntegerOption('p', "port");
4040
CmdLineParser.Option reservationOption = parser.addStringOption('r', "reservation");
4141

4242
try {
43-
// parameter auslesen
43+
// Parameter auslesen
4444
parser.parse(args);
4545
} catch (CmdLineParser.OptionException e) {
46-
// bei Fehler die Hilfe anzeigen
46+
// bei einem Fehler die Hilfe anzeigen
4747
showHelp(e.getMessage());
4848
System.exit(2);
4949
}
5050

51-
// parameter laden
51+
// Parameter laden
5252
String host = (String) parser.getOptionValue(hostOption, "localhost");
5353
int port = (Integer) parser.getOptionValue(portOption, SharedConfiguration.DEFAULT_PORT);
5454
String reservation = (String) parser.getOptionValue(reservationOption, "");

player/src/main/sc/player2021/logic/Logic.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
5+
import sc.api.plugins.TwoPlayerGameState;
56
import sc.framework.plugins.Player;
7+
import sc.player.IGameHandler;
68
import sc.plugin2021.*;
79
import sc.plugin2021.util.GameRuleLogic;
810
import sc.shared.GameResult;
@@ -25,8 +27,8 @@ public class Logic implements IGameHandler {
2527
/** Aktueller eigener Spieler. */
2628
private Player currentPlayer;
2729

28-
public void gameEnded(GameResult data, Team color, String errorMessage) {
29-
log.info("Das Spiel ist beendet.");
30+
public void gameEnded(GameResult data, String errorMessage) {
31+
log.info("Das Spiel ist beendet, Ergebnis: {}", data);
3032
}
3133

3234
@Override
@@ -43,8 +45,8 @@ public void onUpdate(Player player, Player otherPlayer) {
4345
}
4446

4547
@Override
46-
public void onUpdate(GameState gameState) {
47-
this.gameState = gameState;
48+
public void onUpdate(TwoPlayerGameState<?> gameState) {
49+
this.gameState = (GameState) gameState;
4850
log.info("Zug: {} Dran: {}", gameState.getTurn(), gameState.getCurrentPlayer().getColor());
4951
}
5052

sdk/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
sourceSets {
2-
main.get().java.setSrcDirs(listOf("src/framework", "src/server-api"))
2+
main.get().java.setSrcDirs(listOf("src/framework", "src/server-api", "src/player"))
33
test.get().java.setSrcDirs(listOf("src/test"))
44
create("testConfig") {
55
java.setSrcDirs(listOf("src/testConfig"))

plugin/src/client/sc/plugin2021/IGameHandler.kt renamed to sdk/src/player/sc/player/IGameHandler.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package sc.plugin2021
1+
package sc.player
22

3+
import sc.api.plugins.IMove
4+
import sc.api.plugins.TwoPlayerGameState
35
import sc.framework.plugins.Player
46
import sc.shared.GameResult
5-
import sc.api.plugins.ITeam
67

78
/**
89
* Das Interface der Logik.
@@ -20,20 +21,19 @@ interface IGameHandler {
2021
fun onUpdate(player: Player, otherPlayer: Player)
2122

2223
/** Wird aufgerufen, wenn sich das Spielbrett ändert. */
23-
fun onUpdate(gamestate: GameState)
24+
fun onUpdate(gamestate: TwoPlayerGameState<*>)
2425

2526
/**
2627
* Wird aufgerufen, um die Zuganfrage des Servers zu beantworten
2728
*/
28-
fun calculateMove(): Move
29+
fun calculateMove(): IMove
2930

3031
/**
3132
* Wird aufgerufen, wenn das Spiel beendet ist.
3233
*
3334
* @param data Das Spielergebnis
34-
* @param team Team des Spielers
3535
* @param errorMessage Optionale Fehlernachricht
3636
*/
37-
fun gameEnded(data: GameResult, team: Team?, errorMessage: String?)
37+
fun gameEnded(data: GameResult, errorMessage: String?)
3838

3939
}

plugin/src/client/sc/plugin2021/PlayerClient.kt renamed to sdk/src/player/sc/player/PlayerClient.kt

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package sc.plugin2021
1+
package sc.player
22

33
import org.slf4j.LoggerFactory
4-
import sc.api.plugins.IGameState
4+
import sc.api.plugins.*
55
import sc.framework.plugins.protocol.MoveRequest
66
import sc.networking.clients.AbstractLobbyClientListener
77
import sc.networking.clients.IControllableGame
@@ -13,6 +13,7 @@ import sc.protocol.responses.ProtocolMessage
1313
import sc.shared.GameResult
1414
import sc.shared.WelcomeMessage
1515
import java.net.ConnectException
16+
import java.util.ServiceLoader
1617
import kotlin.system.exitProcess
1718

1819
/**
@@ -22,7 +23,7 @@ import kotlin.system.exitProcess
2223
class PlayerClient(
2324
host: String,
2425
port: Int,
25-
private val handler: IGameHandler
26+
private val handler: IGameHandler,
2627
): AbstractLobbyClientListener() {
2728
companion object {
2829
private val logger = LoggerFactory.getLogger(PlayerClient::class.java)
@@ -46,24 +47,20 @@ class PlayerClient(
4647
private lateinit var roomId: String
4748

4849
/** The team the client belongs to. Needed to connect client and player. */
49-
var team: Team? = null
50+
var teamName: String? = null
5051
private set
5152

52-
/** Tell this client to observe the game given by the preparation handler. */
53-
fun observeGame(handle: GamePreparedResponse): IControllableGame =
54-
client.observe(handle.roomId)
55-
5653
/** Called for any new message sent to the game room, e.g., move requests. */
5754
override fun onRoomMessage(roomId: String, data: ProtocolMessage) {
5855
this.roomId = roomId
59-
when(data) {
56+
when (data) {
6057
is MoveRequest -> sendMove(handler.calculateMove())
61-
is WelcomeMessage -> team = Team.valueOf(data.color.toUpperCase())
58+
is WelcomeMessage -> teamName = data.color
6259
}
6360
}
6461

6562
/** Sends the selected move to the server. */
66-
fun sendMove(move: Move) =
63+
fun sendMove(move: IMove) =
6764
client.sendMessageToRoom(roomId, move)
6865

6966
/** Called when an erroneous message is sent to the room. */
@@ -77,18 +74,17 @@ class PlayerClient(
7774
* Happens after a client made a move.
7875
*/
7976
override fun onNewState(roomId: String, state: IGameState) {
80-
val gameState = state as GameState
77+
val gameState = state as TwoPlayerGameState<*>
8178
logger.debug("$this got a new state $gameState")
82-
83-
if (team == null || !gameState.hasValidColors())
84-
return
85-
86-
if (gameState.currentTeam == team) {
87-
handler.onUpdate(gameState.currentPlayer, gameState.otherPlayer)
88-
} else {
89-
handler.onUpdate(gameState.otherPlayer, gameState.currentPlayer)
79+
80+
teamName?.let { teamName ->
81+
if (gameState.currentTeam.name == teamName) {
82+
handler.onUpdate(gameState.currentPlayer, gameState.otherPlayer)
83+
} else {
84+
handler.onUpdate(gameState.otherPlayer, gameState.currentPlayer)
85+
}
86+
handler.onUpdate(gameState)
9087
}
91-
handler.onUpdate(gameState)
9288
}
9389

9490
/** Start the LobbyClient [client] and listen to it. */
@@ -100,7 +96,7 @@ class PlayerClient(
10096
/** [start] and join any game with the appropriate [gameType]. */
10197
fun joinAnyGame() {
10298
start()
103-
client.joinRoomRequest(GamePlugin.PLUGIN_ID)
99+
client.joinRoomRequest(IGamePlugin.loadPluginId())
104100
}
105101

106102
override fun onGameLeft(roomId: String) {
@@ -111,7 +107,7 @@ class PlayerClient(
111107
override fun onGameOver(roomId: String, data: GameResult) {
112108
logger.info("$this: Game over with result $data")
113109
isGameOver = true
114-
handler.gameEnded(data, team, error)
110+
handler.gameEnded(data, error)
115111
}
116112

117113
fun joinPreparedGame(reservation: String) {

0 commit comments

Comments
 (0)