Пример #1
0
        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));
            }));
        }