perf: 简化代码

This commit is contained in:
2024-03-17 02:02:13 +08:00
parent 134454f94f
commit 48d4e31dca
2 changed files with 49 additions and 25 deletions

View File

@@ -54,7 +54,7 @@ public abstract class BallAPI {
@NotNull @NotNull
private final DataSource datasource; private final DataSource datasource;
@NotNull @NotNull
private final BallServerInfo serverInfo; private final BallServerInfo localServerInfo;
@NotNull @NotNull
private final EventBus eventBus; private final EventBus eventBus;
@@ -74,7 +74,7 @@ public abstract class BallAPI {
if (serverInfoConfig == null) { if (serverInfoConfig == null) {
throw new IllegalArgumentException("配置文件中未找到 server-info 节点"); throw new IllegalArgumentException("配置文件中未找到 server-info 节点");
} }
serverInfo = new BallServerInfo(serverInfoConfig, type); localServerInfo = new BallServerInfo(serverInfoConfig, type);
ConfigSection section = config.getSection("datasource"); ConfigSection section = config.getSection("datasource");
if (section != null) { if (section != null) {
getLogger().info("启用仓鼠球自定义数据库连接池"); getLogger().info("启用仓鼠球自定义数据库连接池");
@@ -83,18 +83,13 @@ public abstract class BallAPI {
getLogger().info("复用 HamsterCore 的数据库连接池"); getLogger().info("复用 HamsterCore 的数据库连接池");
datasource = CoreAPI.getInstance().getDataSource(); datasource = CoreAPI.getInstance().getDataSource();
} }
ballConfig = new BallConfig( ballConfig = new BallConfig(config);
config.getBoolean("debug", false),
config.getString("channel-prefix", "") + ":",
config.getBoolean("game-server-update-player-info", false),
config.getStringList("load-player-info-filter")
);
redisSub = CoreAPI.getInstance().getJedisPool().getResource();
redisPub = CoreAPI.getInstance().getJedisPool().getResource();
allServerInfo = new ConcurrentHashMap<>();
allPlayerInfo = new ConcurrentHashMap<>();
eventBus = new AsyncEventBus("HamsterBall - EventBus", CoreAPI.getInstance().getExecutorService()); eventBus = new AsyncEventBus("HamsterBall - EventBus", CoreAPI.getInstance().getExecutorService());
eventBus.register(BallCommonListener.INSTANCE); eventBus.register(BallCommonListener.INSTANCE);
allServerInfo = new ConcurrentHashMap<>();
allPlayerInfo = new ConcurrentHashMap<>();
redisSub = CoreAPI.getInstance().getJedisPool().getResource();
redisPub = CoreAPI.getInstance().getJedisPool().getResource();
getLogger().info("频道前缀: " + ballConfig.getChannelPrefix()); getLogger().info("频道前缀: " + ballConfig.getChannelPrefix());
getLogger().info("启用子服更新玩家状态: " + ballConfig.isGameServerUpdatePlayerInfo()); getLogger().info("启用子服更新玩家状态: " + ballConfig.isGameServerUpdatePlayerInfo());
if (ballConfig.isGameServerUpdatePlayerInfo()) { if (ballConfig.isGameServerUpdatePlayerInfo()) {
@@ -107,8 +102,6 @@ public abstract class BallAPI {
} }
protected void enable() throws SQLException, InterruptedException { protected void enable() throws SQLException, InterruptedException {
BallServerInfo localInfo = getLocalServerInfo();
try (Connection connection = getDatasource().getConnection()) { try (Connection connection = getDatasource().getConnection()) {
try (Statement statement = connection.createStatement()) { try (Statement statement = connection.createStatement()) {
statement.execute("CREATE TABLE IF NOT EXISTS `hamster_ball_player_info`(" + statement.execute("CREATE TABLE IF NOT EXISTS `hamster_ball_player_info`(" +
@@ -133,11 +126,11 @@ public abstract class BallAPI {
try (PreparedStatement statement = connection.prepareStatement( try (PreparedStatement statement = connection.prepareStatement(
"REPLACE INTO `hamster_ball_server_info` VALUES(?, ?, ?, ?, ?);" "REPLACE INTO `hamster_ball_server_info` VALUES(?, ?, ?, ?, ?);"
)) { )) {
statement.setString(1, localInfo.getId()); statement.setString(1, localServerInfo.getId());
statement.setString(2, localInfo.getName()); statement.setString(2, localServerInfo.getName());
statement.setString(3, localInfo.getType().name()); statement.setString(3, localServerInfo.getType().name());
statement.setString(4, localInfo.getHost()); statement.setString(4, localServerInfo.getHost());
statement.setInt(5, localInfo.getPort()); statement.setInt(5, localServerInfo.getPort());
statement.executeUpdate(); statement.executeUpdate();
} }
try (PreparedStatement statement = connection.prepareStatement( try (PreparedStatement statement = connection.prepareStatement(
@@ -549,18 +542,40 @@ public abstract class BallAPI {
} }
/** /**
* 获取本地服务器ID * 取消订阅 redis 消息频道
* <p>
* 会自动加上 config 中设置的频道前缀
* *
* @return 服务器ID * @param channel 频道名称
*/ */
@NotNull public void unsubscribe(@NotNull String... channel) {
public BallServerInfo getLocalServerInfo() { for (int i = 0; i < channel.length; i++) {
return serverInfo; channel[i] = ballConfig.getChannelPrefix() + channel[i];
}
BallRedisListener.INSTANCE.unsubscribe(channel);
}
/**
* 忽略频道前缀配置,取消订阅 redis 消息频道
*
* @param channel 频道名称
*/
public void unsubscribeIgnorePrefix(@NotNull String... channel) {
BallRedisListener.INSTANCE.unsubscribe(channel);
}
/**
* 取消订阅 redis 消息频道(正则)
*
* @param patterns 频道名称正则表达式
*/
public void unsubscribePatterns(@NotNull String patterns) {
BallRedisListener.INSTANCE.punsubscribe(patterns);
} }
@NotNull @NotNull
public String getLocalServerId() { public String getLocalServerId() {
return serverInfo.getId(); return localServerInfo.getId();
} }
/** /**

View File

@@ -1,5 +1,6 @@
package cn.hamster3.mc.plugin.ball.common.config; package cn.hamster3.mc.plugin.ball.common.config;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -14,4 +15,12 @@ public class BallConfig {
private String channelPrefix; private String channelPrefix;
private boolean gameServerUpdatePlayerInfo; private boolean gameServerUpdatePlayerInfo;
private List<String> loadPlayerInfoFilter; private List<String> loadPlayerInfoFilter;
public BallConfig(@NotNull ConfigSection config) {
debug = config.getBoolean("debug", false);
channelPrefix = config.getString("channel-prefix", "");
channelPrefix = channelPrefix.isEmpty() ? channelPrefix : channelPrefix + ":";
gameServerUpdatePlayerInfo = config.getBoolean("game-server-update-player-info", false);
loadPlayerInfoFilter = config.getStringList("load-player-info-filter");
}
} }