fixed bug with seriliazation of Board, now sending playerdata seperate from teh board

This commit is contained in:
Hanno Fleischer
2024-12-02 12:16:53 +01:00
parent bb1b721e77
commit 5db7b64cef
12 changed files with 134 additions and 62 deletions

View File

@@ -1,5 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="MdgaApp" type="Application" factoryName="Application" singleton="false" nameIsGenerated="true">
<option name="ALTERNATIVE_JRE_PATH" value="temurin-20" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="MAIN_CLASS_NAME" value="pp.mdga.client.MdgaApp" />
<module name="Projekte.mdga.client.main" />
<option name="VM_PARAMETERS" value="-Djava.util.logging.config.file=logging.properties -ea" />
@@ -14,4 +16,4 @@
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
</component>

View File

@@ -144,6 +144,8 @@ private void initializeSerializables() {
Serializer.registerClass(StartNode.class);
Serializer.registerClass(PlayerData.class);
Serializer.registerClass(HomeNode.class);
Serializer.registerClass(PlayerDataMessage.class);
Serializer.registerClass(StartBriefingMessage.class);
}
private void registerListeners() {

View File

@@ -193,6 +193,16 @@ public void received(ServerStartGameMessage msg) {
@Override
public void received(ShutdownMessage msg) {state.received(msg);}
@Override
public void received(StartBriefingMessage msg) {
state.received(msg);
}
@Override
public void received(PlayerDataMessage msg) {
state.received(msg);
}
@Override
public void received(StartPieceMessage msg) {
state.received(msg);

View File

@@ -183,6 +183,15 @@ public void received(WaitPieceMessage msg) {
LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
}
@Override
public void received(StartBriefingMessage msg) {
LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
}
public void received(PlayerDataMessage msg) {
LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
}
public void selectPiece(Piece piece) {
LOGGER.log(Level.DEBUG, "Selecting piece not allowed.");
}

View File

@@ -144,6 +144,16 @@ public void received(ServerStartGameMessage msg){
currentState.received(msg);
}
@Override
public void received(PlayerDataMessage msg){
currentState.received(msg);
}
@Override
public void received(StartBriefingMessage msg){
currentState.received(msg);
}
public DialogStates getState() {
return currentState;
}

View File

@@ -10,7 +10,9 @@
import pp.mdga.message.client.*;
import pp.mdga.message.server.LobbyPlayerJoinedMessage;
import pp.mdga.message.server.LobbyPlayerLeaveMessage;
import pp.mdga.message.server.PlayerDataMessage;
import pp.mdga.message.server.ServerStartGameMessage;
import pp.mdga.message.server.StartBriefingMessage;
import pp.mdga.message.server.UpdateReadyMessage;
import pp.mdga.message.server.UpdateTSKMessage;
import pp.mdga.notification.*;
@@ -74,15 +76,24 @@ public void selectStart(){
}
@Override
public void received(ServerStartGameMessage msg){
public void received(StartBriefingMessage msg){
logic.getGame().setBoard(msg.getBoard());
logic.addNotification(new GameNotification(logic.getGame().getPlayers().get(parent.getOwnPlayerId()).getColor()));
for(Map.Entry<Color, PlayerData> entry : msg.getBoard().getPlayerData().entrySet()){
List<UUID> pieceIds = new ArrayList<>();
}
public void received(PlayerDataMessage msg){
logic.getGame().getBoard().addPlayerData(msg.getColor(), msg.getPlayerData());
}
@Override
public void received(ServerStartGameMessage msg){
logic.addNotification(new GameNotification(logic.getGame().getPlayerById(parent.getOwnPlayerId()).getColor()));
for (Map.Entry<Color, PlayerData> entry : logic.getGame().getBoard().getPlayerData().entrySet()) {
List<UUID> pieceList = new ArrayList<>();
for(Piece piece : entry.getValue().getPieces()){
pieceIds.add(piece.getUuid());
System.out.println(piece.getUuid());
pieceList.add(piece.getUuid());
}
logic.addNotification(new PlayerInGameNotification(entry.getKey(), pieceIds, logic.getGame().getPlayerByColor(entry.getKey()).getName()));
logic.addNotification(new PlayerInGameNotification(entry.getKey(), pieceList , logic.getGame().getPlayerByColor(entry.getKey()).getName()));
}
parent.startGame();
}

View File

@@ -14,34 +14,6 @@ public NetworkDialogState(ClientState parent, ClientGameLogic logic) {
this.parent = (DialogsState) parent;
}
private boolean checkIP(String IP){
String[] parts = IP.split("\\.");
// Step 2: Check if there are exactly 4 parts
if (parts.length != 4) {
return false;
}
// Step 3: Check each part for valid number
for (String part : parts) {
try {
// Step 4: Convert each part into a number
int num = Integer.parseInt(part);
// Step 5: Check whether the number lies in between 0 and 255
if (num < 0 || num > 255) {
return false;
}
} catch (NumberFormatException e) {
// If parsing fails, it's not a valid number
return false;
}
}
// If all checks passed, return true
return true;
}
@Override
public void enter() {
}

View File

@@ -0,0 +1,40 @@
package pp.mdga.message.server;
import com.jme3.network.serializing.Serializable;
import pp.mdga.game.Color;
import pp.mdga.game.PlayerData;
@Serializable
public class PlayerDataMessage extends ServerMessage{
private final PlayerData playerData;
private final Color color;
public PlayerDataMessage(PlayerData playerData, Color color){
super();
this.playerData = playerData;
this.color = color;
}
private PlayerDataMessage(){
this(null, null);
}
@Override
public void accept(ServerInterpreter interpreter) {
interpreter.received(this);
}
@Override
public String getInfoTextKey() {
return "";
}
public PlayerData getPlayerData(){
return playerData;
}
public Color getColor(){
return color;
}
}

View File

@@ -214,4 +214,8 @@ public interface ServerInterpreter {
* @param shutdownMessage the SelectTSK message received.
*/
void received(ShutdownMessage shutdownMessage);
void received(StartBriefingMessage msg);
void received(PlayerDataMessage msg);
}

View File

@@ -8,28 +8,13 @@
*/
@Serializable
public class ServerStartGameMessage extends ServerMessage {
/**
* Create ServerStartGameMessage attributes.
*/
private final Board board;
/**
* Constructs a new ServerStartGame instance.
*/
public ServerStartGameMessage() {
super();
this.board = null;
}
/**
* Constructor.
*
* @param board as the complete board of this game as a Board object.
*/
public ServerStartGameMessage(Board board) {
this.board = board;
}
/**
* Accepts a visitor to process this message.
*
@@ -40,15 +25,6 @@ public void accept(ServerInterpreter interpreter) {
interpreter.received(this);
}
/**
* This method will be used to return board attribute of ServerStartGameMessage class.
*
* @return board as a Board object.
*/
public Board getBoard() {
return this.board;
}
/**
* Returns a string representation of this message.
*

View File

@@ -0,0 +1,33 @@
package pp.mdga.message.server;
import com.jme3.network.serializing.Serializable;
import pp.mdga.game.Board;
@Serializable
public class StartBriefingMessage extends ServerMessage {
private final Board board;
public StartBriefingMessage(Board board) {
super();
this.board = board;
}
private StartBriefingMessage() {
this(null);
}
public Board getBoard() {
return this.board;
}
@Override
public void accept(ServerInterpreter interpreter) {
interpreter.received(this);
}
@Override
public String getInfoTextKey() {
return "";
}
}

View File

@@ -7,7 +7,6 @@
import pp.mdga.message.server.*;
import pp.mdga.server.ServerGameLogic;
import java.lang.foreign.StructLayout;
import java.util.Map;
/**
@@ -126,8 +125,12 @@ public void received(LobbyReadyMessage msg, int from) {
this.logic.getGame().setAllReady(true);
if (this.logic.getGame().allReady()) {
this.logic.getServerSender().broadcast(new StartBriefingMessage(this.logic.getGame().getBoard()));
this.initializeGame();
this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getBoard()));
for (Map.Entry<Color, PlayerData> entry : logic.getGame().getBoard().getPlayerData().entrySet()) {
this.logic.getServerSender().broadcast(new PlayerDataMessage(entry.getValue(), entry.getKey()));
}
this.logic.getServerSender().broadcast(new ServerStartGameMessage());
}
}
@@ -173,7 +176,7 @@ public void received(LeaveGameMessage msg, int from) {
public void received(StartGameMessage msg, int from) {
if (msg.isForceStartGame() || this.logic.getGame().allReady()) {
this.initializeGame();
this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getBoard()));
this.logic.getServerSender().broadcast(new ServerStartGameMessage());
this.logic.setCurrentState(this.logic.getGameState());
}
}