public static int GetBytes(this FrameType frameType, DotNetty.Buffers.IByteBuffer input) { switch (frameType) { case FrameType.VariableByte: return(input.ReadByte()); case FrameType.VariableShort: return(input.ReadUnsignedShort()); default: throw new ArgumentException("Invalid frameType input argument"); } }
public override void ChannelRead(IChannelHandlerContext context, object message) { DotNetty.Buffers.IByteBuffer buffer = message as DotNetty.Buffers.IByteBuffer; if (buffer != null) { Console.WriteLine("Received from client[" + context.Channel.RemoteAddress + "]: " + buffer.ToString(Encoding.UTF8)); } var newBuffer = DotNetty.Buffers.Unpooled.WrappedBuffer(buffer.ToArray()); System.Threading.Thread th = new System.Threading.Thread((msg) =>//使用新线程处理业务,避免阻塞ChannelRead方法处理复杂业务时,导致不同次收到的消息连成一片。 { //这里是业务逻辑代码。 //System.Threading.Thread.Sleep(2000); //下发过程。 context.WriteAndFlushAsync(msg); }); th.IsBackground = true; th.Start(newBuffer); }