From 6f6492e8c04daa518499ae3a15de6f64f1671ba6 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Wed, 16 Dec 2020 11:35:20 +0100 Subject: [PATCH] connect ui to message sending methods --- .../insa/clavardator/ui/MainController.java | 28 +++++++++++-------- .../clavardator/ui/chat/ChatController.java | 5 ++-- .../ui/chat/ChatFooterController.java | 23 ++++++++++----- .../fr/insa/clavardator/users/PeerUser.java | 14 ++++++++++ 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/main/java/fr/insa/clavardator/ui/MainController.java b/src/main/java/fr/insa/clavardator/ui/MainController.java index 623a7a4..7679214 100644 --- a/src/main/java/fr/insa/clavardator/ui/MainController.java +++ b/src/main/java/fr/insa/clavardator/ui/MainController.java @@ -71,21 +71,25 @@ public class MainController implements Initializable { } }); editUserDialogController.setOnSuccessListener(() -> { - try { - final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml")); - snackbar.enqueue(new JFXSnackbar.SnackbarEvent( - loader.load() - )); - final SnackbarController controller = loader.getController(); - controller.setText("Nom d'utilisateur changé !"); - controller.setMode(SnackbarController.Mode.SUCCESS); - } catch (IOException e) { - e.printStackTrace(); - } + showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS); }); editUserDialogController.show(root, mode); } + private void showSnackbarEvent(String text, SnackbarController.Mode mode) { + try { + final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml")); + snackbar.enqueue(new JFXSnackbar.SnackbarEvent( + loader.load() + )); + final SnackbarController controller = loader.getController(); + controller.setText(text); + controller.setMode(mode); + } catch (IOException e) { + e.printStackTrace(); + } + } + private void openAboutDialog() { aboutDialogController.show(root); } @@ -133,7 +137,7 @@ public class MainController implements Initializable { listController.setUserSelectedListener((user) -> chatController.setRemoteUser(user)); chatController.addAttachmentListener(() -> System.out.println("attach event")); - chatController.addSendListener((text) -> System.out.println("sent : " + text)); + chatController.addSendErrorListener((e) -> showSnackbarEvent("Erreur: Message non envoyé", SnackbarController.Mode.ERROR)); toolbarController.addEditListener(() -> openEditUsernameDialog(EditUsernameDialogController.Mode.EDIT)); toolbarController.addAboutListener(this::openAboutDialog); } diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java index 8e9223e..039e641 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java @@ -6,6 +6,7 @@ import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.ui.LoadingScreenController; import fr.insa.clavardator.ui.NoSelectionModel; import fr.insa.clavardator.users.PeerUser; +import fr.insa.clavardator.util.ErrorCallback; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.fxml.Initializable; @@ -38,8 +39,8 @@ public class ChatController implements Initializable { chatFooterController.addAttachmentListener(listener); } - public void addSendListener(ChatFooterController.SendMessageEvent listener) { - chatFooterController.addSendListener(listener); + public void addSendErrorListener(ErrorCallback listener) { + chatFooterController.addSendErrorListener(listener); } public void setRemoteUser(PeerUser remoteUser) { diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java index 4142aa6..c6a65f4 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java @@ -3,12 +3,12 @@ package fr.insa.clavardator.ui.chat; import com.jfoenix.controls.JFXTextField; import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.users.PeerUser; +import fr.insa.clavardator.util.ErrorCallback; +import fr.insa.clavardator.util.Log; import javafx.beans.value.ObservableValue; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; import javafx.scene.layout.HBox; import java.net.URL; @@ -25,7 +25,7 @@ public class ChatFooterController implements Initializable { private JFXTextField textField; private List attachmentListeners; - private List sendListeners; + private List sendErrorListeners; private PeerUser remoteUser; private HashMap savedText; @@ -34,18 +34,27 @@ public class ChatFooterController implements Initializable { public void addAttachmentListener(ButtonPressEvent listener) { attachmentListeners.add(listener); } - public void addSendListener(SendMessageEvent listener) { - sendListeners.add(listener); + public void addSendErrorListener(ErrorCallback listener) { + sendErrorListeners.add(listener); } public void onAttachmentPress() { attachmentListeners.forEach(ButtonPressEvent::onPress); } public void onSend() { - sendListeners.forEach((l) -> l.onSend(findSavedText())); + if (remoteUser != null) { + remoteUser.sendTextMessage(textField.getText(), this::onSendError); + } else { + Log.e(this.getClass().getSimpleName(), "Error: remote user not set"); + } textField.setText(""); } + public void onSendError(Exception e) { + Log.e(this.getClass().getSimpleName(), "Error: Could not send message", e); + sendErrorListeners.forEach((l) -> l.onError(e)); + } + public void setEnabled(boolean enabled) { container.setDisable(!enabled); } @@ -72,7 +81,7 @@ public class ChatFooterController implements Initializable { public void initialize(URL location, ResourceBundle resources) { savedText = new HashMap<>(); attachmentListeners = new ArrayList<>(); - sendListeners = new ArrayList<>(); + sendErrorListeners = new ArrayList<>(); textField.textProperty().addListener(this::onTextChange); textField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) { diff --git a/src/main/java/fr/insa/clavardator/users/PeerUser.java b/src/main/java/fr/insa/clavardator/users/PeerUser.java index a7fdfeb..2541ca9 100644 --- a/src/main/java/fr/insa/clavardator/users/PeerUser.java +++ b/src/main/java/fr/insa/clavardator/users/PeerUser.java @@ -6,6 +6,7 @@ import fr.insa.clavardator.network.PeerConnection; import fr.insa.clavardator.util.ErrorCallback; import fr.insa.clavardator.util.Log; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.EOFException; import java.net.InetAddress; @@ -67,6 +68,19 @@ public class PeerUser extends User implements Comparable { init(connection, callback, errorCallback); } + public void sendTextMessage(String msg, @Nullable ErrorCallback errorCallback) { + if (connection != null) { + Log.v(this.getClass().getSimpleName(), + "Sending message to " + this.getUsername() + " / " + this.getId() + ": " + msg); + final Message message = new Message(CurrentUser.getInstance(), this, msg); + connection.send( + message, + () -> history.addMessage(message), + errorCallback); + } else { + Log.e(this.getClass().getSimpleName(), "Could not send message: connection is not initialized"); + } + } private void init(PeerConnection thisConnection, UserConnectedCallback callback, ErrorCallback errorCallback) { // Send our username