added classes for client and server state machine

- a client state machine consits out of a 'ClientState' (every state of the machine) and a 'ClientStateMachine' (every state, which consists out of states), the machine starts with the ClientAutomaton
- analog for server
- started to implement logic for the server, transition from 'Lobby' to 'GameState'
This commit is contained in:
Daniel Grigencha
2024-11-17 15:27:09 +01:00
parent a9fd13caab
commit aae7ed9a87
82 changed files with 719 additions and 72 deletions

View File

@@ -0,0 +1,52 @@
package pp.mdga.server;
import pp.mdga.message.client.*;
import pp.mdga.message.server.ServerMessage;
import pp.mdga.message.server.UpdateReady;
import pp.mdga.message.server.UpdateTSK;
public class Lobby extends ServerState {
public Lobby(ServerState parent, ServerGameLogic logic) {
super(parent, logic);
logic.getGame().addObserver(this);
}
@Override
public void receivedDeselectTSK(DeselectTSK msg) {
broadcastUpdate(new UpdateTSK());
}
@Override
public void receivedNotReady(LobbyNotReady msg) {
broadcastUpdate(new UpdateReady());
}
@Override
public void receivedReady(LobbyReady msg) {
broadcastUpdate(new UpdateReady());
}
@Override
public void receivedSelectTSK(SelectTSK msg) {
broadcastUpdate(new UpdateTSK());
}
private void broadcastUpdate(ServerMessage updateMessage) {
for (var entry : logic.getGame().getPlayers().entrySet()) {
logic.send(entry.getValue(), updateMessage);
}
}
@Override
public void receivedStartGame(ClientStartGame msg) {
// todo: implement??
}
@Override
public void update() {
if (logic.getGame().getGameHasStarted()) {
parent.gotoState(new GameState(parent, logic));
logic.getGame().removeObserver(this);
}
}
}