From bd7ec574fbfa1d2db3469312748a886a900b2699 Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Sun, 21 Dec 2025 17:28:37 +0800 Subject: [PATCH] shutdown logic --- .../com/xujiayao/discord_mc_chat/DMCC.java | 19 +++++++---------- .../discord_mc_chat/client/ClientDMCC.java | 15 ++++++++----- .../discord_mc_chat/server/NettyServer.java | 1 + .../discord_mc_chat/server/ServerDMCC.java | 21 +++++++++---------- .../server/discord/DiscordManager.java | 16 +++++++++----- core/src/main/resources/lang/en_us.yml | 3 ++- core/src/main/resources/lang/zh_cn.yml | 3 ++- 7 files changed, 44 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java index 0d89b4c1..0bb0fb95 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java @@ -159,20 +159,17 @@ public class DMCC { EventManager.clear(); // Shutdown OkHttpClient - try (ExecutorService executorService = OK_HTTP_CLIENT.dispatcher().executorService(); + try (ExecutorService executor = OK_HTTP_CLIENT.dispatcher().executorService(); Cache ignored1 = OK_HTTP_CLIENT.cache()) { - executorService.shutdown(); - try { - if (ConfigManager.getBoolean("shutdown.graceful_shutdown")) { - // Allow up to 10 minutes for ongoing requests to complete - boolean ignored2 = executorService.awaitTermination(10, TimeUnit.MINUTES); - } - } catch (NullPointerException ignored) { - } finally { + executor.shutdown(); + if (ConfigManager.getBoolean("shutdown.graceful_shutdown")) { + // Allow up to 10 minutes for ongoing requests to complete + boolean ignored2 = executor.awaitTermination(10, TimeUnit.MINUTES); + } else { // Allow up to 5 seconds for ongoing requests to complete - boolean ignored2 = executorService.awaitTermination(5, TimeUnit.SECONDS); + boolean ignored2 = executor.awaitTermination(5, TimeUnit.SECONDS); } - executorService.shutdownNow(); + executor.shutdownNow(); OK_HTTP_CLIENT.connectionPool().evictAll(); } catch (Exception e) { diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientDMCC.java b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientDMCC.java index 45b4ecd5..e030599f 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientDMCC.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientDMCC.java @@ -1,5 +1,7 @@ package com.xujiayao.discord_mc_chat.client; +import com.xujiayao.discord_mc_chat.utils.config.ConfigManager; + import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -43,13 +45,16 @@ public class ClientDMCC { executor.shutdown(); try { - if (!executor.awaitTermination(5, TimeUnit.SECONDS)) { - executor.shutdownNow(); + if (ConfigManager.getBoolean("shutdown.graceful_shutdown")) { + // Allow up to 10 minutes for ongoing requests to complete + boolean ignored = executor.awaitTermination(10, TimeUnit.MINUTES); + } else { + // Allow up to 5 seconds for ongoing requests to complete + boolean ignored = executor.awaitTermination(5, TimeUnit.SECONDS); } - } catch (InterruptedException e) { - executor.shutdownNow(); - Thread.currentThread().interrupt(); + } catch (Exception ignored) { } + executor.shutdownNow(); LOGGER.info("DMCC Client component shut down."); } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java index 85ec5718..7c3c0a41 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java @@ -16,6 +16,7 @@ public class NettyServer { } public int start() { + // The bound port would be returned here after starting the server. return -1; } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerDMCC.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerDMCC.java index 759720c6..7a55f0e5 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerDMCC.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerDMCC.java @@ -1,6 +1,7 @@ package com.xujiayao.discord_mc_chat.server; import com.xujiayao.discord_mc_chat.server.discord.DiscordManager; +import com.xujiayao.discord_mc_chat.utils.config.ConfigManager; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -69,22 +70,20 @@ public class ServerDMCC { nettyServer.stop(); } - try { - DiscordManager.shutdown(); - } catch (InterruptedException e) { - LOGGER.error("Discord manager shutdown was interrupted.", e); - Thread.currentThread().interrupt(); - } + DiscordManager.shutdown(); executor.shutdown(); try { - if (!executor.awaitTermination(5, TimeUnit.SECONDS)) { - executor.shutdownNow(); + if (ConfigManager.getBoolean("shutdown.graceful_shutdown")) { + // Allow up to 10 minutes for ongoing requests to complete + boolean ignored = executor.awaitTermination(10, TimeUnit.MINUTES); + } else { + // Allow up to 5 seconds for ongoing requests to complete + boolean ignored = executor.awaitTermination(5, TimeUnit.SECONDS); } - } catch (InterruptedException e) { - executor.shutdownNow(); - Thread.currentThread().interrupt(); + } catch (Exception ignored) { } + executor.shutdownNow(); LOGGER.info("DMCC Server component shut down."); } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java index bb4d028c..217dc5ae 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/discord/DiscordManager.java @@ -7,6 +7,7 @@ import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.utils.MemberCachePolicy; import java.time.Duration; +import java.util.concurrent.TimeUnit; import static com.xujiayao.discord_mc_chat.Constants.LOGGER; @@ -55,15 +56,20 @@ public class DiscordManager { /** * Shuts down the Discord bot. */ - public static void shutdown() throws InterruptedException { + public static void shutdown() { if (jda != null) { jda.shutdown(); - - if (!jda.awaitShutdown(Duration.ofSeconds(5))) { - if (!ConfigManager.getBoolean("shutdown.graceful_shutdown")) { - jda.shutdownNow(); + try { + if (ConfigManager.getBoolean("shutdown.graceful_shutdown")) { + // Allow up to 10 minutes for ongoing requests to complete + boolean ignored = jda.awaitShutdown(Duration.ofMinutes(10)); + } else { + // Allow up to 5 seconds for ongoing requests to complete + boolean ignored = jda.awaitShutdown(Duration.ofSeconds(5)); } + } catch (Exception ignored) { } + jda.shutdownNow(); LOGGER.info("Discord bot shutdown successfully!"); } diff --git a/core/src/main/resources/lang/en_us.yml b/core/src/main/resources/lang/en_us.yml index 1e6976ed..a407e716 100644 --- a/core/src/main/resources/lang/en_us.yml +++ b/core/src/main/resources/lang/en_us.yml @@ -19,4 +19,5 @@ commands: failure: "DMCC reload failed. Reason: {}" shutdown: description: "Shut down the Standalone DMCC application" - shutting_down: "Shutting down the Standalone DMCC application... Goodbye!" + success: "DMCC shut down successfully. Goodbye!" + failure: "DMCC shutdown failed. Reason: {}" diff --git a/core/src/main/resources/lang/zh_cn.yml b/core/src/main/resources/lang/zh_cn.yml index ae80b1f3..90c501e3 100644 --- a/core/src/main/resources/lang/zh_cn.yml +++ b/core/src/main/resources/lang/zh_cn.yml @@ -19,4 +19,5 @@ commands: failure: "DMCC 重新加载失败。原因:{}" shutdown: description: "关闭独立 DMCC 应用程序" - shutting_down: "正在关闭独立 DMCC 应用程序... 再见!" + success: "DMCC 关闭成功。再见!" + failure: "DMCC 关闭失败。原因:{}"