From 1732a63a4a5b65e13b7cb30097df50826b6b2bbe Mon Sep 17 00:00:00 2001 From: Emi Boucly Date: Tue, 7 Jan 2025 16:04:40 +0100 Subject: [PATCH] =?UTF-8?q?feat(Event):=202.6.5:=20R=C3=A9cup=C3=A9ration?= =?UTF-8?q?=20des=20posts=20apr=C3=A8s=20changement=20de=20discussion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/rtgre/chat/ChatController.java | 1 + .../main/java/rtgre/chat/net/ChatClient.java | 10 +++++ .../main/java/rtgre/server/ChatServer.java | 45 ++++++++++++++----- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/chat/src/main/java/rtgre/chat/ChatController.java b/chat/src/main/java/rtgre/chat/ChatController.java index 3f72050..514c994 100644 --- a/chat/src/main/java/rtgre/chat/ChatController.java +++ b/chat/src/main/java/rtgre/chat/ChatController.java @@ -278,6 +278,7 @@ public class ChatController implements Initializable { Post postSys = new Post("system", loginTextField.getText(), "Bienvenue dans la discussion avec " + contactSelected.getLogin()); postsObservableList.clear(); postsObservableList.add(postSys); + client.sendListPostEvent(0, contactSelected.getLogin()); postListView.refresh(); } diff --git a/chat/src/main/java/rtgre/chat/net/ChatClient.java b/chat/src/main/java/rtgre/chat/net/ChatClient.java index f311385..b9bb8b5 100644 --- a/chat/src/main/java/rtgre/chat/net/ChatClient.java +++ b/chat/src/main/java/rtgre/chat/net/ChatClient.java @@ -58,6 +58,16 @@ public class ChatClient extends ClientTCP { sendEvent(authEvent); } + public void sendListPostEvent(long since, String select) { + Event listPostEvent = new Event( + Event.LIST_POSTS, + new JSONObject() + .put("since", since) + .put("select", select) + ); + sendEvent(listPostEvent); + } + @Override public void receiveLoop() { diff --git a/chat/src/main/java/rtgre/server/ChatServer.java b/chat/src/main/java/rtgre/server/ChatServer.java index a8c4cc2..4cfb012 100644 --- a/chat/src/main/java/rtgre/server/ChatServer.java +++ b/chat/src/main/java/rtgre/server/ChatServer.java @@ -250,27 +250,48 @@ public class ChatServer { doMessage(event.getContent()); LOGGER.info("Receiving message"); return true; + } else if (event.getType().equals(Event.LIST_POSTS)) { + doListPost(event.getContent()); + LOGGER.info("Sending Posts"); + return true; } else { LOGGER.warning("Unhandled event type: " + event.getType()); return false; } } + private void doListPost(JSONObject content) throws JSONException, IllegalStateException { + + if (contactMap.getContact(user.getLogin()).isConnected()) { + if (!contactMap.containsKey(content.getString("select"))) { + throw new IllegalStateException(); + } + for (Post post: postVector.getPostsSince(content.getLong("since"))) { + if (post.getTo().equals(content.getString("select")) || + post.getFrom().equals(content.getString("select"))) { + sendEventToContact(contactMap.getContact(user.getLogin()), new Event(Event.POST, post.toJsonObject())); + } + } + } + } + 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()); + if (contactMap.getContact(user.getLogin()).isConnected()) { + 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); + sendEventToContact(contactMap.getContact(post.getFrom()), postEvent); + sendEventToContact(contactMap.getContact(post.getTo()), postEvent); - postVector.add(post); - LOGGER.info("Fin de doMessage"); + postVector.add(post); + LOGGER.info("Fin de doMessage"); + } } }