diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java index 207d756..3ce671f 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/api/BallAPI.java @@ -74,7 +74,9 @@ public abstract class BallAPI { private final Map allPlayerInfo; @NotNull - private final StatefulRedisPubSubConnection redisPubSub; + private final StatefulRedisPubSubConnection redisPub; + @NotNull + private final StatefulRedisPubSubConnection redisSub; @Nullable private ScheduledFuture lockUpdater; @@ -102,7 +104,8 @@ public abstract class BallAPI { eventBus.register(BallCommonListener.INSTANCE); allServerInfo = new ConcurrentHashMap<>(); allPlayerInfo = new ConcurrentHashMap<>(); - redisPubSub = getRedisClient().connectPubSub(); + redisPub = getRedisClient().connectPubSub(); + redisSub = getRedisClient().connectPubSub(); getLogger().info("频道前缀: " + ballConfig.getChannelPrefix()); getLogger().info("启用子服更新玩家状态: " + ballConfig.isGameServerUpdatePlayerInfo()); if (ballConfig.isGameServerUpdatePlayerInfo()) { @@ -112,8 +115,8 @@ public abstract class BallAPI { getLogger().warning("已启用调试模式"); eventBus.register(BallDebugListener.INSTANCE); } - redisPubSub.addListener(BallRedisListener.INSTANCE); - redisPubSub.sync().subscribe(BALL_CHANNEL); + redisSub.addListener(BallRedisListener.INSTANCE); + redisSub.sync().subscribe(BALL_CHANNEL); } protected void enable() throws SQLException, InterruptedException { @@ -144,19 +147,19 @@ public abstract class BallAPI { try (Connection connection = getDatasource().getConnection()) { try (Statement statement = connection.createStatement()) { statement.execute("CREATE TABLE IF NOT EXISTS `hamster_ball_player_info`(" + - "`uuid` CHAR(36) PRIMARY KEY," + - "`name` VARCHAR(16) NOT NULL," + - "`game_server` VARCHAR(32) NOT NULL," + - "`proxy_server` VARCHAR(32) NOT NULL," + - "`online` BOOLEAN NOT NULL" + - ") CHARSET utf8mb4;"); + "`uuid` CHAR(36) PRIMARY KEY," + + "`name` VARCHAR(16) NOT NULL," + + "`game_server` VARCHAR(32) NOT NULL," + + "`proxy_server` VARCHAR(32) NOT NULL," + + "`online` BOOLEAN NOT NULL" + + ") CHARSET utf8mb4;"); statement.execute("CREATE TABLE IF NOT EXISTS `hamster_ball_cached_message`(" + - "`uuid` CHAR(36) NOT NULL," + - "`message` TEXT NOT NULL," + - "`time` DATETIME NOT NULL DEFAULT NOW()," + - "INDEX `idx_uuid` USING BTREE (`uuid`)," + - "INDEX `idx_time` USING BTREE (`time`)" + - ") CHARSET utf8mb4;"); + "`uuid` CHAR(36) NOT NULL," + + "`message` TEXT NOT NULL," + + "`time` DATETIME NOT NULL DEFAULT NOW()," + + "INDEX `idx_uuid` USING BTREE (`uuid`)," + + "INDEX `idx_time` USING BTREE (`time`)" + + ") CHARSET utf8mb4;"); } if (getBallConfig().isGameServerUpdatePlayerInfo()) { try (Statement statement = connection.createStatement()) { @@ -219,7 +222,7 @@ public abstract class BallAPI { statement.executeUpdate(); } } - redisPubSub.close(); + redisPub.close(); } /** @@ -501,12 +504,12 @@ public abstract class BallAPI { channel = ballConfig.getChannelPrefix() + channel; } if (block) { - redisPubSub.sync().publish(channel, CoreAPI.getInstance().getGson().toJson(message)); + redisPub.sync().publish(channel, CoreAPI.getInstance().getGson().toJson(message)); eventBus.post(new MessageSentEvent(channel, message)); } else { @NotNull String finalChannel = channel; CoreAPI.getInstance().getExecutorService().execute(() -> { - redisPubSub.sync().publish(finalChannel, CoreAPI.getInstance().getGson().toJson(message)); + redisPub.sync().publish(finalChannel, CoreAPI.getInstance().getGson().toJson(message)); eventBus.post(new MessageSentEvent(finalChannel, message)); }); } @@ -532,7 +535,7 @@ public abstract class BallAPI { * @param channels 频道名称 */ public void subscribeRaw(@NotNull String... channels) { - redisPubSub.sync().subscribe(channels); + redisSub.sync().subscribe(channels); } /** @@ -541,7 +544,7 @@ public abstract class BallAPI { * @param patterns 频道名称正则表达式 */ public void subscribePatterns(@NotNull String patterns) { - redisPubSub.sync().psubscribe(patterns); + redisSub.sync().psubscribe(patterns); } /** @@ -564,7 +567,7 @@ public abstract class BallAPI { * @param channels 频道名称 */ public void unsubscribeRaw(@NotNull String... channels) { - redisPubSub.sync().unsubscribe(channels); + redisSub.sync().unsubscribe(channels); } /** @@ -573,7 +576,7 @@ public abstract class BallAPI { * @param patterns 频道名称正则表达式 */ public void unsubscribePatterns(@NotNull String patterns) { - redisPubSub.sync().punsubscribe(patterns); + redisSub.sync().punsubscribe(patterns); } @NotNull diff --git a/build.gradle.kts b/build.gradle.kts index 4a04b4e..ef87958 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { } group = "cn.hamster3.mc.plugin" -version = "1.8.1" +version = "1.8.2" description = "基于 Redis 的 Minecraft 服务端通用消息中间件" subprojects {