diff --git a/client/src/main/java/ch/zhaw/pm2/multichat/client/ChatWindowController.java b/client/src/main/java/ch/zhaw/pm2/multichat/client/ChatWindowController.java index e4c536a..5bde847 100644 --- a/client/src/main/java/ch/zhaw/pm2/multichat/client/ChatWindowController.java +++ b/client/src/main/java/ch/zhaw/pm2/multichat/client/ChatWindowController.java @@ -47,6 +47,10 @@ public class ChatWindowController { messageListener(); } + public void setConnectionHandler(ClientConnectionHandler connectionHandler){ + this.connectionHandler = connectionHandler; + } + private void applicationClose() { disconnect(); } @@ -108,9 +112,7 @@ public class ChatWindowController { if(!userName.contains(" ")) { String serverAddress = serverAddressField.getText(); int serverPort = Integer.parseInt(serverPortField.getText()); - connectionHandler = new ClientConnectionHandler( - NetworkHandler.openConnection(serverAddress, serverPort), userName, - messages); + connectionHandler.initialize(serverAddress, serverPort, userName); new Thread(connectionHandler).start(); //register Listener @@ -123,16 +125,7 @@ public class ChatWindowController { } } - private void terminateConnectionHandler() { - // unregister window close handler - rootPane.getScene().getWindow().removeEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, windowCloseHandler); - if (connectionHandler != null) { - connectionHandler.stopReceiving(); - connectionHandler = null; - } - } - - public void stateChanged(ConnectionHandler.State newState) { + public void stateChanged(State newState) { // update UI (need to be run in UI thread: see Platform.runLater()) Platform.runLater(new Runnable() { @Override @@ -140,8 +133,8 @@ public class ChatWindowController { connectButton.setText((newState == CONNECTED || newState == CONFIRM_DISCONNECT) ? "Disconnect" : "Connect"); } }); - if (newState == DISCONNECTED) { - terminateConnectionHandler(); + if(newState == DISCONNECTED){ + connectionHandler.stopReceiving(); } } diff --git a/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientConnectionHandler.java b/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientConnectionHandler.java index a0b0b2c..983c34c 100644 --- a/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientConnectionHandler.java +++ b/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientConnectionHandler.java @@ -25,17 +25,20 @@ public class ClientConnectionHandler extends ConnectionHandler implements Runnab private SimpleStringProperty serverAddress; private SimpleIntegerProperty serverPort; - public ClientConnectionHandler(NetworkHandler.NetworkConnection connection, - String userName, - ClientMessageList messages) { - super(connection); - this.userName = new SimpleStringProperty((userName == null || userName.isBlank())? USER_NONE : userName); + public ClientConnectionHandler(ClientMessageList messages) { + super(); this.messages = messages; state = new SimpleObjectProperty<>(State.NEW); serverAddress = new SimpleStringProperty(); serverPort = new SimpleIntegerProperty(); } + public void initialize(String serverAddress, int serverPort, String userName) throws IOException { + state = new SimpleObjectProperty<>(NEW); + setConnection(NetworkHandler.openConnection(serverAddress, serverPort)); + this.userName = new SimpleStringProperty((userName == null || userName.isBlank())? USER_NONE : userName); + } + public SimpleStringProperty getServerAddressProperty() { return serverAddress; } public SimpleIntegerProperty getServerPortProperty() { return serverPort; } diff --git a/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientUI.java b/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientUI.java index bde3d1d..67a1d96 100644 --- a/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientUI.java +++ b/client/src/main/java/ch/zhaw/pm2/multichat/client/ClientUI.java @@ -8,6 +8,7 @@ import javafx.stage.Stage; public class ClientUI extends Application { private ClientMessageList clientMessageList = new ClientMessageList(); + private ClientConnectionHandler connectionHandler = new ClientConnectionHandler(clientMessageList); @Override public void start(Stage primaryStage) { @@ -21,6 +22,7 @@ public class ClientUI extends Application { ChatWindowController chatWindowController = loader.getController(); chatWindowController.setMessages(clientMessageList); + chatWindowController.setConnectionHandler(connectionHandler); // fill in scene and stage setup Scene scene = new Scene(rootPane); diff --git a/protocol/src/main/java/ch/zhaw/pm2/multichat/protocol/ConnectionHandler.java b/protocol/src/main/java/ch/zhaw/pm2/multichat/protocol/ConnectionHandler.java index a0ddd57..f7acd4a 100644 --- a/protocol/src/main/java/ch/zhaw/pm2/multichat/protocol/ConnectionHandler.java +++ b/protocol/src/main/java/ch/zhaw/pm2/multichat/protocol/ConnectionHandler.java @@ -17,10 +17,6 @@ public abstract class ConnectionHandler { NEW, CONFIRM_CONNECT, CONNECTED, CONFIRM_DISCONNECT, DISCONNECTED; } - public ConnectionHandler(NetworkHandler.NetworkConnection connection) { - this.connection = connection; - } - public static String getDataTypeConnect() { return DATA_TYPE_CONNECT; } @@ -45,7 +41,7 @@ public abstract class ConnectionHandler { return connection; } - protected void setConnection() { + protected void setConnection(NetworkHandler.NetworkConnection connection) { this.connection = connection; } } diff --git a/server/src/main/java/ch/zhaw/pm2/multichat/server/ServerConnectionHandler.java b/server/src/main/java/ch/zhaw/pm2/multichat/server/ServerConnectionHandler.java index 4e3db14..c911b7b 100644 --- a/server/src/main/java/ch/zhaw/pm2/multichat/server/ServerConnectionHandler.java +++ b/server/src/main/java/ch/zhaw/pm2/multichat/server/ServerConnectionHandler.java @@ -2,6 +2,7 @@ package ch.zhaw.pm2.multichat.server; import ch.zhaw.pm2.multichat.protocol.ChatProtocolException; import ch.zhaw.pm2.multichat.protocol.ConnectionHandler; +import static ch.zhaw.pm2.multichat.protocol.ConnectionHandler.State.*; import ch.zhaw.pm2.multichat.protocol.NetworkHandler; import java.io.EOFException; @@ -15,7 +16,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; -import static ch.zhaw.pm2.multichat.server.ServerConnectionHandler.State.*; + public class ServerConnectionHandler extends ConnectionHandler implements Runnable{ private static final AtomicInteger connectionCounter = new AtomicInteger(0); @@ -34,13 +35,10 @@ public class ServerConnectionHandler extends ConnectionHandler implements Runnab startReceiving(); } - enum State { - NEW, CONNECTED, DISCONNECTED; - } - public ServerConnectionHandler(NetworkHandler.NetworkConnection connection, Map registry, ReentrantLock mutex, Condition nameComplete) { - super(connection); + super(); + setConnection(connection); Objects.requireNonNull(connection, "Connection must not be null"); Objects.requireNonNull(registry, "Registry must not be null"); this.connectionRegistry = registry;