connect ui to message sending methods

This commit is contained in:
Arnaud Vergnet 2020-12-16 11:35:20 +01:00
parent 6f1bd41cc9
commit 6f6492e8c0
4 changed files with 49 additions and 21 deletions

View file

@ -71,19 +71,23 @@ public class MainController implements Initializable {
} }
}); });
editUserDialogController.setOnSuccessListener(() -> { editUserDialogController.setOnSuccessListener(() -> {
showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS);
});
editUserDialogController.show(root, mode);
}
private void showSnackbarEvent(String text, SnackbarController.Mode mode) {
try { try {
final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml")); final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml"));
snackbar.enqueue(new JFXSnackbar.SnackbarEvent( snackbar.enqueue(new JFXSnackbar.SnackbarEvent(
loader.load() loader.load()
)); ));
final SnackbarController controller = loader.getController(); final SnackbarController controller = loader.getController();
controller.setText("Nom d'utilisateur changé !"); controller.setText(text);
controller.setMode(SnackbarController.Mode.SUCCESS); controller.setMode(mode);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
});
editUserDialogController.show(root, mode);
} }
private void openAboutDialog() { private void openAboutDialog() {
@ -133,7 +137,7 @@ public class MainController implements Initializable {
listController.setUserSelectedListener((user) -> chatController.setRemoteUser(user)); listController.setUserSelectedListener((user) -> chatController.setRemoteUser(user));
chatController.addAttachmentListener(() -> System.out.println("attach event")); 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.addEditListener(() -> openEditUsernameDialog(EditUsernameDialogController.Mode.EDIT));
toolbarController.addAboutListener(this::openAboutDialog); toolbarController.addAboutListener(this::openAboutDialog);
} }

View file

@ -6,6 +6,7 @@ import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.ui.LoadingScreenController; import fr.insa.clavardator.ui.LoadingScreenController;
import fr.insa.clavardator.ui.NoSelectionModel; import fr.insa.clavardator.ui.NoSelectionModel;
import fr.insa.clavardator.users.PeerUser; import fr.insa.clavardator.users.PeerUser;
import fr.insa.clavardator.util.ErrorCallback;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@ -38,8 +39,8 @@ public class ChatController implements Initializable {
chatFooterController.addAttachmentListener(listener); chatFooterController.addAttachmentListener(listener);
} }
public void addSendListener(ChatFooterController.SendMessageEvent listener) { public void addSendErrorListener(ErrorCallback listener) {
chatFooterController.addSendListener(listener); chatFooterController.addSendErrorListener(listener);
} }
public void setRemoteUser(PeerUser remoteUser) { public void setRemoteUser(PeerUser remoteUser) {

View file

@ -3,12 +3,12 @@ package fr.insa.clavardator.ui.chat;
import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXTextField;
import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.users.PeerUser; 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.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox; import javafx.scene.layout.HBox;
import java.net.URL; import java.net.URL;
@ -25,7 +25,7 @@ public class ChatFooterController implements Initializable {
private JFXTextField textField; private JFXTextField textField;
private List<ButtonPressEvent> attachmentListeners; private List<ButtonPressEvent> attachmentListeners;
private List<SendMessageEvent> sendListeners; private List<ErrorCallback> sendErrorListeners;
private PeerUser remoteUser; private PeerUser remoteUser;
private HashMap<PeerUser, String> savedText; private HashMap<PeerUser, String> savedText;
@ -34,18 +34,27 @@ public class ChatFooterController implements Initializable {
public void addAttachmentListener(ButtonPressEvent listener) { public void addAttachmentListener(ButtonPressEvent listener) {
attachmentListeners.add(listener); attachmentListeners.add(listener);
} }
public void addSendListener(SendMessageEvent listener) { public void addSendErrorListener(ErrorCallback listener) {
sendListeners.add(listener); sendErrorListeners.add(listener);
} }
public void onAttachmentPress() { public void onAttachmentPress() {
attachmentListeners.forEach(ButtonPressEvent::onPress); attachmentListeners.forEach(ButtonPressEvent::onPress);
} }
public void onSend() { 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(""); 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) { public void setEnabled(boolean enabled) {
container.setDisable(!enabled); container.setDisable(!enabled);
} }
@ -72,7 +81,7 @@ public class ChatFooterController implements Initializable {
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
savedText = new HashMap<>(); savedText = new HashMap<>();
attachmentListeners = new ArrayList<>(); attachmentListeners = new ArrayList<>();
sendListeners = new ArrayList<>(); sendErrorListeners = new ArrayList<>();
textField.textProperty().addListener(this::onTextChange); textField.textProperty().addListener(this::onTextChange);
textField.setOnKeyPressed(event -> { textField.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) { if (event.getCode() == KeyCode.ENTER) {

View file

@ -6,6 +6,7 @@ import fr.insa.clavardator.network.PeerConnection;
import fr.insa.clavardator.util.ErrorCallback; import fr.insa.clavardator.util.ErrorCallback;
import fr.insa.clavardator.util.Log; import fr.insa.clavardator.util.Log;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.EOFException; import java.io.EOFException;
import java.net.InetAddress; import java.net.InetAddress;
@ -67,6 +68,19 @@ public class PeerUser extends User implements Comparable<PeerUser> {
init(connection, callback, errorCallback); 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) { private void init(PeerConnection thisConnection, UserConnectedCallback callback, ErrorCallback errorCallback) {
// Send our username // Send our username