diff --git a/src/main/java/com/zhanganzhi/chathub/ChatHub.java b/src/main/java/com/zhanganzhi/chathub/ChatHub.java index 5fba64a..fe03b75 100644 --- a/src/main/java/com/zhanganzhi/chathub/ChatHub.java +++ b/src/main/java/com/zhanganzhi/chathub/ChatHub.java @@ -1,5 +1,6 @@ package com.zhanganzhi.chathub; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.inject.Inject; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; @@ -14,6 +15,8 @@ import org.slf4j.Logger; import java.nio.file.Path; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; @Plugin( id = "chathub", @@ -32,6 +35,8 @@ public class ChatHub { private final Logger logger; private final Path dataDirectory; @Getter + private ThreadPoolExecutor threadPoolExecutor; + @Getter private EventHub eventHub; @Inject @@ -44,7 +49,8 @@ public ChatHub(ProxyServer proxyServer, Logger logger, @DataDirectory Path dataD @Subscribe public void onInitialize(ProxyInitializeEvent event) { // core - Config.getInstance().loadConfig(dataDirectory); + Config config = Config.getInstance(); + config.loadConfig(dataDirectory); eventHub = new EventHub(this); // command @@ -53,6 +59,12 @@ public void onInitialize(ProxyInitializeEvent event) { new VelocityCommand(this) ); + // thread pool + threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool( + config.getCoreThreadPoolSize(), + new ThreadFactoryBuilder().setNameFormat("chathub-tasks-%d").build() + ); + // init event hub new Thread(() -> eventHub.start(), "chathub-event-hub-start-event").start(); } diff --git a/src/main/java/com/zhanganzhi/chathub/core/config/Config.java b/src/main/java/com/zhanganzhi/chathub/core/config/Config.java index b9f7c46..436eb80 100644 --- a/src/main/java/com/zhanganzhi/chathub/core/config/Config.java +++ b/src/main/java/com/zhanganzhi/chathub/core/config/Config.java @@ -51,6 +51,10 @@ public void setIsKookEnabled(boolean isKookEnabled) { this.tempIsKookEnabled = isKookEnabled; } + public int getCoreThreadPoolSize() { + return configToml.getLong("core.threadPoolSize").intValue(); + } + public String getServername(String server) { String servername = configToml.getString("servername." + server); return servername != null ? servername : server; diff --git a/src/main/java/com/zhanganzhi/chathub/platforms/discord/DiscordAdaptor.java b/src/main/java/com/zhanganzhi/chathub/platforms/discord/DiscordAdaptor.java index 8dd0f04..ce97075 100644 --- a/src/main/java/com/zhanganzhi/chathub/platforms/discord/DiscordAdaptor.java +++ b/src/main/java/com/zhanganzhi/chathub/platforms/discord/DiscordAdaptor.java @@ -57,6 +57,6 @@ public void stop() { @Override public void sendPublicMessage(String message) { - new Thread(() -> channel.sendMessage(message).queue()).start(); + chatHub.getThreadPoolExecutor().submit(() -> channel.sendMessage(message).queue()); } } diff --git a/src/main/java/com/zhanganzhi/chathub/platforms/kook/KookAdaptor.java b/src/main/java/com/zhanganzhi/chathub/platforms/kook/KookAdaptor.java index 128cd56..c0d7df0 100644 --- a/src/main/java/com/zhanganzhi/chathub/platforms/kook/KookAdaptor.java +++ b/src/main/java/com/zhanganzhi/chathub/platforms/kook/KookAdaptor.java @@ -37,6 +37,6 @@ public void restart() { @Override public void sendPublicMessage(String message) { - new Thread(() -> kookAPI.sendMessage(message)).start(); + chatHub.getThreadPoolExecutor().submit(() -> kookAPI.sendMessage(message)); } } diff --git a/src/main/java/com/zhanganzhi/chathub/platforms/qq/QQAdaptor.java b/src/main/java/com/zhanganzhi/chathub/platforms/qq/QQAdaptor.java index 8d01733..82c443f 100644 --- a/src/main/java/com/zhanganzhi/chathub/platforms/qq/QQAdaptor.java +++ b/src/main/java/com/zhanganzhi/chathub/platforms/qq/QQAdaptor.java @@ -46,7 +46,7 @@ public void stop() { @Override public void sendPublicMessage(String message) { - new Thread(() -> qqAPI.sendMessage(message, config.getQQGroupId())).start(); + chatHub.getThreadPoolExecutor().submit(() -> qqAPI.sendMessage(message, config.getQQGroupId())); } public void eventListener() { diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml index 31128fe..ce7aa36 100644 --- a/src/main/resources/config.toml +++ b/src/main/resources/config.toml @@ -1,3 +1,6 @@ +[core] +threadPoolSize = 4 + [servername] lobby = '§f§l大厅服' survival = '§2§l生存服'