using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DotNetty.Handlers.Timeout; using DotNetty.Transport.Bootstrapping; using DotNetty.Transport.Channels; using DotNetty.Transport.Channels.Sockets; using NotNettyServer; namespace TestServer { class Program { private static int Port = 4001; static void Main(string[] args) { Console.WriteLine("Server"); RunServerAsync().Wait(); } static async Task RunServerAsync() { var bossGroup = new MultithreadEventLoopGroup(1); var workerGroup = new MultithreadEventLoopGroup(); try { var bootstrap = new ServerBootstrap(); bootstrap .Group(bossGroup, workerGroup) .Channel() .Option(ChannelOption.SoBacklog, 1024) .ChildHandler(new ActionChannelInitializer(channel => { IChannelPipeline pipeline = channel.Pipeline; // pipeline.AddLast("framing-enc", new LengthFieldPrepender(10)); // pipeline.AddLast("framing-dec", new LengthFieldBasedFrameDecoder(ushort.MaxValue, 10, 2, 1, 0)); pipeline.AddLast("idle", new IdleStateHandler(10, 20, 15)); pipeline.AddLast("echo", new ServerHandler()); })); IChannel boundChannel = await bootstrap.BindAsync(Port); Console.ReadLine(); await boundChannel.CloseAsync(); } finally { await Task.WhenAll( bossGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)), workerGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1))); } } } }