From aaefabc7d98837616d0c226f2cb9056d15fd44cb Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Tue, 20 Jan 2026 22:28:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99=E7=A9=BA?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xujiayao/discord_mc_chat/DMCC.java | 8 ++++---- .../discord_mc_chat/client/ClientHandler.java | 8 ++++---- .../discord_mc_chat/client/NettyClient.java | 18 ++++++++---------- .../serialization/JavaSerializerEncoder.java | 2 +- .../discord_mc_chat/server/NettyServer.java | 10 +++++----- .../discord_mc_chat/server/ServerHandler.java | 6 +++--- 6 files changed, 25 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java index bfc237a7..d47debf9 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/DMCC.java @@ -102,9 +102,9 @@ public class DMCC { // Generate ephemeral credentials for internal loopback connection String internalServerName = "Internal"; String internalSharedSecret = CryptUtils.generateRandomString(32); - + // Server instance gets the secret to verify the client - serverInstance = new ServerDMCC("127.0.0.1", 0, internalSharedSecret); + serverInstance = new ServerDMCC("127.0.0.1", 0, internalSharedSecret); int port = serverInstance.start(); if (port == -1) { @@ -122,7 +122,7 @@ public class DMCC { int port = ConfigManager.getInt("multi_server.connection.port"); String name = ConfigManager.getString("multi_server.server_name"); String secret = ConfigManager.getString("multi_server.connection.shared_secret"); - + clientInstance = new ClientDMCC(host, port, name, secret); if (!clientInstance.start()) { return false; @@ -132,7 +132,7 @@ public class DMCC { String host = ConfigManager.getString("multi_server.connection.host"); int port = ConfigManager.getInt("multi_server.connection.port"); String secret = ConfigManager.getString("multi_server.connection.shared_secret"); - + serverInstance = new ServerDMCC(host, port, secret); if (serverInstance.start() == -1) { return false; diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java index b5c5dcbf..0beb0662 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/client/ClientHandler.java @@ -38,11 +38,11 @@ public class ClientHandler extends SimpleChannelInboundHandler { public void channelActive(ChannelHandlerContext ctx) { ctx.writeAndFlush(new HandshakePacket(client.getServerName(), Constants.VERSION)); } - + @Override public void channelInactive(ChannelHandlerContext ctx) { LOGGER.info(I18nManager.getDmccTranslation("network.client.disconnected_generic")); - + // Trigger reconnection if this was not an intentional stop if (client.isRunning()) { LOGGER.info(I18nManager.getDmccTranslation("network.client.reconnecting")); @@ -59,7 +59,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { } else if (packet instanceof LoginSuccessPacket p) { I18nManager.load(p.language); LOGGER.info(I18nManager.getDmccTranslation("network.client.connected")); - + if (!initialLoginFuture.isDone()) { initialLoginFuture.complete(true); } @@ -67,7 +67,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { } else if (packet instanceof DisconnectPacket p) { String reason = I18nManager.getDmccTranslation(p.key, p.args); LOGGER.error(I18nManager.getDmccTranslation("network.client.disconnected_reason", reason)); - + if (!initialLoginFuture.isDone()) { initialLoginFuture.complete(false); } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java b/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java index 772eb7a5..7035d67e 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/client/NettyClient.java @@ -31,17 +31,15 @@ import static com.xujiayao.discord_mc_chat.Constants.LOGGER; */ public class NettyClient { + private static final int MAX_RECONNECT_DELAY = 512; private final String host; private final int port; private final String serverName; private final String sharedSecret; - private EventLoopGroup workerGroup; - private CompletableFuture initialLoginFuture; - - // Reconnection settings private final AtomicBoolean isRunning = new AtomicBoolean(false); private final AtomicInteger reconnectDelay = new AtomicInteger(2); // Initial delay seconds - private static final int MAX_RECONNECT_DELAY = 512; + private EventLoopGroup workerGroup; + private CompletableFuture initialLoginFuture; public NettyClient(String host, int port, String serverName, String sharedSecret) { this.host = host; @@ -49,11 +47,11 @@ public class NettyClient { this.serverName = serverName; this.sharedSecret = sharedSecret; } - + public String getServerName() { return serverName; } - + public String getSharedSecret() { return sharedSecret; } @@ -61,9 +59,9 @@ public class NettyClient { public boolean start() { isRunning.set(true); initialLoginFuture = new CompletableFuture<>(); - + // Use MultiThreadIoEventLoopGroup with NioIoHandler - workerGroup = new MultiThreadIoEventLoopGroup(0, + workerGroup = new MultiThreadIoEventLoopGroup(0, ExecutorServiceUtils.newThreadFactory("DMCC-NettyClient"), NioIoHandler.newFactory()); @@ -135,7 +133,7 @@ public class NettyClient { workerGroup.shutdownGracefully(); } } - + public boolean isRunning() { return isRunning.get(); } diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/network/serialization/JavaSerializerEncoder.java b/core/src/main/java/com/xujiayao/discord_mc_chat/network/serialization/JavaSerializerEncoder.java index 903a9c65..709e388e 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/network/serialization/JavaSerializerEncoder.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/network/serialization/JavaSerializerEncoder.java @@ -15,7 +15,7 @@ import java.io.Serializable; * @author Xujiayao */ public class JavaSerializerEncoder extends MessageToByteEncoder { - + @Override protected void encode(ChannelHandlerContext ctx, Serializable msg, ByteBuf out) throws Exception { // Use ObjectOutputStream to serialize the object into the ByteBuf diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java index d8726bbc..8c5fe7f8 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/NettyServer.java @@ -39,17 +39,17 @@ public class NettyServer { this.port = port; this.sharedSecret = sharedSecret; } - + public String getSharedSecret() { return sharedSecret; } public int start() { - bossGroup = new MultiThreadIoEventLoopGroup(1, + bossGroup = new MultiThreadIoEventLoopGroup(1, ExecutorServiceUtils.newThreadFactory("DMCC-NettyServer-Boss"), NioIoHandler.newFactory()); - - workerGroup = new MultiThreadIoEventLoopGroup(0, + + workerGroup = new MultiThreadIoEventLoopGroup(0, ExecutorServiceUtils.newThreadFactory("DMCC-NettyServer-Worker"), NioIoHandler.newFactory()); @@ -75,7 +75,7 @@ public class NettyServer { ChannelFuture channelFuture = b.bind(host, port).sync(); int boundPort = ((InetSocketAddress) channelFuture.channel().localAddress()).getPort(); - + LOGGER.info(I18nManager.getDmccTranslation("network.server.listening", boundPort)); return boundPort; diff --git a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java index f2a38296..a1959eae 100644 --- a/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java +++ b/core/src/main/java/com/xujiayao/discord_mc_chat/server/ServerHandler.java @@ -9,8 +9,8 @@ import com.xujiayao.discord_mc_chat.network.packets.HandshakePacket; import com.xujiayao.discord_mc_chat.network.packets.KeepAlivePacket; import com.xujiayao.discord_mc_chat.network.packets.LoginSuccessPacket; import com.xujiayao.discord_mc_chat.network.packets.Packet; -import com.xujiayao.discord_mc_chat.utils.config.ConfigManager; import com.xujiayao.discord_mc_chat.utils.CryptUtils; +import com.xujiayao.discord_mc_chat.utils.config.ConfigManager; import com.xujiayao.discord_mc_chat.utils.config.ModeManager; import com.xujiayao.discord_mc_chat.utils.i18n.I18nManager; import io.netty.channel.ChannelHandlerContext; @@ -31,7 +31,7 @@ public class ServerHandler extends SimpleChannelInboundHandler { private String expectedNonce; private boolean authenticated = false; private String clientName; - + public ServerHandler(NettyServer server) { this.server = server; } @@ -40,7 +40,7 @@ public class ServerHandler extends SimpleChannelInboundHandler { public void channelActive(ChannelHandlerContext ctx) { // Wait for handshake } - + @Override public void channelInactive(ChannelHandlerContext ctx) { if (clientName != null) {