Fixes exception handling
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
package io.akarin.server.core;
|
||||||
|
|
||||||
|
import io.netty.util.concurrent.Future;
|
||||||
|
import io.netty.util.concurrent.GenericFutureListener;
|
||||||
|
import net.minecraft.server.ChatComponentText;
|
||||||
|
import net.minecraft.server.NetworkManager;
|
||||||
|
|
||||||
|
public class NetworkCloseHandler implements GenericFutureListener<Future<? super Void>> {
|
||||||
|
private final NetworkManager manager;
|
||||||
|
private final ChatComponentText message;
|
||||||
|
|
||||||
|
public NetworkCloseHandler(NetworkManager instance, ChatComponentText text) {
|
||||||
|
manager = instance;
|
||||||
|
message = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void operationComplete(Future<? super Void> future) throws Exception {
|
||||||
|
manager.close(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.spigotmc.SpigotConfig;
|
import org.spigotmc.SpigotConfig;
|
||||||
@@ -20,6 +21,7 @@ import com.google.common.collect.Lists;
|
|||||||
import io.akarin.api.internal.LocalAddress;
|
import io.akarin.api.internal.LocalAddress;
|
||||||
import io.akarin.server.core.AkarinGlobalConfig;
|
import io.akarin.server.core.AkarinGlobalConfig;
|
||||||
import io.akarin.server.core.ChannelAdapter;
|
import io.akarin.server.core.ChannelAdapter;
|
||||||
|
import io.akarin.server.core.NetworkCloseHandler;
|
||||||
import io.netty.bootstrap.ServerBootstrap;
|
import io.netty.bootstrap.ServerBootstrap;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
import io.netty.channel.EventLoopGroup;
|
import io.netty.channel.EventLoopGroup;
|
||||||
@@ -27,7 +29,6 @@ import io.netty.channel.ServerChannel;
|
|||||||
import io.netty.channel.epoll.Epoll;
|
import io.netty.channel.epoll.Epoll;
|
||||||
import io.netty.channel.epoll.EpollServerSocketChannel;
|
import io.netty.channel.epoll.EpollServerSocketChannel;
|
||||||
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||||
import io.netty.util.concurrent.Future;
|
|
||||||
import io.netty.util.concurrent.GenericFutureListener;
|
import io.netty.util.concurrent.GenericFutureListener;
|
||||||
import net.minecraft.server.ChatComponentText;
|
import net.minecraft.server.ChatComponentText;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
@@ -110,15 +111,10 @@ public abstract class NonblockingServerConnection {
|
|||||||
try {
|
try {
|
||||||
manager.a(); // PAIL: NetworkManager::processReceivedPackets
|
manager.a(); // PAIL: NetworkManager::processReceivedPackets
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
logger.warn("Failed to handle packet for {}", new Object[] { manager.getSocketAddress(), ex });
|
logger.warn("Failed to handle packet for {}", manager.getSocketAddress(), ex);
|
||||||
final ChatComponentText kick = new ChatComponentText("Internal server error");
|
final ChatComponentText kick = new ChatComponentText("Internal server error");
|
||||||
|
|
||||||
manager.sendPacket(new PacketPlayOutKickDisconnect(kick), new GenericFutureListener<Future<? super Void>>() {
|
manager.sendPacket(new PacketPlayOutKickDisconnect(kick), new NetworkCloseHandler(manager, kick), new GenericFutureListener[0]);
|
||||||
@Override
|
|
||||||
public void operationComplete(Future<? super Void> future) throws Exception {
|
|
||||||
manager.close(kick);
|
|
||||||
}
|
|
||||||
}, new GenericFutureListener[0]);
|
|
||||||
manager.stopReading();
|
manager.stopReading();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user