Пример #1
0
        public NettyClient(string ip, int port, BasedFrameDecoderKind kind = BasedFrameDecoderKind.None) : base(false)
        {
            _group = new MultithreadEventLoopGroup();
            var endPoint = GetEndPoint(ip, port);

            InitializeAsync(endPoint, kind);
        }
Пример #2
0
 public NettyServer(int port, BasedFrameDecoderKind kind = BasedFrameDecoderKind.None) : base(true)
 {
     _bootstrap = new ServerBootstrap();
     _bossGroup = new MultithreadEventLoopGroup();
     _workGroup = new MultithreadEventLoopGroup();
     InitializeAsync(port, kind);
 }
Пример #3
0
        private async void InitializeAsync(int port, BasedFrameDecoderKind kind)
        {
            _bootstrap = await Task.Run(() =>
            {
                try
                {
                    var bootstrap = new ServerBootstrap()
                                    .Group(_bossGroup, _workGroup)
                                    .Channel <TcpServerSocketChannel>()
                                    .Option(ChannelOption.SoBacklog, 1024)
                                    .Handler(new LoggingHandler(LogLevel.INFO))
                                    .ChildHandler(new ActionChannelInitializer <ISocketChannel>(ch =>
                    {
                        var encoder = new StringEncoder();
                        var decoder = new StringDecoder();

                        var pipeline = ch.Pipeline;
                        switch (kind)
                        {
                        case BasedFrameDecoderKind.None:
                            break;

                        case BasedFrameDecoderKind.LengthFieldBasedFrame:
                            pipeline.AddLast(new LengthFieldPrepender(2), new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
                            break;

                        case BasedFrameDecoderKind.LineBasedFrame:
                            pipeline.AddLast(new LineBasedFrameDecoder(int.MaxValue));
                            break;

                        default:
                            break;
                        }
                        pipeline.AddLast(encoder, decoder, new ChannelHandler(this));
                    }));
                    bootstrap.BindAsync(port);
                    return(bootstrap);
                }
                catch (Exception e)
                {
                    return(null);
                }
            });

            if (_bootstrap == null)
            {
                throw new Exception("初始化Netty服务失败!");
            }
        }
Пример #4
0
        private async void InitializeAsync(EndPoint endPoint, BasedFrameDecoderKind kind)
        {
            _bootstrap = await Task.Run(() =>
            {
                try
                {
                    var bootstrap = new Bootstrap()
                                    .Group(_group)
                                    .Channel <TcpSocketChannel>()
                                    .Option(ChannelOption.TcpNodelay, true)
                                    .Handler(new ActionChannelInitializer <ISocketChannel>(ch =>
                    {
                        var encoder  = new StringEncoder();
                        var decoder  = new StringDecoder();
                        var pipeline = ch.Pipeline;
                        switch (kind)
                        {
                        case BasedFrameDecoderKind.None:
                            break;

                        case BasedFrameDecoderKind.LengthFieldBasedFrame:
                            pipeline.AddLast(new LengthFieldPrepender(2), new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
                            break;

                        case BasedFrameDecoderKind.LineBasedFrame:
                            pipeline.AddLast(new LineBasedFrameDecoder(int.MaxValue));
                            break;

                        default:
                            break;
                        }
                        pipeline.AddLast(encoder, decoder, new ChannelHandler(this, false));
                    }));
                    return(bootstrap);
                }
                catch (Exception e)
                {
                }
                return(null);
            });

            if (_bootstrap == null)
            {
                throw new Exception();
            }
            DoConnect(_bootstrap, endPoint);
        }