From 6fc7d8ad783b7f3ca7db54cc84a5ee135d81f3d0 Mon Sep 17 00:00:00 2001 From: LamGC Date: Wed, 15 Jul 2020 10:57:30 +0800 Subject: [PATCH] =?UTF-8?q?[Change]=20=E8=B0=83=E6=95=B4Framework=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3,=20=E4=B8=BA=E6=A1=86=E6=9E=B6=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E7=89=B9=E5=AE=9A=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=E7=9B=AE?= =?UTF-8?q?=E5=BD=95;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Change] Framework 适配FrameworkResources的更改, 将`getName`调整为`getIdentify`, 增加`getFrameworkName`方法用于获取框架名(可能会改为注解方式以防止更改); [Change] FrameworkManager 适配Framework的更改, 增加`checkFramework`方法以对FrameworkName进行检查; [Change] FrameworkManager, FrameworkResources 将FrameworkResources从FrameworkManager分离成单独的类; [Change] ConsoleMain, MiraiMain, SpringCQApplication 适配相关更改; --- .../lamgc/cgj/bot/framework/Framework.java | 19 ++++++--- .../cgj/bot/framework/FrameworkManager.java | 41 +++++++------------ .../cgj/bot/framework/FrameworkResources.java | 35 ++++++++++++++++ .../cgj/bot/framework/cli/ConsoleMain.java | 10 ++++- .../framework/coolq/SpringCQApplication.java | 9 +++- .../cgj/bot/framework/mirai/MiraiMain.java | 9 +++- 6 files changed, 86 insertions(+), 37 deletions(-) create mode 100644 src/main/java/net/lamgc/cgj/bot/framework/FrameworkResources.java 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 38d8fea..f856a90 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/Framework.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/Framework.java @@ -6,9 +6,9 @@ public interface Framework { * 框架初始化方法 * @param resources 框架所分配到的资源. * @throws Exception 当框架抛出异常时, 将不会继续运行框架. - * @see FrameworkManager.FrameworkResources + * @see FrameworkResources */ - void init(FrameworkManager.FrameworkResources resources) throws Exception; + void init(FrameworkResources resources) throws Exception; /** * 框架运行方法 @@ -23,10 +23,19 @@ public interface Framework { void close() throws Exception; /** - * 获取框架标识名 - * @return 返回标识名 + * 获取框架标识名. + *

可根据需要自行调整框架标识名.

+ * @return 返回标识名. */ - default String getName() { + default String getIdentify() { return this.getClass().getSimpleName() + "@" + Integer.toHexString(this.hashCode()); } + + /** + * 获取框架名称. + *

框架名称不可更改.

+ * @return 返回框架名称. + */ + String getFrameworkName(); + } 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 2c18d00..3c95f21 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/FrameworkManager.java @@ -1,12 +1,9 @@ package net.lamgc.cgj.bot.framework; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.regex.Pattern; public final class FrameworkManager { @@ -22,15 +19,23 @@ public final class FrameworkManager { } public static Thread registerFramework(Framework framework) { + checkFramework(framework); FrameworkResources resources = new FrameworkResources(framework); resourcesMap.put(framework, resources); Thread frameworkThread = new Thread(resources.getFrameworkThreadGroup(), - () -> FrameworkManager.runFramework(framework), "FrameworkThread-" + framework.getName()); + () -> FrameworkManager.runFramework(framework), "FrameworkThread-" + framework.getIdentify()); frameworkThread.start(); return frameworkThread; } + private static final Pattern FRAMEWORK_NAME_CHECK_PATTERN = Pattern.compile("^[A-Za-z0-9_\\-$]+$"); + private static void checkFramework(Framework framework) { + if(!FRAMEWORK_NAME_CHECK_PATTERN.matcher(framework.getFrameworkName()).matches()) { + throw new IllegalStateException("Invalid Framework Name: " + framework.getFrameworkName()); + } + } + public static Set frameworkSet() { return new HashSet<>(resourcesMap.keySet()); } @@ -51,6 +56,10 @@ public final class FrameworkManager { } } + static ThreadGroup getFrameworkRootGroup() { + return frameworkRootGroup; + } + private static void runFramework(Framework framework) { FrameworkResources frameworkResources = resourcesMap.get(framework); try { @@ -63,24 +72,4 @@ public final class FrameworkManager { } } - public static class FrameworkResources { - - private final ThreadGroup frameworkThreadGroup; - - private final Logger logger; - - public FrameworkResources(Framework framework) { - frameworkThreadGroup = new ThreadGroup(frameworkRootGroup, "Framework-" + framework.getName()); - logger = LoggerFactory.getLogger("Framework-" + framework.getName()); - } - - ThreadGroup getFrameworkThreadGroup() { - return frameworkThreadGroup; - } - - public Logger getLogger() { - return logger; - } - } - } diff --git a/src/main/java/net/lamgc/cgj/bot/framework/FrameworkResources.java b/src/main/java/net/lamgc/cgj/bot/framework/FrameworkResources.java new file mode 100644 index 0000000..4abe9d0 --- /dev/null +++ b/src/main/java/net/lamgc/cgj/bot/framework/FrameworkResources.java @@ -0,0 +1,35 @@ +package net.lamgc.cgj.bot.framework; + +import net.lamgc.cgj.bot.boot.BotGlobal; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; + +public class FrameworkResources { + + private final static File frameworkDataStoreRootDir = new File(BotGlobal.getGlobal().getDataStoreDir(), + "frameworks/"); + + private final ThreadGroup frameworkThreadGroup; + + private final Logger logger; + + private final File frameworkDataStoreDir; + + public FrameworkResources(Framework framework) { + frameworkThreadGroup = new ThreadGroup(FrameworkManager.getFrameworkRootGroup(), + "Framework-" + framework.getIdentify()); + frameworkDataStoreDir = new File(frameworkDataStoreRootDir, framework.getClass().getSimpleName()); + logger = LoggerFactory.getLogger("Framework-" + framework.getIdentify()); + } + + ThreadGroup getFrameworkThreadGroup() { + return frameworkThreadGroup; + } + + public Logger getLogger() { + return logger; + } + +} diff --git a/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java b/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java index f9f4a5d..25aec51 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/cli/ConsoleMain.java @@ -4,6 +4,7 @@ import net.lamgc.cgj.bot.boot.ApplicationBoot; import net.lamgc.cgj.bot.event.BotEventHandler; import net.lamgc.cgj.bot.framework.Framework; import net.lamgc.cgj.bot.framework.FrameworkManager; +import net.lamgc.cgj.bot.framework.FrameworkResources; import net.lamgc.cgj.bot.framework.cli.message.ConsoleMessageEvent; import net.lamgc.cgj.bot.framework.cli.message.ConsoleMessageSenderFactory; import net.lamgc.cgj.bot.message.MessageSenderBuilder; @@ -22,7 +23,7 @@ public class ConsoleMain implements Framework { private final AtomicBoolean quitState = new AtomicBoolean(); @Override - public void init(FrameworkManager.FrameworkResources resources) { } + public void init(FrameworkResources resources) { } @Override public void run() throws Exception { @@ -62,7 +63,12 @@ public class ConsoleMain implements Framework { } @Override - public String getName() { + public String getIdentify() { return this.toString(); } + + @Override + public String getFrameworkName() { + return "console"; + } } 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 0bb581c..08932a1 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 @@ -2,7 +2,7 @@ package net.lamgc.cgj.bot.framework.coolq; import net.lamgc.cgj.bot.boot.BotGlobal; import net.lamgc.cgj.bot.framework.Framework; -import net.lamgc.cgj.bot.framework.FrameworkManager; +import net.lamgc.cgj.bot.framework.FrameworkResources; import org.slf4j.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -20,7 +20,7 @@ public class SpringCQApplication implements Framework { private final Object quitLock = new Object(); @Override - public void init(FrameworkManager.FrameworkResources resources) { + public void init(FrameworkResources resources) { this.log = resources.getLogger(); } @@ -56,4 +56,9 @@ public class SpringCQApplication implements Framework { } } + @Override + public String getFrameworkName() { + return "SpringCoolQ"; + } + } diff --git a/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java b/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java index 3834ba3..8cb8bd1 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java @@ -4,7 +4,7 @@ import net.lamgc.cgj.bot.boot.ApplicationBoot; import net.lamgc.cgj.bot.boot.BotGlobal; import net.lamgc.cgj.bot.event.BotEventHandler; import net.lamgc.cgj.bot.framework.Framework; -import net.lamgc.cgj.bot.framework.FrameworkManager; +import net.lamgc.cgj.bot.framework.FrameworkResources; import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageEvent; import net.lamgc.cgj.bot.framework.mirai.message.MiraiMessageSenderFactory; import net.lamgc.cgj.bot.message.MessageSenderBuilder; @@ -35,7 +35,7 @@ public class MiraiMain implements Framework { private final static Properties botProperties = new Properties(); @Override - public void init(FrameworkManager.FrameworkResources resources) { + public void init(FrameworkResources resources) { Runtime.getRuntime().addShutdownHook(new Thread(this::close)); try { Class.forName(BotEventHandler.class.getName()); @@ -122,4 +122,9 @@ public class MiraiMain implements Framework { log.warn("机器人已关闭."); } + @Override + public String getFrameworkName() { + return "MiraiQQ"; + } + }