From 2f47614779c9ea81246ddd598b451a3f98fe081d Mon Sep 17 00:00:00 2001 From: bouclyma Date: Tue, 7 Jan 2025 11:51:33 +0100 Subject: [PATCH] =?UTF-8?q?feat(event):=202.6.5:=20R=C3=A9ception=20du=20p?= =?UTF-8?q?ost=20par=20le=20client=20(to=20debug)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/rtgre/chat/ChatController.java | 32 ++++++++++----- .../main/java/rtgre/chat/net/ChatClient.java | 5 +++ .../main/java/rtgre/server/ChatServer.java | 40 +++++++++++-------- 3 files changed, 49 insertions(+), 28 deletions(-) diff --git a/chat/src/main/java/rtgre/chat/ChatController.java b/chat/src/main/java/rtgre/chat/ChatController.java index 79b474d..5b2cd19 100644 --- a/chat/src/main/java/rtgre/chat/ChatController.java +++ b/chat/src/main/java/rtgre/chat/ChatController.java @@ -3,6 +3,7 @@ package rtgre.chat; import javafx.application.Platform; import javafx.beans.Observable; import javafx.beans.binding.Bindings; +import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.embed.swing.SwingFXUtils; @@ -110,6 +111,10 @@ public class ChatController implements Initializable { .decorates(loginTextField) .immediate(); + ObservableValue canSendCondition = connectionButton.selectedProperty().not() + .or(contactsListView.getSelectionModel().selectedItemProperty().isNull()); + sendButton.disableProperty().bind(canSendCondition); + messageTextField.disableProperty().bind(canSendCondition); /* /!\ Set-up d'environnement de test /!\ */ /* -------------------------------------- */ @@ -122,7 +127,8 @@ public class ChatController implements Initializable { String login = getSelectedContactLogin(); if (login != null) { Message message = new Message(login, messageTextField.getText()); - LOGGER.info(message.toString()); + LOGGER.info("Sending " + message); + client.sendMessageEvent(message); } } @@ -269,7 +275,8 @@ public class ChatController implements Initializable { if (contactSelected != null) { LOGGER.info("Clic sur " + contactSelected); } - Post postSys = new Post("system", contactSelected.getLogin(), "Bienvenue dans la discussion avec " + contactSelected.getLogin()); + Post postSys = new Post("system", loginTextField.getText(), "Bienvenue dans la discussion avec " + contactSelected.getLogin()); + postsObservableList.clear(); postsObservableList.add(postSys); postListView.refresh(); } @@ -277,23 +284,26 @@ public class ChatController implements Initializable { public void handleEvent(rtgre.modeles.Event event) { LOGGER.info("Received new event! : " + event); LOGGER.info(event.getType()); - -// switch (event.getType()) { -// case "CONT": -// handleContEvent(event.getContent()); -// default: -// LOGGER.warning("Unhandled event type: " + event.getType()); -// this.client.close(); -// } - if (event.getType().equals("CONT")) { handleContEvent(event.getContent()); + } else if (event.getType().equals("POST")) { + handlePostEvent(event.getContent()); } else { LOGGER.warning("Unhandled event type: " + event.getType()); this.client.close(); } } + private void handlePostEvent(JSONObject content) { + if (content.getString("from").equals(contactsListView.getSelectionModel().getSelectedItem()) || + content.getString("to").equals(loginTextField.getText())) { + postVector.add(Post.fromJson(content)); + postsObservableList.add(Post.fromJson(content)); + postListView.refresh(); + + } + } + private void handleContEvent(JSONObject content) { Contact contact = contactMap.getContact(content.getString("login")); if (contact != null) { diff --git a/chat/src/main/java/rtgre/chat/net/ChatClient.java b/chat/src/main/java/rtgre/chat/net/ChatClient.java index 4c60c58..f311385 100644 --- a/chat/src/main/java/rtgre/chat/net/ChatClient.java +++ b/chat/src/main/java/rtgre/chat/net/ChatClient.java @@ -5,6 +5,7 @@ import org.json.JSONObject; import rtgre.chat.ChatController; import rtgre.modeles.Contact; import rtgre.modeles.Event; +import rtgre.modeles.Message; import java.io.BufferedReader; import java.io.IOException; @@ -85,4 +86,8 @@ public class ChatClient extends ClientTCP { public ChatController getListener() { return listener; } + + public void sendMessageEvent(Message msg) { + sendEvent(new Event("MESG", msg.toJsonObject())); + } } diff --git a/chat/src/main/java/rtgre/server/ChatServer.java b/chat/src/main/java/rtgre/server/ChatServer.java index ec234f1..adbc87e 100644 --- a/chat/src/main/java/rtgre/server/ChatServer.java +++ b/chat/src/main/java/rtgre/server/ChatServer.java @@ -3,9 +3,7 @@ package rtgre.server; import org.json.JSONException; import org.json.JSONObject; import rtgre.chat.net.ChatClient; -import rtgre.modeles.Contact; -import rtgre.modeles.ContactMap; -import rtgre.modeles.Event; +import rtgre.modeles.*; import java.io.*; import java.net.ServerSocket; @@ -24,6 +22,7 @@ public class ChatServer { private static final Logger LOGGER = Logger.getLogger(ChatServer.class.getCanonicalName()); private Vector clientList; + private PostVector postVector; private ContactMap contactMap; static { @@ -237,18 +236,6 @@ public class ChatServer { private boolean handleEvent(String message) throws JSONException, IllegalStateException { Event event = Event.fromJson(message); -// switch (event.getType()) { -// case Event.AUTH: -// doLogin(event.getContent()); -// LOGGER.finest("Login successful"); -// return true; -// case Event.LIST_CONTACTS: -// doListContact(event.getContent()); -// LOGGER.finest("Sending contacts"); -// default: -// LOGGER.warning("Unhandled event type: " + event.getType()); -// return false; -// } if (event.getType().equals(Event.AUTH)) { doLogin(event.getContent()); LOGGER.finest("Login successful"); @@ -256,12 +243,31 @@ public class ChatServer { } else if (event.getType().equals(Event.LIST_CONTACTS)) { doListContact(event.getContent()); LOGGER.finest("Sending contacts"); + return true; + } else if (event.getType().equals(Event.MESG)) { + doMessage(event.getContent()); + return true; } else { LOGGER.warning("Unhandled event type: " + event.getType()); return false; - } - return false; + } + + private void doMessage(JSONObject content) throws JSONException, IllegalStateException { + if (content.getString("to").equals(user.getLogin()) || !contactMap.containsKey(content.getString("to"))) { + throw new IllegalStateException(); + } else { + Post post = new Post( + user.getLogin(), + Message.fromJson(content) + ); + Event postEvent = new Event("POST", post.toJsonObject()); + + sendEventToContact(contactMap.getContact(post.getFrom()), postEvent); + sendEventToContact(contactMap.getContact(post.getTo()), postEvent); + + postVector.add(post); + } } private void doListContact(JSONObject content) throws JSONException, IllegalStateException {