mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-28 23:39:45 +01:00
"redo" task11 (black screen)
This commit is contained in:
parent
86a3d90bf8
commit
c525a8994c
@ -9,6 +9,9 @@ dependencies {
|
|||||||
implementation project(":battleship:model")
|
implementation project(":battleship:model")
|
||||||
|
|
||||||
implementation libs.jme3.desktop
|
implementation libs.jme3.desktop
|
||||||
|
implementation project(path: ':battleship:server')
|
||||||
|
implementation project(path: ':battleship:server')
|
||||||
|
|
||||||
|
|
||||||
runtimeOnly libs.jme3.awt.dialogs
|
runtimeOnly libs.jme3.awt.dialogs
|
||||||
runtimeOnly libs.jme3.plugins
|
runtimeOnly libs.jme3.plugins
|
||||||
|
@ -1,10 +1,3 @@
|
|||||||
////////////////////////////////////////
|
|
||||||
// Programming project code
|
|
||||||
// UniBw M, 2022, 2023, 2024
|
|
||||||
// www.unibw.de/inf2
|
|
||||||
// (c) Mark Minas (mark.minas@unibw.de)
|
|
||||||
////////////////////////////////////////
|
|
||||||
|
|
||||||
package pp.battleship.client;
|
package pp.battleship.client;
|
||||||
|
|
||||||
import java.lang.System.Logger;
|
import java.lang.System.Logger;
|
||||||
@ -19,7 +12,7 @@ import com.simsilica.lemur.TextField;
|
|||||||
import com.simsilica.lemur.component.SpringGridLayout;
|
import com.simsilica.lemur.component.SpringGridLayout;
|
||||||
|
|
||||||
import static pp.battleship.Resources.lookup;
|
import static pp.battleship.Resources.lookup;
|
||||||
import pp.battleship.client.server.BattleshipSelfStart;
|
import pp.battleship.client.server.BattleshipSelfhostServer;
|
||||||
import pp.dialog.Dialog;
|
import pp.dialog.Dialog;
|
||||||
import pp.dialog.DialogBuilder;
|
import pp.dialog.DialogBuilder;
|
||||||
import pp.dialog.SimpleDialog;
|
import pp.dialog.SimpleDialog;
|
||||||
@ -30,16 +23,16 @@ import pp.dialog.SimpleDialog;
|
|||||||
*/
|
*/
|
||||||
class NetworkDialog extends SimpleDialog {
|
class NetworkDialog extends SimpleDialog {
|
||||||
private static final Logger LOGGER = System.getLogger(NetworkDialog.class.getName());
|
private static final Logger LOGGER = System.getLogger(NetworkDialog.class.getName());
|
||||||
private static final String LOCALHOST = "localhorst"; //NON-NLS
|
private static final String LOCALHOST = "localhost"; //NON-NLS
|
||||||
private static final String DEFAULT_PORT = "4321"; //NON-NLS
|
private static final String DEFAULT_PORT = "1234"; //NON-NLS
|
||||||
private final NetworkSupport network;
|
private final NetworkSupport network;
|
||||||
private final TextField host = new TextField(LOCALHOST);
|
private final TextField host = new TextField(LOCALHOST);
|
||||||
private final TextField port = new TextField(DEFAULT_PORT);
|
private final TextField port = new TextField(DEFAULT_PORT);
|
||||||
|
private static final Checkbox HOST = new Checkbox(lookup("server.host"));
|
||||||
private String hostname;
|
private String hostname;
|
||||||
private int portNumber;
|
private int portNumber;
|
||||||
private Future<Object> connectionFuture;
|
private Future<Object> connectionFuture;
|
||||||
private Dialog progressDialog;
|
private Dialog progressDialog;
|
||||||
private static final Checkbox ServerStart = new Checkbox(lookup("server.start"));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new NetworkDialog.
|
* Constructs a new NetworkDialog.
|
||||||
@ -59,7 +52,7 @@ class NetworkDialog extends SimpleDialog {
|
|||||||
input.addChild(host, 1);
|
input.addChild(host, 1);
|
||||||
input.addChild(new Label(lookup("port.number") + ": "));
|
input.addChild(new Label(lookup("port.number") + ": "));
|
||||||
input.addChild(port, 1);
|
input.addChild(port, 1);
|
||||||
input.addChild(ServerStart).addClickCommands(s -> ifTopDialog(this::startClientServer));
|
input.addChild(HOST).addClickCommands(s -> ifTopDialog(this::startClientServer));
|
||||||
|
|
||||||
DialogBuilder.simple(app.getDialogManager())
|
DialogBuilder.simple(app.getDialogManager())
|
||||||
.setTitle(lookup("server.dialog"))
|
.setTitle(lookup("server.dialog"))
|
||||||
@ -154,13 +147,17 @@ class NetworkDialog extends SimpleDialog {
|
|||||||
network.getApp().errorDialog(lookup("server.connection.failed"));
|
network.getApp().errorDialog(lookup("server.connection.failed"));
|
||||||
network.getApp().setInfoText(e.getLocalizedMessage());
|
network.getApp().setInfoText(e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the server of the client in a new thread and catches connectivity issues.
|
||||||
|
*/
|
||||||
private void startClientServer() {
|
private void startClientServer() {
|
||||||
ServerStart.setEnabled(false);
|
HOST.setEnabled(false);
|
||||||
Thread serverThread = new Thread(() -> {
|
Thread serverThread = new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
BattleshipSelfStart.main(null);
|
BattleshipSelfhostServer.main(null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ServerStart.setEnabled(true);
|
HOST.setEnabled(true);
|
||||||
LOGGER.log(Level.ERROR, "Server could not be started", e);
|
LOGGER.log(Level.ERROR, "Server could not be started", e);
|
||||||
network.getApp().errorDialog("Could not start server: " + e.getMessage());
|
network.getApp().errorDialog("Could not start server: " + e.getMessage());
|
||||||
}
|
}
|
||||||
@ -168,3 +165,4 @@ class NetworkDialog extends SimpleDialog {
|
|||||||
serverThread.start();
|
serverThread.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,15 @@
|
|||||||
|
|
||||||
package pp.battleship.client.server;
|
package pp.battleship.client.server;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.System.Logger;
|
||||||
|
import java.lang.System.Logger.Level;
|
||||||
|
import java.util.concurrent.BlockingQueue;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
import java.util.logging.LogManager;
|
||||||
|
|
||||||
import com.jme3.network.ConnectionListener;
|
import com.jme3.network.ConnectionListener;
|
||||||
import com.jme3.network.HostedConnection;
|
import com.jme3.network.HostedConnection;
|
||||||
import com.jme3.network.Message;
|
import com.jme3.network.Message;
|
||||||
@ -14,6 +23,7 @@ import com.jme3.network.MessageListener;
|
|||||||
import com.jme3.network.Network;
|
import com.jme3.network.Network;
|
||||||
import com.jme3.network.Server;
|
import com.jme3.network.Server;
|
||||||
import com.jme3.network.serializing.Serializer;
|
import com.jme3.network.serializing.Serializer;
|
||||||
|
|
||||||
import pp.battleship.BattleshipConfig;
|
import pp.battleship.BattleshipConfig;
|
||||||
import pp.battleship.game.server.Player;
|
import pp.battleship.game.server.Player;
|
||||||
import pp.battleship.game.server.ServerGameLogic;
|
import pp.battleship.game.server.ServerGameLogic;
|
||||||
@ -29,26 +39,17 @@ import pp.battleship.model.Battleship;
|
|||||||
import pp.battleship.model.IntPoint;
|
import pp.battleship.model.IntPoint;
|
||||||
import pp.battleship.model.Shot;
|
import pp.battleship.model.Shot;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.System.Logger;
|
|
||||||
import java.lang.System.Logger.Level;
|
|
||||||
import java.util.concurrent.BlockingQueue;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
|
||||||
import java.util.logging.LogManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Server implementing the visitor pattern as MessageReceiver for ClientMessages
|
* Server implementing the visitor pattern as MessageReceiver for ClientMessages
|
||||||
*/
|
*/
|
||||||
public class BattleshipSelfStart implements MessageListener<HostedConnection>, ConnectionListener, ServerSender {
|
public class BattleshipSelfhostServer implements MessageListener<HostedConnection>, ConnectionListener, ServerSender {
|
||||||
private static final Logger LOGGER = System.getLogger(BattleshipSelfStart.class.getName());
|
private static final Logger LOGGER = System.getLogger(BattleshipSelfhostServer.class.getName());
|
||||||
private static final File CONFIG_FILE = new File("server.properties");
|
private static final File CONFIG_FILE = new File("server.properties");
|
||||||
|
|
||||||
private final BattleshipConfig config = new BattleshipConfig();
|
private final BattleshipConfig config = new BattleshipConfig();
|
||||||
private Server myServer;
|
private Server myServer;
|
||||||
private final ServerGameLogic logic;
|
private final ServerGameLogic logic;
|
||||||
private final BlockingQueue<ReceivedMessage> pendingMessages = new LinkedBlockingQueue<>();
|
private final BlockingQueue<ReceivedMessageSelfhost> pendingMessages = new LinkedBlockingQueue<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// Configure logging
|
// Configure logging
|
||||||
@ -66,13 +67,13 @@ public class BattleshipSelfStart implements MessageListener<HostedConnection>, C
|
|||||||
* Starts the server.
|
* Starts the server.
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new BattleshipSelfStart().run();
|
new BattleshipSelfhostServer().run();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the server.
|
* Creates the server.
|
||||||
*/
|
*/
|
||||||
BattleshipSelfStart() {
|
BattleshipSelfhostServer() {
|
||||||
config.readFromIfExists(CONFIG_FILE);
|
config.readFromIfExists(CONFIG_FILE);
|
||||||
LOGGER.log(Level.INFO, "Configuration: {0}", config); //NON-NLS
|
LOGGER.log(Level.INFO, "Configuration: {0}", config); //NON-NLS
|
||||||
logic = new ServerGameLogic(this, config);
|
logic = new ServerGameLogic(this, config);
|
||||||
@ -130,7 +131,7 @@ public class BattleshipSelfStart implements MessageListener<HostedConnection>, C
|
|||||||
public void messageReceived(HostedConnection source, Message message) {
|
public void messageReceived(HostedConnection source, Message message) {
|
||||||
LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS
|
LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS
|
||||||
if (message instanceof ClientMessage clientMessage)
|
if (message instanceof ClientMessage clientMessage)
|
||||||
pendingMessages.add(new ReceivedMessage(clientMessage, source.getId()));
|
pendingMessages.add(new ReceivedMessageSelfhost(clientMessage, source.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -1,17 +0,0 @@
|
|||||||
////////////////////////////////////////
|
|
||||||
// Programming project code
|
|
||||||
// UniBw M, 2022, 2023, 2024
|
|
||||||
// www.unibw.de/inf2
|
|
||||||
// (c) Mark Minas (mark.minas@unibw.de)
|
|
||||||
////////////////////////////////////////
|
|
||||||
|
|
||||||
package pp.battleship.client.server;
|
|
||||||
|
|
||||||
import pp.battleship.message.client.ClientInterpreter;
|
|
||||||
import pp.battleship.message.client.ClientMessage;
|
|
||||||
|
|
||||||
record ReceivedMessage(ClientMessage message, int from) {
|
|
||||||
void process(ClientInterpreter interpreter) {
|
|
||||||
message.accept(interpreter, from);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
package pp.battleship.client.server;
|
||||||
|
|
||||||
|
import pp.battleship.message.client.ClientInterpreter;
|
||||||
|
import pp.battleship.message.client.ClientMessage;
|
||||||
|
|
||||||
|
record ReceivedMessageSelfhost(ClientMessage message, int from) {
|
||||||
|
void process(ClientInterpreter interpreter) {
|
||||||
|
message.accept(interpreter, from);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user