mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2025-07-31 09:07:40 +02:00
refactor Worlds and client States
This commit is contained in:
@@ -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)
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user