public NettyClient(string ip, int port, BasedFrameDecoderKind kind = BasedFrameDecoderKind.None) : base(false) { _group = new MultithreadEventLoopGroup(); var endPoint = GetEndPoint(ip, port); InitializeAsync(endPoint, kind); }
public NettyServer(int port, BasedFrameDecoderKind kind = BasedFrameDecoderKind.None) : base(true) { _bootstrap = new ServerBootstrap(); _bossGroup = new MultithreadEventLoopGroup(); _workGroup = new MultithreadEventLoopGroup(); InitializeAsync(port, kind); }
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服务失败!"); } }
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); }