From ef0960b6e82a396ea1b9f7c2ac5089939c07cdfc Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Sun, 29 Oct 2023 22:54:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86redission=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAlettuce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ball-bukkit/build.gradle.kts | 6 +- .../plugin/ball/bukkit/api/BallBukkitAPI.java | 55 +++--------------- ball-bukkit/src/main/resources/config.yml | 7 +++ ball-bungeecord/build.gradle.kts | 14 +---- .../core/bungee/api/BallBungeeCordAPI.java | 55 +++--------------- ball-bungeecord/src/main/resources/config.yml | 7 +++ ball-common/build.gradle.kts | 9 +-- .../mc/plugin/ball/common/api/BallAPI.java | 57 ++++++++++++------- .../common/codec/BallMessageInfoCodec.java | 41 ------------- .../ball/common/data/BallMessageInfo.java | 28 +++++++++ .../common/listener/BallDebugListener.java | 34 +++++++++-- .../common/listener/BallMessageListener.java | 31 +++++++++- ball-common/src/main/resources/redission.yml | 36 ------------ build.gradle.kts | 5 +- 14 files changed, 161 insertions(+), 224 deletions(-) delete mode 100644 ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/codec/BallMessageInfoCodec.java delete mode 100644 ball-common/src/main/resources/redission.yml diff --git a/ball-bukkit/build.gradle.kts b/ball-bukkit/build.gradle.kts index 2e09c31..5fb8d8f 100644 --- a/ball-bukkit/build.gradle.kts +++ b/ball-bukkit/build.gradle.kts @@ -8,10 +8,8 @@ dependencies { compileOnly("cn.hamster3.mc.plugin:core-bukkit:+") compileOnly("me.clip:placeholderapi:+") { isTransitive = false } - - implementation("org.redisson:redisson:+") { - exclude(group = "org.slf4j") - } + // https://mvnrepository.com/artifact/io.lettuce/lettuce-core + implementation("io.lettuce:lettuce-core:6.2.6.RELEASE") } tasks { diff --git a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java index e19804a..9931fd4 100644 --- a/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java +++ b/ball-bukkit/src/main/java/cn/hamster3/mc/plugin/ball/bukkit/api/BallBukkitAPI.java @@ -3,48 +3,30 @@ package cn.hamster3.mc.plugin.ball.bukkit.api; import cn.hamster3.mc.plugin.ball.bukkit.HamsterBallPlugin; import cn.hamster3.mc.plugin.ball.bukkit.util.BallBukkitUtils; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; -import cn.hamster3.mc.plugin.ball.common.codec.BallMessageInfoCodec; -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; 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.common.api.CoreAPI; +import io.lettuce.core.RedisClient; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.redisson.Redisson; -import org.redisson.api.RTopic; -import org.redisson.api.RedissonClient; -import org.redisson.config.Config; import javax.sql.DataSource; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; import java.sql.SQLException; import java.util.Map; -import java.util.Objects; import java.util.logging.Logger; public class BallBukkitAPI extends BallAPI { - @Nullable - private final DataSource datasource; - @NotNull - private final RedissonClient redissonClient; - - public BallBukkitAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedissonClient redissonClient) { - super(localServerInfo); - this.datasource = datasource; - this.redissonClient = redissonClient; + public BallBukkitAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { + super(localServerInfo, datasource, redisClient, debug); } public static BallBukkitAPI getInstance() { return (BallBukkitAPI) instance; } - public static void init() throws IOException { + public static void init() { if (instance != null) { return; } @@ -69,28 +51,14 @@ public class BallBukkitAPI extends BallAPI { if (config.contains("datasource")) { plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接."); datasource = BallBukkitUtils.getDataSource(config.getConfigurationSection("datasource")); - }else { + } else { plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接."); datasource = CoreAPI.getInstance().getDataSource(); } - File redissionConfig = new File(plugin.getDataFolder(), "redission.yml"); - if (!redissionConfig.exists()) { - Files.copy( - Objects.requireNonNull(plugin.getResource("redission.yml")), - redissionConfig.toPath(), - StandardCopyOption.REPLACE_EXISTING - ); - } - RedissonClient redissonClient = Redisson.create(Config.fromYAML(redissionConfig)); - BallBukkitAPI apiInstance = new BallBukkitAPI(serverInfo, datasource, redissonClient); + RedisClient redisClient = RedisClient.create(config.getString("redis-url", "redis://localhost:6379?clientName=HamsterBall")); - RTopic topic = redissonClient.getTopic(BALL_CHANNEL, BallMessageInfoCodec.INSTANCE); - if (config.getBoolean("debug", false)) { - topic.addListener(BallMessageInfo.class, BallDebugListener.INSTANCE); - } - - instance = apiInstance; + instance = new BallBukkitAPI(serverInfo, datasource, redisClient, config.getBoolean("debug", false)); } @Override @@ -108,13 +76,4 @@ public class BallBukkitAPI extends BallAPI { return HamsterBallPlugin.getInstance().getLogger(); } - @Override - public @NotNull DataSource getDatasource() { - return datasource == null ? CoreAPI.getInstance().getDataSource() : datasource; - } - - @Override - public @NotNull RedissonClient getRedissonClient() { - return redissonClient; - } } diff --git a/ball-bukkit/src/main/resources/config.yml b/ball-bukkit/src/main/resources/config.yml index c47b527..c8a5aba 100644 --- a/ball-bukkit/src/main/resources/config.yml +++ b/ball-bukkit/src/main/resources/config.yml @@ -1,6 +1,13 @@ # 是否允许在控制台输出调试信息 debug: false +# redis 连接配置,连接格式如下: +# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值 +# 若没有设置用户名和密码,则可以省略 +# 若不设置数据库,则默认使用 0 +# 详细信息:https://github.com/lettuce-io/lettuce-core/wiki/Redis-URI-and-connection-details +redis-url: "redis://localhost:6379?clientName=HamsterBall" + server-info: # 服务器唯一识别码,最长 32 字符 # 推荐格式:全小写英文+横杠+数字尾号 diff --git a/ball-bungeecord/build.gradle.kts b/ball-bungeecord/build.gradle.kts index effd69e..c8c71f3 100644 --- a/ball-bungeecord/build.gradle.kts +++ b/ball-bungeecord/build.gradle.kts @@ -5,18 +5,8 @@ dependencies { compileOnly("net.md-5:bungeecord-api:+") compileOnly("cn.hamster3.mc.plugin:core-bungeecord:+") - - implementation("org.redisson:redisson:+") { -// exclude(group = "io.netty", module="netty-codec") -// exclude(group = "io.netty", module="netty-codec-dns") -// exclude(group = "io.netty", module="netty-buffer") -// exclude(group = "io.netty", module="netty-handler") -// exclude(group = "io.netty", module="netty-resolver") -// exclude(group = "io.netty", module="netty-transport") -// exclude(group = "org.yaml") -// exclude(group = "io.netty") - exclude(group = "org.slf4j") - } + // https://mvnrepository.com/artifact/io.lettuce/lettuce-core + implementation("io.lettuce:lettuce-core:6.2.6.RELEASE") } tasks { diff --git a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java index a5eec36..98717cf 100644 --- a/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java +++ b/ball-bungeecord/src/main/java/cn/hamster3/mc/plugin/core/bungee/api/BallBungeeCordAPI.java @@ -1,49 +1,32 @@ package cn.hamster3.mc.plugin.core.bungee.api; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; -import cn.hamster3.mc.plugin.ball.common.codec.BallMessageInfoCodec; -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; 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.util.BallBungeeCordUtils; import cn.hamster3.mc.plugin.core.bungee.util.CoreBungeeCordUtils; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; +import io.lettuce.core.RedisClient; import net.md_5.bungee.config.Configuration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.redisson.Redisson; -import org.redisson.api.RTopic; -import org.redisson.api.RedissonClient; -import org.redisson.config.Config; import javax.sql.DataSource; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; import java.sql.SQLException; import java.util.Map; import java.util.logging.Logger; public class BallBungeeCordAPI extends BallAPI { - @Nullable - private final DataSource datasource; - @NotNull - private final RedissonClient redissonClient; - - public BallBungeeCordAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedissonClient redissonClient) { - super(localServerInfo); - this.datasource = datasource; - this.redissonClient = redissonClient; + public BallBungeeCordAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { + super(localServerInfo, datasource, redisClient, debug); } public static BallBungeeCordAPI getInstance() { return (BallBungeeCordAPI) instance; } - public static void init() throws IOException { + public static void init() { if (instance != null) { return; } @@ -65,28 +48,14 @@ public class BallBungeeCordAPI extends BallAPI { if (config.contains("datasource")) { plugin.getLogger().info("检测到配置文件中包含 datasource 节点,启用自定义数据库连接."); datasource = BallBungeeCordUtils.getDataSource(config.getSection("datasource")); - }else { + } else { plugin.getLogger().info("未检测到配置文件中的 datasource 节点,复用 HamsterCore 数据库连接."); datasource = CoreAPI.getInstance().getDataSource(); } - File redissionConfig = new File(plugin.getDataFolder(), "redission.yml"); - if (!redissionConfig.exists()) { - Files.copy( - plugin.getResourceAsStream("redission.yml"), - redissionConfig.toPath(), - StandardCopyOption.REPLACE_EXISTING - ); - } - RedissonClient redissonClient = Redisson.create(Config.fromYAML(redissionConfig)); - BallBungeeCordAPI apiInstance = new BallBungeeCordAPI(serverInfo, datasource, redissonClient); + RedisClient redisClient = RedisClient.create(config.getString("redis-url", "redis://localhost:6379?clientName=HamsterBall")); - if (config.getBoolean("debug", false)) { - RTopic topic = redissonClient.getTopic(BALL_CHANNEL, BallMessageInfoCodec.INSTANCE); - topic.addListener(BallMessageInfo.class, BallDebugListener.INSTANCE); - } - - instance = apiInstance; + instance = new BallBungeeCordAPI(serverInfo, datasource, redisClient, config.getBoolean("debug", false)); } @Override @@ -103,14 +72,4 @@ public class BallBungeeCordAPI extends BallAPI { public @NotNull Logger getLogger() { return HamsterBallPlugin.getInstance().getLogger(); } - - @Override - public @NotNull DataSource getDatasource() { - return datasource == null ? CoreAPI.getInstance().getDataSource() : datasource; - } - - @Override - public @NotNull RedissonClient getRedissonClient() { - return redissonClient; - } } diff --git a/ball-bungeecord/src/main/resources/config.yml b/ball-bungeecord/src/main/resources/config.yml index 0f467b5..2660688 100644 --- a/ball-bungeecord/src/main/resources/config.yml +++ b/ball-bungeecord/src/main/resources/config.yml @@ -1,6 +1,13 @@ # 是否允许在控制台输出调试信息 debug: false +# redis 连接配置,连接格式如下: +# redis://用户名:密码@主机名:端口/数据库索引?参数名=参数值&参数名=参数值 +# 若没有设置用户名和密码,则可以省略 +# 若不设置数据库,则默认使用 0 +# 详细信息:https://github.com/lettuce-io/lettuce-core/wiki/Redis-URI-and-connection-details +redis-url: "redis://localhost:6379?clientName=HamsterBall" + server-info: # 服务器唯一识别码,最长 32 字符 id: "BungeeCord" diff --git a/ball-common/build.gradle.kts b/ball-common/build.gradle.kts index 5524fa2..fcb0a68 100644 --- a/ball-common/build.gradle.kts +++ b/ball-common/build.gradle.kts @@ -3,15 +3,10 @@ dependencies { compileOnly("cn.hamster3.mc.plugin:core-common:+") - compileOnly("io.netty:netty-buffer:4+") compileOnly("com.google.code.gson:gson:2.8.0") - implementation("org.redisson:redisson:+") { - isTransitive = false - exclude(group = "io.netty") - exclude(group = "org.yaml") - exclude(group = "org.slf4j") - } + // https://mvnrepository.com/artifact/io.lettuce/lettuce-core + compileOnly("io.lettuce:lettuce-core:6.2.6.RELEASE") } tasks { 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 099c66d..dccfd61 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 @@ -1,6 +1,5 @@ package cn.hamster3.mc.plugin.ball.common.api; -import cn.hamster3.mc.plugin.ball.common.codec.BallMessageInfoCodec; import cn.hamster3.mc.plugin.ball.common.data.BallLocation; import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; import cn.hamster3.mc.plugin.ball.common.entity.BallPlayerInfo; @@ -11,18 +10,18 @@ import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerConnectServerEve import cn.hamster3.mc.plugin.ball.common.event.player.BallPlayerInfoUpdateEvent; 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.BallDebugListener; import cn.hamster3.mc.plugin.ball.common.listener.BallListener; import cn.hamster3.mc.plugin.ball.common.listener.BallMessageListener; import cn.hamster3.mc.plugin.ball.common.listener.ListenerPriority; import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import cn.hamster3.mc.plugin.core.common.data.DisplayMessage; import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.Component; +import io.lettuce.core.RedisClient; +import io.lettuce.core.pubsub.StatefulRedisPubSubConnection; import lombok.Getter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.redisson.api.RTopic; -import org.redisson.api.RedissonClient; -import org.redisson.client.codec.StringCodec; import javax.sql.DataSource; import java.sql.*; @@ -47,19 +46,31 @@ public abstract class BallAPI { protected final Map playerInfo; @NotNull private final BallServerInfo localServerInfo; + @Nullable + private final DataSource datasource; + @NotNull + private final RedisClient redisClient; + @NotNull + private final StatefulRedisPubSubConnection pubSubConnection; + @NotNull private List listeners; - @Getter private boolean enabled; - public BallAPI(@NotNull BallServerInfo localServerInfo) { + public BallAPI(@NotNull BallServerInfo localServerInfo, @Nullable DataSource datasource, @NotNull RedisClient redisClient, boolean debug) { this.localServerInfo = localServerInfo; - + this.datasource = datasource; + this.redisClient = redisClient; + pubSubConnection = redisClient.connectPubSub(BallMessageInfo.CODEC); serverInfo = new ConcurrentHashMap<>(); playerInfo = new ConcurrentHashMap<>(); listeners = new ArrayList<>(); + enabled = false; + initListener(debug); + } + private void initListener(boolean debug) { addListener(new BallListener() { @Override public ListenerPriority getPriority() { @@ -129,7 +140,10 @@ public abstract class BallAPI { } } }); - enabled = false; + if (debug) { + getLogger().warning("已启用调试模式"); + pubSubConnection.addListener(BallDebugListener.INSTANCE); + } } protected void enable() throws SQLException, InterruptedException { @@ -201,9 +215,9 @@ public abstract class BallAPI { } } } - RTopic topic = getRedissonClient().getTopic(BALL_CHANNEL, BallMessageInfoCodec.INSTANCE); - topic.addListener(BallMessageInfo.class, BallMessageListener.INSTANCE); - + RedisClient client = getRedisClient(); + pubSubConnection.addListener(BallMessageListener.INSTANCE); + pubSubConnection.async().subscribe("HamsterBall"); enabled = true; } @@ -226,7 +240,7 @@ public abstract class BallAPI { } } getLogger().info("正在关闭 redission..."); - getRedissonClient().shutdown(); + getRedisClient().close(); getLogger().info("已关闭 redission."); } @@ -535,11 +549,12 @@ public abstract class BallAPI { */ public void sendBallMessage(@NotNull BallMessageInfo messageInfo, boolean block) { String string = CoreAPI.getInstance().getGson().toJson(messageInfo); - RTopic topic = getRedissonClient().getTopic(BallAPI.BALL_CHANNEL, StringCodec.INSTANCE); - if (block) { - topic.publish(string); - } else { - topic.publishAsync(string); + try (StatefulRedisPubSubConnection connection = getRedisClient().connectPubSub(BallMessageInfo.CODEC)) { + if (block) { + connection.sync().publish("HamsterBall", messageInfo); + } else { + connection.async().publish("HamsterBall", messageInfo); + } } for (BallListener listener : BallAPI.getInstance().getListeners()) { try { @@ -709,8 +724,12 @@ public abstract class BallAPI { public abstract Logger getLogger(); @NotNull - public abstract DataSource getDatasource(); + public DataSource getDatasource() { + return datasource == null ? CoreAPI.getInstance().getDataSource() : datasource; + } @NotNull - public abstract RedissonClient getRedissonClient(); + public RedisClient getRedisClient() { + return redisClient; + } } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/codec/BallMessageInfoCodec.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/codec/BallMessageInfoCodec.java deleted file mode 100644 index 2b35532..0000000 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/codec/BallMessageInfoCodec.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.hamster3.mc.plugin.ball.common.codec; - -import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; -import cn.hamster3.mc.plugin.core.common.api.CoreAPI; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.util.CharsetUtil; -import org.redisson.client.codec.BaseCodec; -import org.redisson.client.protocol.Decoder; -import org.redisson.client.protocol.Encoder; -import org.redisson.codec.JsonCodec; - -public class BallMessageInfoCodec extends BaseCodec implements JsonCodec { - public static final BallMessageInfoCodec INSTANCE = new BallMessageInfoCodec(); - - private final Encoder encoder = in -> { - ByteBuf out = ByteBufAllocator.DEFAULT.buffer(); - out.writeCharSequence(in.toString(), CharsetUtil.UTF_8); - return out; - }; - - private final Decoder decoder = (buf, state) -> { - String str = buf.toString(CharsetUtil.UTF_8); - buf.readerIndex(buf.readableBytes()); - return CoreAPI.getInstance().getGson().fromJson(str, BallMessageInfo.class); - }; - - private BallMessageInfoCodec() { - } - - @Override - public Decoder getValueDecoder() { - return decoder; - } - - @Override - public Encoder getValueEncoder() { - return encoder; - } - -} diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java index 2b9c778..7d9b7ee 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/data/BallMessageInfo.java @@ -6,12 +6,15 @@ import cn.hamster3.mc.plugin.core.common.api.CoreAPI; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import io.lettuce.core.codec.RedisCodec; +import io.lettuce.core.codec.StringCodec; import lombok.Data; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.math.BigDecimal; import java.math.BigInteger; +import java.nio.ByteBuffer; import java.util.UUID; /** @@ -20,6 +23,31 @@ import java.util.UUID; @Data @SuppressWarnings("unused") public class BallMessageInfo { + /** + * 编解码器 + */ + public static final RedisCodec CODEC = new RedisCodec() { + @Override + public String decodeKey(ByteBuffer bytes) { + return StringCodec.UTF8.decodeKey(bytes); + } + + @Override + public BallMessageInfo decodeValue(ByteBuffer bytes) { + String string = StringCodec.UTF8.decodeValue(bytes); + return CoreAPI.getInstance().getGson().fromJson(string, BallMessageInfo.class); + } + + @Override + public ByteBuffer encodeKey(String key) { + return StringCodec.UTF8.encodeKey(key); + } + + @Override + public ByteBuffer encodeValue(BallMessageInfo value) { + return StringCodec.UTF8.encodeValue(CoreAPI.getInstance().getGson().toJson(value)); + } + }; /** * 消息发送者 */ diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java index 5605654..77cab33 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallDebugListener.java @@ -2,16 +2,42 @@ package cn.hamster3.mc.plugin.ball.common.listener; import cn.hamster3.mc.plugin.ball.common.api.BallAPI; import cn.hamster3.mc.plugin.ball.common.data.BallMessageInfo; -import org.redisson.api.listener.MessageListener; +import io.lettuce.core.pubsub.RedisPubSubListener; -public class BallDebugListener implements MessageListener { +public class BallDebugListener implements RedisPubSubListener { public static final BallDebugListener INSTANCE = new BallDebugListener(); private BallDebugListener() { } @Override - public void onMessage(CharSequence channel, BallMessageInfo event) { - BallAPI.getInstance().getLogger().info("收到了一条消息: " + event); + public void message(String channel, BallMessageInfo event) { + BallAPI.getInstance().getLogger().info("从 " + channel + " 收到了一条消息: " + event); + } + + @Override + public void message(String pattern, String channel, BallMessageInfo event) { + BallAPI.getInstance().getLogger().info("从 " + pattern + "(" + channel + ") 收到了一条消息: " + event); + } + + @Override + public void subscribed(String channel, long count) { + BallAPI.getInstance().getLogger().info("已订阅 redis 频道: " + channel); + + } + + @Override + public void psubscribed(String pattern, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); + } + + @Override + public void unsubscribed(String channel, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道: " + channel); + } + + @Override + public void punsubscribed(String pattern, long count) { + BallAPI.getInstance().getLogger().info("已取消订阅 redis 频道(正则): " + pattern); } } diff --git a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java index 6bec9bf..6b0451e 100644 --- a/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java +++ b/ball-common/src/main/java/cn/hamster3/mc/plugin/ball/common/listener/BallMessageListener.java @@ -6,16 +6,16 @@ import cn.hamster3.mc.plugin.ball.common.event.player.*; 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.core.common.api.CoreAPI; -import org.redisson.api.listener.MessageListener; +import io.lettuce.core.pubsub.RedisPubSubListener; -public class BallMessageListener implements MessageListener { +public class BallMessageListener implements RedisPubSubListener { public static final BallMessageListener INSTANCE = new BallMessageListener(); private BallMessageListener() { } @Override - public void onMessage(CharSequence channel, BallMessageInfo info) { + public void message(String channel, BallMessageInfo info) { for (BallListener listener : BallAPI.getInstance().getListeners()) { try { listener.onMessageReceived(info); @@ -139,4 +139,29 @@ public class BallMessageListener implements MessageListener { } } } + + @Override + public void message(String pattern, String channel, BallMessageInfo info) { + message(channel, info); + } + + @Override + public void subscribed(String channel, long count) { + + } + + @Override + public void psubscribed(String pattern, long count) { + + } + + @Override + public void unsubscribed(String channel, long count) { + + } + + @Override + public void punsubscribed(String pattern, long count) { + + } } diff --git a/ball-common/src/main/resources/redission.yml b/ball-common/src/main/resources/redission.yml deleted file mode 100644 index 504c8f8..0000000 --- a/ball-common/src/main/resources/redission.yml +++ /dev/null @@ -1,36 +0,0 @@ -singleServerConfig: - address: "redis://localhost:6379" - password: "Reids123.." - username: "default" - database: 1 - clientName: "HamsterBall" - idleConnectionTimeout: 10000 - connectTimeout: 10000 - timeout: 3000 - retryAttempts: 3 - retryInterval: 1500 - subscriptionsPerConnection: 5 - sslEnableEndpointIdentification: true - sslProvider: "JDK" - pingConnectionInterval: 30000 - keepAlive: false - tcpNoDelay: true - subscriptionConnectionMinimumIdleSize: 1 - subscriptionConnectionPoolSize: 50 - connectionMinimumIdleSize: 1 - connectionPoolSize: 10 - dnsMonitoringInterval: 5000 -threads: 4 -nettyThreads: 4 -referenceEnabled: true -lockWatchdogTimeout: 30000 -checkLockSyncedSlaves: true -slavesSyncTimeout: 1000 -reliableTopicWatchdogTimeout: 600000 -keepPubSubOrder: true -useScriptCache: false -minCleanUpDelay: 5 -maxCleanUpDelay: 1800 -cleanUpKeysAmount: 100 -useThreadClassLoader: true -lazyInitialization: false diff --git a/build.gradle.kts b/build.gradle.kts index b79c734..8eb3133 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -24,7 +24,8 @@ subprojects { } dependencies { - implementation("org.jetbrains:annotations:+") + compileOnly("org.jetbrains:annotations:+") + // https://mvnrepository.com/artifact/org.projectlombok/lombok compileOnly("org.projectlombok:lombok:+") annotationProcessor("org.projectlombok:lombok:+") } @@ -44,7 +45,7 @@ subprojects { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } shadowJar { - relocate("org.yaml", "cn.hamster3.mc.plugin.ball.lib.org.yaml") + relocate("io.netty", "cn.hamster3.mc.plugin.ball.lib.io.netty") destinationDirectory = rootProject.buildDir } build {