public NetworkServer(ILogger logger, PacketFactory packetFactory, ProcessorManager processorManager) { this.logger = logger; bossGroup = new MultithreadEventLoopGroup(1); workerGroup = new MultithreadEventLoopGroup(); bootstrap = new ServerBootstrap() .Option(ChannelOption.SoBacklog, 100) .Group(bossGroup, workerGroup) .Channel <TcpServerSocketChannel>() .ChildHandler(new ActionChannelInitializer <IChannel>(x => { var pipeline = x.Pipeline; var client = new NetworkClient(logger, x); var session = new WorldSession(client); client.PacketReceived += packet => { var processor = processorManager.GetPacketProcessor(packet.GetType()); if (processor is null) { return(Task.CompletedTask); } return(processor.ProcessPacket(session, packet)); }; client.Disconnected += () => { return(Task.CompletedTask); }; pipeline.AddLast("decoder", new Decoder(logger, client)); pipeline.AddLast("deserializer", new Deserializer(logger, packetFactory)); pipeline.AddLast("client", client); pipeline.AddLast("encoder", new Encoder(logger)); pipeline.AddLast("serializer", new Serializer(logger, packetFactory)); })); }