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 6a2f224..f2e9563 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 @@ -48,6 +48,10 @@ public class ChatWindowController { messageListener(); } + public void setConnectionHandler(ClientConnectionHandler connectionHandler){ + this.connectionHandler = connectionHandler; + } + private void applicationClose() { disconnect(); } @@ -108,9 +112,7 @@ public class ChatWindowController { String userName = userNameField.getText(); 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 @@ -120,15 +122,6 @@ public class ChatWindowController { rootPane.getScene().getWindow().addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, windowCloseHandler); } - 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(State newState) { // update UI (need to be run in UI thread: see Platform.runLater()) Platform.runLater(new Runnable() { @@ -137,8 +130,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 9da83da..b79195f 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 @@ -16,7 +16,7 @@ import java.util.regex.Pattern; import static ch.zhaw.pm2.multichat.client.ClientConnectionHandler.State.*; public class ClientConnectionHandler implements Runnable { - private final NetworkHandler.NetworkConnection connection; + private NetworkHandler.NetworkConnection connection; // Data types used for the Chat Protocol private static final String DATA_TYPE_CONNECT = "CONNECT"; @@ -40,17 +40,19 @@ public class ClientConnectionHandler implements Runnable { NEW, CONFIRM_CONNECT, CONNECTED, CONFIRM_DISCONNECT, DISCONNECTED; } - public ClientConnectionHandler(NetworkHandler.NetworkConnection connection, - String userName, - ClientMessageList messages) { - this.connection = connection; - this.userName = new SimpleStringProperty((userName == null || userName.isBlank())? USER_NONE : userName); + public ClientConnectionHandler(ClientMessageList messages) { this.messages = messages; state = new SimpleObjectProperty<>(NEW); serverAddress = new SimpleStringProperty(); serverPort = new SimpleIntegerProperty(); } + public void initialize(String serverAddress, int serverPort, String userName) throws IOException { + state = new SimpleObjectProperty<>(NEW); + this.connection = 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);