diff --git a/src/main/java/org/to/telegramfinalproject/Client/ActionHandler.java b/src/main/java/org/to/telegramfinalproject/Client/ActionHandler.java index ecc6ff1..b547c07 100644 --- a/src/main/java/org/to/telegramfinalproject/Client/ActionHandler.java +++ b/src/main/java/org/to/telegramfinalproject/Client/ActionHandler.java @@ -588,12 +588,18 @@ public class ActionHandler { public void userMenu(UUID internal_uuid) throws IOException { while (true) { - if (Session.forceRefreshChatList) { - System.out.println("🔁 Refresh triggered by real-time event."); - requestChatList(); // با sendWithResponse جواب می‌گیری - Session.forceRefreshChatList = false; + + if (Session.backToChatList) { + Session.backToChatList = false; + return; } +// if (Session.forceRefreshChatList) { +// System.out.println("🔁 Refresh triggered by real-time event."); +// requestChatList(); // با sendWithResponse جواب می‌گیری +// Session.forceRefreshChatList = false; +// } + System.out.println("\nUser Menu:"); @@ -606,7 +612,11 @@ public class ActionHandler { String choice = scanner.nextLine(); switch (choice) { - case "1" -> showChatListAndSelect(); + case "1" -> { + Session.inChatListMenu = true; + showChatListAndSelect(); + Session.inChatListMenu = false; + } case "2" -> search(); case "3" -> createChannel(); case "4" -> createGroup(); @@ -2062,7 +2072,7 @@ public class ActionHandler { } - public void requestChatList() { + public static void requestChatList() { JSONObject req = new JSONObject(); req.put("action", "get_chat_list"); req.put("user_id", Session.getUserUUID()); @@ -2127,7 +2137,43 @@ public class ActionHandler { } } + public static class ChatStateMonitor implements Runnable { + private final PrintWriter out; + public ChatStateMonitor(PrintWriter out) { + this.out = out; + } + + @Override + public void run() { + while (true) { + try { + if (forceExitChat) { + System.out.println("🚪 You were removed from the chat. Returning to chat list..."); + forceExitChat = false; + Session.backToChatList = true; + } + + if (Session.forceRefreshChatList) { + Session.forceRefreshChatList = false; + System.out.println("🔁 Refresh triggered by real-time event."); + ActionHandler.requestChatList(); + if (Session.inChatListMenu) { + System.out.println("\n📬 Updated Chat List:"); + ActionHandler.displayChatList(); // این متدی باشه که چت‌ها رو نمایش بده + System.out.print("Select a chat by number: "); + } + } + + Thread.sleep(300); // جلوگیری از مصرف بی‌مورد CPU + } catch (Exception e) { + System.out.println("❌ ChatStateMonitor crashed: " + e.getMessage()); + } + } + } + } } + + diff --git a/src/main/java/org/to/telegramfinalproject/Client/Session.java b/src/main/java/org/to/telegramfinalproject/Client/Session.java index bcd741c..590a4a5 100644 --- a/src/main/java/org/to/telegramfinalproject/Client/Session.java +++ b/src/main/java/org/to/telegramfinalproject/Client/Session.java @@ -14,6 +14,10 @@ public class Session { public static JSONObject currentUser; public static List chatList = new ArrayList<>(); public static volatile boolean forceRefreshChatList = false; + public static volatile boolean backToChatList = false; + public static boolean inChatListMenu = false; + + public static String getUserUUID() { diff --git a/src/main/java/org/to/telegramfinalproject/Client/TelegramClient.java b/src/main/java/org/to/telegramfinalproject/Client/TelegramClient.java index c294739..d74c5bc 100644 --- a/src/main/java/org/to/telegramfinalproject/Client/TelegramClient.java +++ b/src/main/java/org/to/telegramfinalproject/Client/TelegramClient.java @@ -72,6 +72,7 @@ public class TelegramClient { handler.loginHandler(); if (Session.currentUser != null) { System.out.println("✅ Login successful."); + new Thread(new ActionHandler.ChatStateMonitor(out)).start(); UUID internalId = UUID.fromString(Session.currentUser.getString("internal_uuid")); loggedInUserId = internalId;