diff --git a/src/main/java/net/lamgc/cgj/Main.java b/src/main/java/net/lamgc/cgj/Main.java index 580ecdc..37fb3f2 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.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.io.*; @@ -34,8 +33,6 @@ import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -104,7 +101,7 @@ public class Main { @Command public static void pluginMode(@Argument(name = "args", force = false) String argsStr) { - new SpringCQApplication().start(argsStr); + FrameworkManager.registerFramework(new SpringCQApplication()); } @Command diff --git a/src/main/java/net/lamgc/cgj/bot/framework/Framework.java b/src/main/java/net/lamgc/cgj/bot/framework/Framework.java index 9afc9d3..38d8fea 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/Framework.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/Framework.java @@ -27,6 +27,6 @@ public interface Framework { * @return 返回标识名 */ default String getName() { - return this.toString(); + return this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode()); } } 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 0e4ae0b..83bba36 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,10 +1,10 @@ package net.lamgc.cgj.bot.framework.coolq; -import com.google.common.base.Strings; 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.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.event.ApplicationFailedEvent; import org.springframework.context.ApplicationListener; @@ -12,27 +12,20 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextStoppedEvent; -import java.util.ArrayList; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +public class SpringCQApplication implements Framework { -public class SpringCQApplication { - - private final static Logger log = LoggerFactory.getLogger(SpringCQApplication.class); + private Logger log; private final Object quitLock = new Object(); - public void start(String argsStr) { + @Override + public void init(FrameworkManager.FrameworkResources resources) { + this.log = resources.getLogger(); + } + + public void run() { log.info("酷Q机器人根目录: {}", BotGlobal.getGlobal().getDataStoreDir().getPath()); - Pattern pattern = Pattern.compile("/\\s*(\".+?\"|[^:\\s])+((\\s*:\\s*(\".+?\"|[^\\s])+)|)|(\".+?\"|[^\"\\s])+"); - Matcher matcher = pattern.matcher(Strings.nullToEmpty(argsStr)); - ArrayList argsList = new ArrayList<>(); - while (matcher.find()) { - argsList.add(matcher.group()); - } - String[] args = new String[argsList.size()]; - argsList.toArray(args); - ConfigurableApplicationContext context = SpringApplication.run(Main.class, args); + ConfigurableApplicationContext context = SpringApplication.run(Main.class); registerShutdownHook(context); try { synchronized (quitLock) { @@ -41,19 +34,22 @@ public class SpringCQApplication { } catch (InterruptedException e) { log.warn("发生中断, 退出SpringCQ...", e); } + + context.stop(); + context.close(); } private void registerShutdownHook(ConfigurableApplicationContext context) { context.addApplicationListener((ApplicationListener) - event -> notifyThread()); + event -> close()); context.addApplicationListener((ApplicationListener) - event -> notifyThread()); + event -> close()); context.addApplicationListener((ApplicationListener) - event -> notifyThread()); - Runtime.getRuntime().addShutdownHook(new Thread(this::notifyThread)); + event -> close()); + Runtime.getRuntime().addShutdownHook(new Thread(this::close)); } - private void notifyThread() { + public void close() { synchronized (quitLock) { quitLock.notify(); }