refactor: 将 lettuce 转至 HamsterCore 里

This commit is contained in:
2024-01-13 18:49:22 +08:00
parent 0566941e85
commit b7b7f89267
13 changed files with 47 additions and 93 deletions

View File

@@ -1,14 +1,10 @@
@file:Suppress("VulnerableLibrariesLocal", "GradlePackageVersionRange", "GradlePackageUpdate")
dependencies {
compileOnly("cn.hamster3.mc.plugin:core-common:+")
compileOnly("cn.hamster3.mc.plugin:core-common:1.2.0")
compileOnly("com.google.code.gson:gson:2.8.0")
compileOnly("com.google.guava:guava:31.0-jre")
implementation("io.lettuce:lettuce-core:+") {
exclude(group = "io.netty")
}
}
tasks {

View File

@@ -15,11 +15,10 @@ import cn.hamster3.mc.plugin.ball.common.listener.BallDebugListener;
import cn.hamster3.mc.plugin.ball.common.listener.BallRedisListener;
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.io.lettuce.core.pubsub.StatefulRedisPubSubConnection;
import cn.hamster3.mc.plugin.core.lib.net.kyori.adventure.text.Component;
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.EventBus;
import io.lettuce.core.RedisClient;
import io.lettuce.core.pubsub.StatefulRedisPubSubConnection;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,14 +54,14 @@ public abstract class BallAPI {
@NotNull
private final Map<UUID, BallPlayerInfo> allPlayerInfo;
@NotNull
private final StatefulRedisPubSubConnection<String, BallMessage> subConnection;
private final StatefulRedisPubSubConnection<String, BallMessage> redisPub;
@NotNull
private final StatefulRedisPubSubConnection<String, BallMessage> pubConnection;
private final StatefulRedisPubSubConnection<String, BallMessage> redisSub;
public BallAPI(@NotNull BallConfig ballConfig) {
this.ballConfig = ballConfig;
subConnection = ballConfig.getRedisClient().connectPubSub(BallMessage.CODEC);
pubConnection = ballConfig.getRedisClient().connectPubSub(BallMessage.CODEC);
redisPub = CoreAPI.getInstance().getRedisClient().connectPubSub(BallMessage.CODEC);
redisSub = CoreAPI.getInstance().getRedisClient().connectPubSub(BallMessage.CODEC);
allServerInfo = new ConcurrentHashMap<>();
allPlayerInfo = new ConcurrentHashMap<>();
eventBus = new AsyncEventBus("HamsterBall - EventBus", CoreAPI.getInstance().getExecutorService());
@@ -139,8 +138,8 @@ public abstract class BallAPI {
}
}
}
subConnection.addListener(BallRedisListener.INSTANCE);
subConnection.sync().subscribe(BALL_CHANNEL);
redisPub.addListener(BallRedisListener.INSTANCE);
redisPub.sync().subscribe(BALL_CHANNEL);
}
protected void disable() throws SQLException, InterruptedException {
@@ -163,9 +162,6 @@ public abstract class BallAPI {
statement.executeUpdate();
}
}
getLogger().info("正在关闭 redission");
ballConfig.getRedisClient().close();
getLogger().info("已关闭 redission");
}
/**
@@ -451,11 +447,11 @@ public abstract class BallAPI {
channel = ballConfig.getChannelPrefix() + channel;
}
if (block) {
pubConnection.sync().publish(channel, message);
redisSub.sync().publish(channel, message);
eventBus.post(new MessageSentEvent(channel, message));
} else {
@NotNull String finalChannel = channel;
pubConnection.async().publish(channel, message).whenComplete((aLong, throwable) -> {
redisSub.async().publish(channel, message).whenComplete((aLong, throwable) -> {
if (throwable != null) {
return;
}
@@ -468,22 +464,22 @@ public abstract class BallAPI {
for (int i = 0; i < channel.length; i++) {
channel[i] = ballConfig.getChannelPrefix() + channel[i];
}
subConnection.sync().subscribe(channel);
redisPub.sync().subscribe(channel);
}
public void subscribePatterns(@NotNull String patterns) {
subConnection.sync().psubscribe(patterns);
redisPub.sync().psubscribe(patterns);
}
public void unsubscribe(@NotNull String... channel) {
for (int i = 0; i < channel.length; i++) {
channel[i] = ballConfig.getChannelPrefix() + channel[i];
}
subConnection.sync().unsubscribe(channel);
redisPub.sync().unsubscribe(channel);
}
public void unsubscribePatterns(@NotNull String patterns) {
subConnection.sync().punsubscribe(patterns);
redisPub.sync().punsubscribe(patterns);
}
/**
@@ -642,9 +638,4 @@ public abstract class BallAPI {
public DataSource getDatasource() {
return ballConfig.getDatasource() == null ? CoreAPI.getInstance().getDataSource() : ballConfig.getDatasource();
}
@NotNull
public RedisClient getRedisClient() {
return ballConfig.getRedisClient();
}
}

View File

@@ -1,7 +1,6 @@
package cn.hamster3.mc.plugin.ball.common.config;
import cn.hamster3.mc.plugin.ball.common.entity.BallServerInfo;
import io.lettuce.core.RedisClient;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
@@ -14,8 +13,6 @@ import javax.sql.DataSource;
public class BallConfig {
private boolean debug;
@NotNull
private RedisClient redisClient;
@NotNull
private String channelPrefix;
private boolean gameServerUpdatePlayerInfo;
@NotNull

View File

@@ -3,11 +3,11 @@ package cn.hamster3.mc.plugin.ball.common.data;
import cn.hamster3.mc.plugin.ball.common.api.BallAPI;
import cn.hamster3.mc.plugin.ball.common.entity.BallServerType;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.lib.io.lettuce.core.codec.RedisCodec;
import cn.hamster3.mc.plugin.core.lib.io.lettuce.core.codec.StringCodec;
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 lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;

View File

@@ -9,7 +9,7 @@ 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 io.lettuce.core.pubsub.RedisPubSubListener;
import cn.hamster3.mc.plugin.core.lib.io.lettuce.core.pubsub.RedisPubSubListener;
public class BallRedisListener implements RedisPubSubListener<String, BallMessage> {
public static final BallRedisListener INSTANCE = new BallRedisListener();