added more logic for the server state diagram

This commit is contained in:
Daniel Grigencha
2024-11-22 09:37:49 +01:00
committed by Felix
parent f3894a5058
commit 6dfb2980fa
20 changed files with 404 additions and 214 deletions

View File

@@ -1,52 +1,74 @@
package pp.mdga.server;
import pp.mdga.message.client.*;
import pp.mdga.message.server.ServerMessage;
import pp.mdga.message.server.ServerStartGame;
import pp.mdga.message.server.UpdateReady;
import pp.mdga.message.server.UpdateTSK;
/**
* Represents the lobby state of the server.
*/
public class Lobby extends ServerState {
/**
* Constructs a new Lobby state.
*
* @param parent the parent state
* @param logic the server game logic
*/
public Lobby(ServerState parent, ServerGameLogic logic) {
super(parent, logic);
logic.getGame().addObserver(this);
}
/**
* Handles the DeselectTSK message.
*
* @param msg the DeselectTSK message
*/
@Override
public void receivedDeselectTSK(DeselectTSK msg) {
public void receivedDeselectTSK(DeselectTSK msg, int from) {
broadcastUpdate(new UpdateTSK());
}
/**
* Handles the LobbyNotReady message.
*
* @param msg the LobbyNotReady message
*/
@Override
public void receivedNotReady(LobbyNotReady msg) {
public void receivedNotReady(LobbyNotReady msg, int from) {
broadcastUpdate(new UpdateReady());
}
/**
* Handles the LobbyReady message.
*
* @param msg the LobbyReady message
*/
@Override
public void receivedReady(LobbyReady msg) {
public void receivedReady(LobbyReady msg, int from) {
broadcastUpdate(new UpdateReady());
}
/**
* Handles the SelectTSK message.
*
* @param msg the SelectTSK message
*/
@Override
public void receivedSelectTSK(SelectTSK msg) {
public void receivedSelectTSK(SelectTSK msg, int from) {
broadcastUpdate(new UpdateTSK());
}
private void broadcastUpdate(ServerMessage updateMessage) {
for (var entry : logic.getGame().getPlayers().entrySet()) {
logic.send(entry.getValue(), updateMessage);
}
}
/**
* Handles the ClientStartGame message.
*
* @param msg the ClientStartGame message
*/
@Override
public void receivedStartGame(ClientStartGame msg) {
// todo: implement??
}
@Override
public void update() {
if (logic.getGame().getGameHasStarted()) {
public void receivedStartGame(ClientStartGame msg, int from) {
if (Boolean.TRUE.equals(logic.getGame().allRanked())) {
broadcastUpdate(new ServerStartGame());
parent.gotoState(new GameState(parent, logic));
logic.getGame().removeObserver(this);
}
}
}