mirror of
https://github.com/System-End/Discord-MC-Chat.git
synced 2026-04-19 19:45:14 +00:00
优化网络连接处理:调整日志级别,增加重连控制逻辑
This commit is contained in:
parent
421e24b5f0
commit
1d14bc3e7e
3 changed files with 21 additions and 11 deletions
|
|
@ -28,6 +28,7 @@ public class ClientHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
|
||||
private final NettyClient client;
|
||||
private final CompletableFuture<Boolean> initialLoginFuture;
|
||||
private boolean allowReconnect = true; // Default to true for network errors
|
||||
|
||||
public ClientHandler(NettyClient client, CompletableFuture<Boolean> initialLoginFuture) {
|
||||
this.client = client;
|
||||
|
|
@ -41,12 +42,16 @@ public class ClientHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
|
||||
@Override
|
||||
public void channelInactive(ChannelHandlerContext ctx) {
|
||||
LOGGER.info(I18nManager.getDmccTranslation("client.network.disconnected_generic"));
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("client.network.disconnected_generic"));
|
||||
|
||||
// Trigger reconnection if this was not an intentional stop
|
||||
if (client.isRunning()) {
|
||||
LOGGER.info(I18nManager.getDmccTranslation("client.network.reconnecting"));
|
||||
// Trigger reconnection if this was not an intentional stop AND the server didn't explicitly reject us
|
||||
if (client.isRunning() && allowReconnect) {
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("client.network.reconnecting"));
|
||||
client.scheduleReconnect();
|
||||
} else {
|
||||
// If we are not allowed to reconnect, we should probably stop the client fully
|
||||
// to prevent any background threads from lingering or confusing state.
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -65,6 +70,11 @@ public class ClientHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
}
|
||||
|
||||
} else if (packet instanceof DisconnectPacket p) {
|
||||
// If we receive a DisconnectPacket, it means the server explicitly rejected us.
|
||||
// In most cases (whitelist, auth fail, version mismatch), retrying immediately won't help.
|
||||
// So we disable reconnection.
|
||||
allowReconnect = false;
|
||||
|
||||
String reason = I18nManager.getDmccTranslation(p.key, p.args);
|
||||
LOGGER.error(I18nManager.getDmccTranslation("client.network.disconnected_reason", reason));
|
||||
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ public class NettyClient {
|
|||
b.connect(host, port).addListener((ChannelFuture future) -> {
|
||||
if (future.isSuccess()) {
|
||||
// Connection established
|
||||
reconnectDelay.set(2); // Reset delay on success
|
||||
reconnectDelay.set(1); // Reset delay on success
|
||||
} else {
|
||||
if (isInitialAttempt) {
|
||||
initialLoginFuture.completeExceptionally(future.cause());
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
@Override
|
||||
public void channelInactive(ChannelHandlerContext ctx) {
|
||||
if (clientName != null) {
|
||||
LOGGER.info(I18nManager.getDmccTranslation("server.network.client_disconnected_normal", clientName));
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.client_disconnected_normal", clientName));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
case HandshakePacket p -> {
|
||||
if (!isWhitelisted(p.serverName)) {
|
||||
String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.not_whitelisted", p.serverName);
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
LOGGER.error(I18nManager.getDmccTranslation("server.network.reject", p.serverName, reason));
|
||||
ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.not_whitelisted", p.serverName));
|
||||
ctx.close();
|
||||
return;
|
||||
|
|
@ -62,7 +62,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
|
||||
if (!Constants.VERSION.equals(p.version)) {
|
||||
String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.version_mismatch", p.version, Constants.VERSION);
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
LOGGER.error(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.version_mismatch", p.version, Constants.VERSION));
|
||||
ctx.close();
|
||||
return;
|
||||
|
|
@ -82,7 +82,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
// TODO: Add to active clients list
|
||||
} else {
|
||||
String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.auth_failed");
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
LOGGER.error(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.auth_failed"));
|
||||
ctx.close();
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
// Handle other packets if authenticated
|
||||
if (!authenticated) {
|
||||
String reason = I18nManager.getDmccTranslation("server.network.disconnect_reasons.not_authenticated");
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
LOGGER.error(I18nManager.getDmccTranslation("server.network.reject", clientName, reason));
|
||||
ctx.writeAndFlush(new DisconnectPacket("server.network.disconnect_reasons.not_authenticated"));
|
||||
ctx.close();
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ public class ServerHandler extends SimpleChannelInboundHandler<Packet> {
|
|||
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
|
||||
if (evt instanceof IdleStateEvent e) {
|
||||
if (e.state() == IdleState.READER_IDLE) {
|
||||
LOGGER.warn(I18nManager.getDmccTranslation("server.network.client_timeout", clientName != null ? clientName : "unknown"));
|
||||
LOGGER.error(I18nManager.getDmccTranslation("server.network.client_timeout", clientName != null ? clientName : "unknown"));
|
||||
ctx.close();
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue