feat: 将redission更换为lettuce

This commit is contained in:
2023-10-29 22:54:09 +08:00
parent 64b110718e
commit ef0960b6e8
14 changed files with 161 additions and 224 deletions

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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 字符
# 推荐格式:全小写英文+横杠+数字尾号