diff --git a/src/main/java/net/lamgc/cgj/Main.java b/src/main/java/net/lamgc/cgj/Main.java index 37fb3f2..b9084ea 100644 --- a/src/main/java/net/lamgc/cgj/Main.java +++ b/src/main/java/net/lamgc/cgj/Main.java @@ -26,7 +26,6 @@ import org.apache.http.util.EntityUtils; import org.apache.tomcat.util.http.fileupload.util.Streams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.boot.autoconfigure.SpringBootApplication; import java.io.*; import java.nio.charset.StandardCharsets; @@ -36,7 +35,6 @@ import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -@SpringBootApplication public class Main { private final static Logger log = LoggerFactory.getLogger(Main.class); @@ -91,17 +89,29 @@ public class Main { @Command public static void botMode(@Argument(name = "args", force = false) String argsStr) { - FrameworkManager.registerFramework(new MiraiMain()); + try { + FrameworkManager.registerFramework(new MiraiMain()).join(); + } catch (InterruptedException ignored) { + + } } @Command public static void consoleMode() { - FrameworkManager.registerFramework(new ConsoleMain()); + try { + FrameworkManager.registerFramework(new ConsoleMain()).join(); + } catch (InterruptedException ignored) { + + } } @Command public static void pluginMode(@Argument(name = "args", force = false) String argsStr) { - FrameworkManager.registerFramework(new SpringCQApplication()); + try { + FrameworkManager.registerFramework(new SpringCQApplication()).join(); + } catch (InterruptedException ignored) { + + } } @Command diff --git a/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java b/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java index 8b8767a..d090279 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java @@ -19,26 +19,30 @@ public final class FrameworkManager { .addShutdownHook(new Thread(FrameworkManager::shutdownAllFramework, "FrameworkManager-Shutdown")); } - public static void registerFramework(Framework framework) { + public static Thread registerFramework(Framework framework) { FrameworkResources resources = new FrameworkResources(framework); resourcesMap.put(framework, resources); - new Thread(resources.getFrameworkThreadGroup(), - () -> FrameworkManager.runFramework(framework), "FrameworkThread-" + framework.getName()).start(); + Thread frameworkThread = new Thread(resources.getFrameworkThreadGroup(), + () -> FrameworkManager.runFramework(framework), "FrameworkThread-" + framework.getName()); + + frameworkThread.start(); + return frameworkThread; } public static void shutdownAllFramework() { for (Framework framework : resourcesMap.keySet()) { - Logger frameworkLogger = resourcesMap.get(framework).getLogger(); + FrameworkResources frameworkResources = resourcesMap.get(framework); + Logger frameworkLogger = frameworkResources.getLogger(); try { frameworkLogger.info("正在关闭框架..."); framework.close(); frameworkLogger.info("框架已关闭."); + frameworkResources.getFrameworkThreadGroup().interrupt(); resourcesMap.remove(framework); } catch(Throwable e) { frameworkLogger.error("退出框架时发生异常", e); } } - frameworkRootGroup.interrupt(); } private static void runFramework(Framework framework) { diff --git a/src/main/java/net/lamgc/cgj/bot/framework/coolq/SpringCQApplication.java b/src/main/java/net/lamgc/cgj/bot/framework/coolq/SpringCQApplication.java index 83bba36..0bb581c 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/coolq/SpringCQApplication.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/coolq/SpringCQApplication.java @@ -1,17 +1,18 @@ package net.lamgc.cgj.bot.framework.coolq; -import net.lamgc.cgj.Main; import net.lamgc.cgj.bot.boot.BotGlobal; import net.lamgc.cgj.bot.framework.Framework; import net.lamgc.cgj.bot.framework.FrameworkManager; import org.slf4j.Logger; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationFailedEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextStoppedEvent; +@SpringBootApplication public class SpringCQApplication implements Framework { private Logger log; @@ -25,7 +26,7 @@ public class SpringCQApplication implements Framework { public void run() { log.info("酷Q机器人根目录: {}", BotGlobal.getGlobal().getDataStoreDir().getPath()); - ConfigurableApplicationContext context = SpringApplication.run(Main.class); + ConfigurableApplicationContext context = SpringApplication.run(SpringCQApplication.class); registerShutdownHook(context); try { synchronized (quitLock) {