package jk_5.nailed.server.network; import io.netty.channel.*; import io.netty.handler.timeout.ReadTimeoutHandler; import jk_5.nailed.server.network.handler.ServerStartingConnectionDestroyer; import net.minecraft.network.EnumPacketDirection; import net.minecraft.network.NetworkManager; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.NetHandlerHandshakeTCP; import net.minecraft.util.MessageDeserializer; import net.minecraft.util.MessageDeserializer2; import net.minecraft.util.MessageSerializer; import net.minecraft.util.MessageSerializer2; @ChannelHandler.Sharable public class NettyChannelInitializer extends ChannelInitializer<Channel> { public static final NettyChannelInitializer INSTANCE = new NettyChannelInitializer(); public static boolean serverStarting = false; @Override protected void initChannel(Channel ch) throws Exception { try{ ch.config().setOption(ChannelOption.IP_TOS, 24); }catch(ChannelException e){ } try{ ch.config().setOption(ChannelOption.TCP_NODELAY, false); }catch(ChannelException e){ } ChannelPipeline pipe = ch.pipeline(); pipe.addLast("timeout", new ReadTimeoutHandler(30)); //pipe.addLast("legacy_query", new PingResponseHandler) //TODO pipe.addLast("splitter", new MessageDeserializer2()); pipe.addLast("decoder", new MessageDeserializer(EnumPacketDirection.SERVERBOUND)); pipe.addLast("prepender", new MessageSerializer2()); pipe.addLast("encoder", new MessageSerializer(EnumPacketDirection.CLIENTBOUND)); if(serverStarting) pipe.addLast(ServerStartingConnectionDestroyer.INSTANCE); NetworkManager manager = new NetworkManager(EnumPacketDirection.SERVERBOUND); NailedNetworkManager.networkManagers.add(manager); pipe.addLast("packet_handler", manager); manager.setNetHandler(new NetHandlerHandshakeTCP(MinecraftServer.getServer(), manager)); } }