Browse Source

connect ui to message sending methods

Arnaud Vergnet 3 years ago
parent
commit
6f6492e8c0

+ 16
- 12
src/main/java/fr/insa/clavardator/ui/MainController.java View File

@@ -71,21 +71,25 @@ public class MainController implements Initializable {
71 71
 			}
72 72
 		});
73 73
 		editUserDialogController.setOnSuccessListener(() -> {
74
-			try {
75
-				final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml"));
76
-				snackbar.enqueue(new JFXSnackbar.SnackbarEvent(
77
-						loader.load()
78
-				));
79
-				final SnackbarController controller = loader.getController();
80
-				controller.setText("Nom d'utilisateur changé !");
81
-				controller.setMode(SnackbarController.Mode.SUCCESS);
82
-			} catch (IOException e) {
83
-				e.printStackTrace();
84
-			}
74
+			showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS);
85 75
 		});
86 76
 		editUserDialogController.show(root, mode);
87 77
 	}
88 78
 
79
+	private void showSnackbarEvent(String text, SnackbarController.Mode mode) {
80
+		try {
81
+			final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml"));
82
+			snackbar.enqueue(new JFXSnackbar.SnackbarEvent(
83
+					loader.load()
84
+			));
85
+			final SnackbarController controller = loader.getController();
86
+			controller.setText(text);
87
+			controller.setMode(mode);
88
+		} catch (IOException e) {
89
+			e.printStackTrace();
90
+		}
91
+	}
92
+
89 93
 	private void openAboutDialog() {
90 94
 		aboutDialogController.show(root);
91 95
 	}
@@ -133,7 +137,7 @@ public class MainController implements Initializable {
133 137
 
134 138
 		listController.setUserSelectedListener((user) -> chatController.setRemoteUser(user));
135 139
 		chatController.addAttachmentListener(() -> System.out.println("attach event"));
136
-		chatController.addSendListener((text) -> System.out.println("sent : " + text));
140
+		chatController.addSendErrorListener((e) -> showSnackbarEvent("Erreur: Message non envoyé", SnackbarController.Mode.ERROR));
137 141
 		toolbarController.addEditListener(() -> openEditUsernameDialog(EditUsernameDialogController.Mode.EDIT));
138 142
 		toolbarController.addAboutListener(this::openAboutDialog);
139 143
 	}

+ 3
- 2
src/main/java/fr/insa/clavardator/ui/chat/ChatController.java View File

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

+ 16
- 7
src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java View File

@@ -3,12 +3,12 @@ package fr.insa.clavardator.ui.chat;
3 3
 import com.jfoenix.controls.JFXTextField;
4 4
 import fr.insa.clavardator.ui.ButtonPressEvent;
5 5
 import fr.insa.clavardator.users.PeerUser;
6
+import fr.insa.clavardator.util.ErrorCallback;
7
+import fr.insa.clavardator.util.Log;
6 8
 import javafx.beans.value.ObservableValue;
7
-import javafx.event.EventHandler;
8 9
 import javafx.fxml.FXML;
9 10
 import javafx.fxml.Initializable;
10 11
 import javafx.scene.input.KeyCode;
11
-import javafx.scene.input.KeyEvent;
12 12
 import javafx.scene.layout.HBox;
13 13
 
14 14
 import java.net.URL;
@@ -25,7 +25,7 @@ public class ChatFooterController implements Initializable {
25 25
 	private JFXTextField textField;
26 26
 
27 27
 	private List<ButtonPressEvent> attachmentListeners;
28
-	private List<SendMessageEvent> sendListeners;
28
+	private List<ErrorCallback> sendErrorListeners;
29 29
 
30 30
 	private PeerUser remoteUser;
31 31
 	private HashMap<PeerUser, String> savedText;
@@ -34,18 +34,27 @@ public class ChatFooterController implements Initializable {
34 34
 	public void addAttachmentListener(ButtonPressEvent listener) {
35 35
 		attachmentListeners.add(listener);
36 36
 	}
37
-	public void addSendListener(SendMessageEvent listener) {
38
-		sendListeners.add(listener);
37
+	public void addSendErrorListener(ErrorCallback listener) {
38
+		sendErrorListeners.add(listener);
39 39
 	}
40 40
 
41 41
 	public void onAttachmentPress() {
42 42
 		attachmentListeners.forEach(ButtonPressEvent::onPress);
43 43
 	}
44 44
 	public void onSend() {
45
-		sendListeners.forEach((l) -> l.onSend(findSavedText()));
45
+		if (remoteUser != null) {
46
+			remoteUser.sendTextMessage(textField.getText(), this::onSendError);
47
+		} else {
48
+			Log.e(this.getClass().getSimpleName(), "Error: remote user not set");
49
+		}
46 50
 		textField.setText("");
47 51
 	}
48 52
 
53
+	public void onSendError(Exception e) {
54
+		Log.e(this.getClass().getSimpleName(), "Error: Could not send message", e);
55
+		sendErrorListeners.forEach((l) -> l.onError(e));
56
+	}
57
+
49 58
 	public void setEnabled(boolean enabled) {
50 59
 		container.setDisable(!enabled);
51 60
 	}
@@ -72,7 +81,7 @@ public class ChatFooterController implements Initializable {
72 81
 	public void initialize(URL location, ResourceBundle resources) {
73 82
 		savedText = new HashMap<>();
74 83
 		attachmentListeners = new ArrayList<>();
75
-		sendListeners = new ArrayList<>();
84
+		sendErrorListeners = new ArrayList<>();
76 85
 		textField.textProperty().addListener(this::onTextChange);
77 86
 		textField.setOnKeyPressed(event -> {
78 87
 			if (event.getCode() == KeyCode.ENTER) {

+ 14
- 0
src/main/java/fr/insa/clavardator/users/PeerUser.java View File

@@ -6,6 +6,7 @@ import fr.insa.clavardator.network.PeerConnection;
6 6
 import fr.insa.clavardator.util.ErrorCallback;
7 7
 import fr.insa.clavardator.util.Log;
8 8
 import org.jetbrains.annotations.NotNull;
9
+import org.jetbrains.annotations.Nullable;
9 10
 
10 11
 import java.io.EOFException;
11 12
 import java.net.InetAddress;
@@ -67,6 +68,19 @@ public class PeerUser extends User implements Comparable<PeerUser> {
67 68
 		init(connection, callback, errorCallback);
68 69
 	}
69 70
 
71
+	public void sendTextMessage(String msg,  @Nullable ErrorCallback errorCallback) {
72
+		if (connection != null) {
73
+			Log.v(this.getClass().getSimpleName(),
74
+					"Sending message to " + this.getUsername() + " / " + this.getId() + ": " + msg);
75
+			final Message message = new Message(CurrentUser.getInstance(), this, msg);
76
+			connection.send(
77
+					message,
78
+					() -> history.addMessage(message),
79
+					errorCallback);
80
+		} else {
81
+			Log.e(this.getClass().getSimpleName(), "Could not send message: connection is not initialized");
82
+		}
83
+	}
70 84
 
71 85
 	private void init(PeerConnection thisConnection, UserConnectedCallback callback, ErrorCallback errorCallback) {
72 86
 		// Send our username

Loading…
Cancel
Save