This commit is contained in:
schrom01 2022-04-15 15:34:03 +02:00 committed by Leonardo Brandenberger
parent 28376f1242
commit 9e027b5c7a
2 changed files with 29 additions and 45 deletions

View File

@ -2,12 +2,9 @@ package ch.zhaw.pm2.multichat.client;
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler.State; import ch.zhaw.pm2.multichat.protocol.ConnectionHandler.State;
import ch.zhaw.pm2.multichat.protocol.ChatProtocolException; import ch.zhaw.pm2.multichat.protocol.ChatProtocolException;
import ch.zhaw.pm2.multichat.protocol.ConnectionHandler;
import ch.zhaw.pm2.multichat.protocol.NetworkHandler;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button; import javafx.scene.control.Button;
@ -26,33 +23,20 @@ public class ChatWindowController {
private final WindowCloseHandler windowCloseHandler = new WindowCloseHandler(); private final WindowCloseHandler windowCloseHandler = new WindowCloseHandler();
@FXML @FXML private Pane rootPane;
private Pane rootPane; @FXML private TextField serverAddressField;
@FXML @FXML private TextField serverPortField;
private TextField serverAddressField; @FXML private TextField userNameField;
@FXML @FXML private TextField messageField;
private TextField serverPortField; @FXML private TextArea messageArea;
@FXML @FXML private Button connectButton;
private TextField userNameField; @FXML private Button sendButton;
@FXML @FXML private TextField filterValue;
private TextField messageField;
@FXML
private TextArea messageArea;
@FXML
private Button connectButton;
@FXML
private Button sendButton;
@FXML
private TextField filterValue;
private ChatWindowModel model = new ChatWindowModel();
@FXML @FXML
public void initialize() { public void initialize() {
serverAddressField.setText(model.getServerAddress()); // binding server address to view
model.setServerAddress(NetworkHandler.DEFAULT_ADDRESS.getCanonicalHostName()); // sets modell adress
serverPortField.setText(model.getServerPort());
model.setServerPort(String.valueOf(NetworkHandler.DEFAULT_PORT));
} }
public void setMessages(ClientMessageList messages) { public void setMessages(ClientMessageList messages) {
@ -60,8 +44,11 @@ public class ChatWindowController {
messageListener(); messageListener();
} }
public void setConnectionHandler(ClientConnectionHandler connectionHandler) { public void setConnectionHandler(ClientConnectionHandler connectionHandler){
this.connectionHandler = connectionHandler; this.connectionHandler = connectionHandler;
startConnectionHandlerListener();
serverAddressField.setText(connectionHandler.getServerAddressProperty().get());
serverPortField.setText(String.valueOf(connectionHandler.getServerPortProperty().get()));
} }
private void applicationClose() { private void applicationClose() {
@ -69,7 +56,7 @@ public class ChatWindowController {
} }
@FXML @FXML
private void toggleConnection() { private void toggleConnection () {
if (connectionHandler == null || connectionHandler.getStateProperty().get() != CONNECTED) { if (connectionHandler == null || connectionHandler.getStateProperty().get() != CONNECTED) {
connect(); connect();
} else { } else {
@ -82,7 +69,7 @@ public class ChatWindowController {
messages.clear(); // clear message list messages.clear(); // clear message list
startConnectionHandler(); startConnectionHandler();
connectionHandler.connect(); connectionHandler.connect();
} catch (ChatProtocolException | IOException e) { } catch(ChatProtocolException | IOException e) {
addError(e.getMessage()); addError(e.getMessage());
} }
} }
@ -116,20 +103,20 @@ public class ChatWindowController {
} }
@FXML @FXML
private void applyFilter() { private void applyFilter( ) {
this.redrawMessageList(); Platform.runLater(() -> this.messageArea.setText(messages.getFilteredMessages(filterValue.getText().strip())));
} }
private void startConnectionHandler() throws IOException { private void startConnectionHandler() throws IOException {
String userName = userNameField.getText(); String userName = userNameField.getText();
if (!userName.contains(" ")) { if(!userName.contains(" ")) {
String serverAddress = serverAddressField.getText(); String serverAddress = serverAddressField.getText();
int serverPort = Integer.parseInt(serverPortField.getText()); int serverPort = Integer.parseInt(serverPortField.getText());
connectionHandler.initialize(serverAddress, serverPort, userName); connectionHandler.initialize(serverAddress, serverPort, userName);
new Thread(connectionHandler).start(); new Thread(connectionHandler).start();
//register Listener //register Listener
startListener(); //startConnectionHandlerListener();
// register window close handler // register window close handler
rootPane.getScene().getWindow().addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, windowCloseHandler); rootPane.getScene().getWindow().addEventHandler(WindowEvent.WINDOW_CLOSE_REQUEST, windowCloseHandler);
@ -146,7 +133,7 @@ public class ChatWindowController {
connectButton.setText((newState == CONNECTED || newState == CONFIRM_DISCONNECT) ? "Disconnect" : "Connect"); connectButton.setText((newState == CONNECTED || newState == CONFIRM_DISCONNECT) ? "Disconnect" : "Connect");
} }
}); });
if (newState == DISCONNECTED) { if(newState == DISCONNECTED){
connectionHandler.stopReceiving(); connectionHandler.stopReceiving();
} }
} }
@ -182,19 +169,13 @@ public class ChatWindowController {
messages.addMessage(new Message(Message.MessageType.ERROR, null, null, message)); messages.addMessage(new Message(Message.MessageType.ERROR, null, null, message));
} }
private void redrawMessageList() {
this.messageArea.clear();
Platform.runLater(() -> this.messageArea.setText(messages.getFilteredMessages(filterValue.getText().strip())));
}
class WindowCloseHandler implements EventHandler<WindowEvent> { class WindowCloseHandler implements EventHandler<WindowEvent> {
public void handle(WindowEvent event) { public void handle(WindowEvent event) {
applicationClose(); applicationClose();
} }
} }
public void startListener() { public void startConnectionHandlerListener() {
connectionHandler.getStateProperty().addListener(new ChangeListener<State>() { connectionHandler.getStateProperty().addListener(new ChangeListener<State>() {
@Override @Override
public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue) { public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue) {
@ -228,7 +209,7 @@ public class ChatWindowController {
messages.getChangedProperty().addListener(new ChangeListener<Boolean>() { messages.getChangedProperty().addListener(new ChangeListener<Boolean>() {
@Override @Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
redrawMessageList(); Platform.runLater(() -> messageArea.setText(messages.getFilteredMessages(filterValue.getText().strip())));
} }
}); });
} }

View File

@ -29,12 +29,15 @@ public class ClientConnectionHandler extends ConnectionHandler implements Runnab
super(); super();
this.messages = messages; this.messages = messages;
state = new SimpleObjectProperty<>(State.NEW); state = new SimpleObjectProperty<>(State.NEW);
serverAddress = new SimpleStringProperty(); serverAddress = new SimpleStringProperty(NetworkHandler.DEFAULT_ADDRESS.getCanonicalHostName());
serverPort = new SimpleIntegerProperty(); serverPort = new SimpleIntegerProperty(NetworkHandler.DEFAULT_PORT);
this.userName = new SimpleStringProperty(null);
} }
public void initialize(String serverAddress, int serverPort, String userName) throws IOException { public void initialize(String serverAddress, int serverPort, String userName) throws IOException {
state = new SimpleObjectProperty<>(NEW); state.set(NEW);
this.serverAddress.set(serverAddress);
this.serverPort.set(serverPort);
setConnection(NetworkHandler.openConnection(serverAddress, serverPort)); setConnection(NetworkHandler.openConnection(serverAddress, serverPort));
this.userName = new SimpleStringProperty((userName == null || userName.isBlank())? USER_NONE : userName); this.userName = new SimpleStringProperty((userName == null || userName.isBlank())? USER_NONE : userName);
} }