perf: 优化代码

This commit is contained in:
2022-12-07 19:30:47 +08:00
parent afbe103909
commit 84696bc408
10 changed files with 96 additions and 26 deletions

View File

@@ -39,11 +39,11 @@ subprojects {
withSourcesJar()
}
tasks.withType(JavaCompile) {
tasks.withType(JavaCompile).configureEach {
options.setEncoding("UTF-8")
}
tasks.withType(Jar) {
tasks.withType(Jar).configureEach {
from([rootProject.file("LICENSE")])
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
}
@@ -77,8 +77,8 @@ subprojects {
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username rootProject.properties.getOrDefault("maven_username", "")
password rootProject.properties.getOrDefault("maven_password", "")
username = rootProject.properties.getOrDefault("maven_username", "")
password = rootProject.properties.getOrDefault("maven_password", "")
}
}
}

View File

@@ -20,7 +20,7 @@ processResources {
}
tasks.compileJava.dependsOn(":hamster-ball-common:build")
tasks.create("shadowJar", Jar) {
tasks.register("shadowJar", Jar) {
dependsOn("jar")
from([
tasks.jar.outputs.files.collect {

View File

@@ -19,8 +19,8 @@ server-info:
# 当前子服的内网地址
# 不填则自动获取 server.properties 文件中的设置
# 若都为空,则自动设定为 127.0.0.1
# 连接上 HamsterBall 之后,BC 端的插件会自动将这个服务器的地址和端口加入到列表
# 因此只需在这里填上无需每次都手动更改 BC 的配置文件
# BC 端的插件会自动将这个服务器的地址和端口加入到列表
# 因此只需在这里配置好,以后新增子服时无需每次都手动更改 BC 的配置文件
# host: "127.0.0.1"
# 当前子服的内网端口
# 不填则自动获取 server.properties 文件中的设置

View File

@@ -19,7 +19,7 @@ processResources {
}
tasks.compileJava.dependsOn(":hamster-ball-common:build")
tasks.create("shadowJar", Jar) {
tasks.register("shadowJar", Jar) {
dependsOn("jar")
from([
tasks.jar.outputs.files.collect {

View File

@@ -6,6 +6,7 @@ import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo;
import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
import cn.hamster3.mc.plugin.core.bungee.api.BallBungeeCordAPI;
import cn.hamster3.mc.plugin.core.bungee.core.BallConfigManager;
import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener;
import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils;
import net.md_5.bungee.api.ProxyServer;
@@ -24,6 +25,8 @@ public class HamsterBallPlugin extends Plugin {
public void onLoad() {
instance = this;
Logger logger = getLogger();
BallConfigManager.init();
logger.info("BallConfigManager 已初始化.");
BallBungeeCordAPI.init();
logger.info("BallBungeeCordAPI 已初始化.");
try {
@@ -40,12 +43,15 @@ public class HamsterBallPlugin extends Plugin {
Logger logger = getLogger();
ProxyServer.getInstance().getPluginManager().registerListener(this, BallBungeeCordListener.INSTANCE);
logger.info("已注册 BallBungeeCordListener.");
for (BallServerInfo serverInfo : BallAPI.getInstance().getAllServerInfo().values()) {
if (serverInfo.getType() != BallServerType.GAME) {
continue;
if (BallConfigManager.isAutoRegisterServer()) {
ProxyServer.getInstance().getServers().clear();
for (BallServerInfo serverInfo : BallAPI.getInstance().getAllServerInfo().values()) {
if (serverInfo.getType() != BallServerType.GAME) {
continue;
}
ProxyServer.getInstance().getServers().put(serverInfo.getId(), BallBungeeCordUtils.getServerInfo(serverInfo));
HamsterBallPlugin.getInstance().getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置.");
}
ProxyServer.getInstance().getServers().put(serverInfo.getId(), BallBungeeCordUtils.getServerInfo(serverInfo));
HamsterBallPlugin.getInstance().getLogger().info("已添加子服 " + serverInfo.getId() + " 的接入点配置.");
}
BallAPI.getInstance().sendBallMessage(
BallAPI.BALL_CHANNEL,

View File

@@ -6,8 +6,8 @@ import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo;
import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
import cn.hamster3.mc.plugin.ball.common.listener.BallDebugListener;
import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin;
import cn.hamster3.mc.plugin.core.bungee.core.BallConfigManager;
import cn.hamster3.mc.plugin.core.bungee.listener.BallBungeeCordListener;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeCordUtils;
import net.md_5.bungee.config.Configuration;
import org.jetbrains.annotations.NotNull;
@@ -27,8 +27,7 @@ public class BallBungeeCordAPI extends BallAPI {
if (instance != null) {
return;
}
HamsterBallPlugin plugin = HamsterBallPlugin.getInstance();
Configuration pluginConfig = BungeeCordUtils.getPluginConfig(plugin);
Configuration pluginConfig = BallConfigManager.getPluginConfig();
BallConfig config = new BallConfig(
new BallServerInfo(
pluginConfig.getString("server-info.id"),

View File

@@ -0,0 +1,27 @@
package cn.hamster3.mc.plugin.core.bungee.core;
import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin;
import cn.hamster3.mc.plugin.core.bungee.util.BungeeCordUtils;
import net.md_5.bungee.config.Configuration;
public final class BallConfigManager {
private static Configuration pluginConfig;
private static boolean autoRegisterServer;
private BallConfigManager() {
}
public static void init() {
HamsterBallPlugin plugin = HamsterBallPlugin.getInstance();
pluginConfig = BungeeCordUtils.getPluginConfig(plugin);
autoRegisterServer = pluginConfig.getBoolean("auto-register-server", true);
}
public static Configuration getPluginConfig() {
return pluginConfig;
}
public static boolean isAutoRegisterServer() {
return autoRegisterServer;
}
}

View File

@@ -11,6 +11,7 @@ import cn.hamster3.mc.plugin.ball.common.event.server.ServerOfflineEvent;
import cn.hamster3.mc.plugin.ball.common.event.server.ServerOnlineEvent;
import cn.hamster3.mc.plugin.ball.common.listener.BallListener;
import cn.hamster3.mc.plugin.core.bungee.HamsterBallPlugin;
import cn.hamster3.mc.plugin.core.bungee.core.BallConfigManager;
import cn.hamster3.mc.plugin.core.bungee.util.BallBungeeCordUtils;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects;
@@ -102,6 +103,9 @@ public final class BallBungeeCordListener extends BallListener implements Listen
@Override
public void onServerOnline(@NotNull ServerOnlineEvent event) {
if (!BallConfigManager.isAutoRegisterServer()) {
return;
}
BallServerInfo serverInfo = event.getServerInfo();
if (serverInfo.getType() != BallServerType.GAME) {
return;
@@ -112,6 +116,9 @@ public final class BallBungeeCordListener extends BallListener implements Listen
@Override
public void onServerOffline(@NotNull ServerOfflineEvent event) {
if (!BallConfigManager.isAutoRegisterServer()) {
return;
}
Map<String, ServerInfo> map = ProxyServer.getInstance().getServers();
if (map.remove(event.getServerID()) != null) {
HamsterBallPlugin.getInstance().getLogger().info("已移除子服 " + event.getServerID() + " 的接入点配置.");

View File

@@ -13,3 +13,9 @@ server-info:
name: "代理端"
host: 0.0.0.0
port: 25577
# 是否允许 HamsterBall 自动添加子服接入点配置
# 开启该功能后,插件启动时将会自动清除 BC 中配置的所有子服信息
# 并从数据库中读取子服的数据,然后自动填充
# 使用的链接地址取决于子服 HamsterBall 配置文件中的 server-info 信息
auto-register-server: true

View File

@@ -95,16 +95,32 @@ public abstract class BallAPI {
playerInfo.put(info.getUuid(), info);
}
@Override
public void onServerOffline(@NotNull ServerOfflineEvent event) {
String serverID = event.getServerID();
serverInfo.remove(serverID);
}
@Override
public void onServerOnline(@NotNull ServerOnlineEvent event) {
BallServerInfo info = event.getServerInfo();
serverInfo.put(info.getId(), info);
playerInfo.forEachValue(1, playerInfo -> {
if (playerInfo.getGameServer().equals(info.getId())) {
playerInfo.setOnline(false);
}
if (playerInfo.getProxyServer().equals(info.getId())) {
playerInfo.setOnline(false);
}
});
}
@Override
public void onServerOffline(@NotNull ServerOfflineEvent event) {
String serverID = event.getServerID();
serverInfo.remove(serverID);
playerInfo.forEachValue(1, playerInfo -> {
if (playerInfo.getGameServer().equals(serverID)) {
playerInfo.setOnline(false);
}
if (playerInfo.getProxyServer().equals(serverID)) {
playerInfo.setOnline(false);
}
});
}
});
}
@@ -255,10 +271,19 @@ public abstract class BallAPI {
sendBallMessage(new BallMessageInfo(BALL_CHANNEL, ServerOfflineEvent.ACTION, new ServerOfflineEvent(getLocalServerId())), true);
try (Connection connection = CoreAPI.getInstance().getConnection()) {
PreparedStatement statement = connection.prepareStatement("DELETE FROM `hamster_ball_server_info` WHERE `id`=?;");
statement.setString(1, getLocalServerId());
statement.executeUpdate();
statement.close();
try (PreparedStatement statement = connection.prepareStatement(
"DELETE FROM `hamster_ball_server_info` WHERE `id`=?;"
)) {
statement.setString(1, getLocalServerId());
statement.executeUpdate();
}
try (PreparedStatement statement = connection.prepareStatement(
"UPDATE `hamster_ball_player_info` SET `online`=false WHERE `game_server`=? OR `proxy_server`=?"
)) {
statement.setString(1, getLocalServerId());
statement.setString(2, getLocalServerId());
statement.executeUpdate();
}
}
channel = null;