feat: 添加调试模式
This commit is contained in:
@@ -11,6 +11,8 @@ dependencies {
|
||||
|
||||
// https://mvnrepository.com/artifact/net.kyori/adventure-api
|
||||
compileOnly 'net.kyori:adventure-api:4.11.0'
|
||||
// https://mvnrepository.com/artifact/net.kyori/adventure-text-serializer-plain
|
||||
compileOnly 'net.kyori:adventure-text-serializer-plain:4.11.0'
|
||||
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
|
||||
|
@@ -33,6 +33,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract class BallAPI {
|
||||
@@ -57,11 +58,12 @@ public abstract class BallAPI {
|
||||
private final Bootstrap bootstrap;
|
||||
private final NioEventLoopGroup executors;
|
||||
|
||||
protected boolean enable;
|
||||
protected boolean enabled;
|
||||
protected Channel channel;
|
||||
|
||||
protected BallAPI(@NotNull BallConfig config) {
|
||||
this.config = config;
|
||||
this.enabled = false;
|
||||
executors = new NioEventLoopGroup(config.getNioThread());
|
||||
|
||||
serverInfo = new ConcurrentHashMap<>();
|
||||
@@ -146,10 +148,10 @@ public abstract class BallAPI {
|
||||
}
|
||||
|
||||
protected void enable() throws SQLException, InterruptedException {
|
||||
if (enable) {
|
||||
if (enabled) {
|
||||
return;
|
||||
}
|
||||
enable = true;
|
||||
enabled = true;
|
||||
BallServerInfo localInfo = getLocalServerInfo();
|
||||
|
||||
connect();
|
||||
@@ -233,20 +235,25 @@ public abstract class BallAPI {
|
||||
}
|
||||
|
||||
protected void connect() throws InterruptedException {
|
||||
if (!enable) {
|
||||
if (!enabled) {
|
||||
getLogger().info("仓鼠球已关闭,拒绝启动连接!");
|
||||
return;
|
||||
}
|
||||
getLogger().info("准备连接至仓鼠球服务中心!");
|
||||
ChannelFuture future = bootstrap.connect(config.getHost(), config.getPort()).await();
|
||||
if (future.isSuccess()) {
|
||||
channel = future.channel();
|
||||
for (BallListener listener : listeners) {
|
||||
listener.onConnectActive();
|
||||
}
|
||||
getLogger().info("已连接至仓鼠球服务中心!");
|
||||
} else {
|
||||
getLogger().warning("连接至仓鼠球服务中心失败!");
|
||||
}
|
||||
}
|
||||
|
||||
protected void reconnect(int ttl) {
|
||||
if (!enable) {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
if (channel != null && channel.isOpen() && channel.isRegistered() && channel.isActive() && channel.isWritable()) {
|
||||
@@ -275,10 +282,10 @@ public abstract class BallAPI {
|
||||
}
|
||||
|
||||
protected void disable() throws SQLException, InterruptedException {
|
||||
if (!enable) {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
enable = false;
|
||||
enabled = false;
|
||||
|
||||
sendBallMessage(
|
||||
BALL_CHANNEL,
|
||||
@@ -620,9 +627,10 @@ public abstract class BallAPI {
|
||||
*/
|
||||
public void sendBallMessage(@NotNull BallMessageInfo messageInfo, boolean block) {
|
||||
if (channel == null || !channel.isWritable()) {
|
||||
getLogger().warning("由于服务不可用,有一条消息发送失败了: " + messageInfo);
|
||||
return;
|
||||
}
|
||||
ChannelFuture future = channel.write(CoreConstantObjects.GSON.toJsonTree(messageInfo));
|
||||
ChannelFuture future = channel.writeAndFlush(CoreConstantObjects.GSON.toJsonTree(messageInfo));
|
||||
if (block) {
|
||||
try {
|
||||
future.await();
|
||||
@@ -752,4 +760,7 @@ public abstract class BallAPI {
|
||||
public List<BallListener> getListeners() {
|
||||
return listeners;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public abstract Logger getLogger();
|
||||
}
|
||||
|
@@ -0,0 +1,114 @@
|
||||
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 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 net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public final class BallDebugListener extends BallListener {
|
||||
public static final BallDebugListener INSTANCE = new BallDebugListener();
|
||||
|
||||
private BallDebugListener() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenerPriority getPriority() {
|
||||
return ListenerPriority.MONITOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectActive() {
|
||||
BallAPI.getInstance().getLogger().info("连接已可用。");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectInactive() {
|
||||
BallAPI.getInstance().getLogger().info("连接已中断!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectException(Throwable throwable) {
|
||||
BallAPI.getInstance().getLogger().log(Level.INFO, "连接出现错误!", throwable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReconnectFailed() {
|
||||
BallAPI.getInstance().getLogger().info("重新连接失败!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerPreLogin(@NotNull BallPlayerPreLoginEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerPreLoginEvent: " + event.getPlayerName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerLogin(@NotNull BallPlayerLoginEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerLoginEvent: " + event.getPlayerInfo().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerPostLogin(@NotNull BallPlayerPostLoginEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerPostLoginEvent: " + event.getPlayerInfo().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerPreConnectServer(@NotNull BallPlayerPreConnectServerEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerPreConnectServerEvent: ");
|
||||
BallAPI.getInstance().getLogger().info("player: " + event.getPlayerInfo().getName());
|
||||
BallAPI.getInstance().getLogger().info("from: " + event.getFrom());
|
||||
BallAPI.getInstance().getLogger().info("to: " + event.getTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerConnectServer(@NotNull BallPlayerConnectServerEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerConnectServerEvent: ");
|
||||
BallAPI.getInstance().getLogger().info("player: " + event.getPlayerInfo().getName());
|
||||
BallAPI.getInstance().getLogger().info("from: " + event.getFrom());
|
||||
BallAPI.getInstance().getLogger().info("to: " + event.getTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerPostConnectServer(@NotNull BallPlayerPostConnectServerEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerPostConnectServerEvent: ");
|
||||
BallAPI.getInstance().getLogger().info("player: " + event.getPlayerInfo().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerLogout(@NotNull BallPlayerLogoutEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerLogoutEvent: ");
|
||||
BallAPI.getInstance().getLogger().info("player: " + event.getPlayerInfo().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBallPlayerChat(@NotNull BallPlayerChatEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("BallPlayerChatEvent: ");
|
||||
BallAPI.getInstance().getLogger().info("displayName: " + event.getDisplayName());
|
||||
BallAPI.getInstance().getLogger().info("playerUUID: " + event.getPlayerUUID());
|
||||
BallAPI.getInstance().getLogger().info("message: " + PlainTextComponentSerializer.plainText().serialize(event.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServerOffline(@NotNull ServerOfflineEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("ServerOfflineEvent: " + event.getServerID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServerOnline(@NotNull ServerOnlineEvent event) {
|
||||
BallAPI.getInstance().getLogger().info("ServerOnlineEvent: " + event.getServerInfo().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageSend(@NotNull BallMessageInfo event) {
|
||||
BallAPI.getInstance().getLogger().info("发送了一条消息: " + event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(@NotNull BallMessageInfo event) {
|
||||
BallAPI.getInstance().getLogger().info("收到了一条消息: " + event);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user