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";
+ }
+
}