refactor Worlds and client States

This commit is contained in:
Johannes Schmelz
2024-12-08 01:18:35 +00:00
parent 2e256f4ff5
commit e102d22f14
172 changed files with 11159 additions and 3133 deletions

View File

@@ -29,23 +29,49 @@ import pp.monopoly.game.server.Player;
import pp.monopoly.game.server.PlayerHandler;
import pp.monopoly.game.server.ServerGameLogic;
import pp.monopoly.game.server.ServerSender;
import pp.monopoly.message.client.BuyPropertyRequest;
import pp.monopoly.message.client.AlterProperty;
import pp.monopoly.message.client.BuyPropertyResponse;
import pp.monopoly.message.client.ClientMessage;
import pp.monopoly.message.client.EndTurn;
import pp.monopoly.message.client.NotificationAnswer;
import pp.monopoly.message.client.PlayerReady;
import pp.monopoly.message.client.RollDice;
import pp.monopoly.message.client.TradeOffer;
import pp.monopoly.message.client.TradeResponse;
import pp.monopoly.message.client.ViewAssetsRequest;
import pp.monopoly.message.server.BuildInfo;
import pp.monopoly.message.server.BuyPropertyRequest;
import pp.monopoly.message.server.DiceResult;
import pp.monopoly.message.server.EventDrawCard;
import pp.monopoly.message.server.GameOver;
import pp.monopoly.message.server.GameStart;
import pp.monopoly.message.server.JailEvent;
import pp.monopoly.message.server.NextPlayerTurn;
import pp.monopoly.message.server.NotificationMessage;
import pp.monopoly.message.server.PlayerStatusUpdate;
import pp.monopoly.message.server.ServerMessage;
import pp.monopoly.message.server.TradeReply;
import pp.monopoly.message.server.TradeRequest;
import pp.monopoly.message.server.ViewAssetsResponse;
import pp.monopoly.model.Figure;
import pp.monopoly.model.IntPoint;
import pp.monopoly.model.LimitedLinkedList;
import pp.monopoly.model.TradeHandler;
import pp.monopoly.model.fields.BoardManager;
import pp.monopoly.model.fields.BuildingProperty;
import pp.monopoly.model.fields.EventField;
import pp.monopoly.model.fields.Field;
import pp.monopoly.model.fields.FineField;
import pp.monopoly.model.fields.FoodField;
import pp.monopoly.model.fields.GateField;
import pp.monopoly.model.fields.GoField;
import pp.monopoly.model.fields.GulagField;
import pp.monopoly.model.fields.PropertyField;
import pp.monopoly.model.fields.TestStreckeField;
import pp.monopoly.model.fields.WacheField;
/**
* Server implementing the visitor pattern as MessageReceiver for ClientMessages
* MonopolyServer implementing the visitor pattern as MessageReceiver for ClientMessages
*/
public class MonopolyServer implements MessageListener<HostedConnection>, ConnectionListener, ServerSender {
private static final Logger LOGGER = System.getLogger(MonopolyServer.class.getName());
@@ -84,12 +110,18 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
logic = new ServerGameLogic(this, config);
}
/**
* Run is executed on StartUp
*/
public void run() {
startServer();
while (true)
processNextMessage();
}
/**
* Starts the Server
*/
private void startServer() {
try {
LOGGER.log(Level.INFO, "Starting server..."); //NON-NLS
@@ -105,6 +137,9 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
}
}
/**
* Processesthe next incoming message
*/
private void processNextMessage() {
try {
pendingMessages.take().process(logic);
@@ -115,8 +150,12 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
}
}
/**
* Initialize alls Messages and Classes that need to be sent
*/
private void initializeSerializables() {
Serializer.registerClass(IntPoint.class);
Serializer.registerClass(BuyPropertyResponse.class);
Serializer.registerClass(BuyPropertyRequest.class);
Serializer.registerClass(EndTurn.class);
Serializer.registerClass(PlayerReady.class);
@@ -124,28 +163,57 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
Serializer.registerClass(TradeOffer.class);
Serializer.registerClass(TradeResponse.class);
Serializer.registerClass(ViewAssetsRequest.class);
Serializer.registerClass(ViewAssetsResponse.class);
Serializer.registerClass(GameStart.class);
Serializer.registerClass(LimitedLinkedList.class);
Serializer.registerClass(NextPlayerTurn.class);
Serializer.registerClass(Player.class);
Serializer.registerClass(Figure.class);
Serializer.registerClass(PlayerHandler.class);
Serializer.registerClass(DiceResult.class);
Serializer.registerClass(EventDrawCard.class);
Serializer.registerClass(PlayerStatusUpdate.class);
Serializer.registerClass(BoardManager.class);
Serializer.registerClass(Field.class);
Serializer.registerClass(PropertyField.class);
Serializer.registerClass(BuildingProperty.class);
Serializer.registerClass(FoodField.class);
Serializer.registerClass(GateField.class);
Serializer.registerClass(WacheField.class);
Serializer.registerClass(GoField.class);
Serializer.registerClass(TestStreckeField.class);
Serializer.registerClass(EventField.class);
Serializer.registerClass(GulagField.class);
Serializer.registerClass(FineField.class);
Serializer.registerClass(TradeRequest.class);
Serializer.registerClass(TradeReply.class);
Serializer.registerClass(TradeHandler.class);
Serializer.registerClass(NotificationMessage.class);
Serializer.registerClass(NotificationAnswer.class);
Serializer.registerClass(JailEvent.class);
Serializer.registerClass(AlterProperty.class);
Serializer.registerClass(GameOver.class);
Serializer.registerClass(BuildInfo.class);
}
/**
* Register all message listeners
*/
private void registerListeners() {
myServer.addMessageListener(this, BuyPropertyRequest.class);
myServer.addMessageListener(this, BuyPropertyResponse.class);
myServer.addMessageListener(this, EndTurn.class);
myServer.addMessageListener(this, PlayerReady.class);
myServer.addMessageListener(this, RollDice.class);
myServer.addMessageListener(this, TradeOffer.class);
myServer.addMessageListener(this, TradeResponse.class);
myServer.addMessageListener(this, ViewAssetsRequest.class);
myServer.addMessageListener(this, AlterProperty.class);
myServer.addMessageListener(this, NotificationAnswer.class);
myServer.addConnectionListener(this);
}
@Override
public void messageReceived(HostedConnection source, Message message) {
System.out.println("Message recieved");
LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS
if (message instanceof ClientMessage clientMessage)
pendingMessages.add(new ReceivedMessage(clientMessage, source.getId()));
@@ -155,7 +223,6 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
public void connectionAdded(Server server, HostedConnection hostedConnection) {
LOGGER.log(Level.INFO, "New connection established: {0}", hostedConnection); //NON-NLS
logic.addPlayer(hostedConnection.getId());
System.out.println("Spieler verbunden: ID = " + hostedConnection.getId());
}
@Override
@@ -170,6 +237,10 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
}
}
/**
* Exits the server
* @param exitValue the exit code to throw
*/
private void exit(int exitValue) { //NON-NLS
LOGGER.log(Level.INFO, "close request"); //NON-NLS
if (myServer != null)

View File

@@ -10,6 +10,9 @@ package pp.monopoly.server;
import pp.monopoly.message.client.ClientInterpreter;
import pp.monopoly.message.client.ClientMessage;
/**
* Record to process incoming Client Messages
*/
record ReceivedMessage(ClientMessage message, int from) {
void process(ClientInterpreter interpreter) {
message.accept(interpreter, from);