/// <summary> /// Process message /// </summary> /// <param name="context"></param> /// <param name="message"></param> /// <remarks> /// Should always call either <see cref="IPipelineHandlerContext.SendDownstream"/> or <see cref="IPipelineHandlerContext.SendUpstream"/> /// unless the handler really wants to stop the processing. /// </remarks> public virtual void HandleDownstream(IPipelineHandlerContext context, IPipelineMessage message) { var sendBuffer = message as SendBuffer; if (sendBuffer != null) { _context.Send(new BufferSlice(sendBuffer.Buffer, sendBuffer.Offset, sendBuffer.Count), sendBuffer.Count); return; } var sendSlice = message as SendSlice; if (sendSlice != null) { _context.Send(sendSlice.Slice, sendSlice.Length); return; } var send = message as SendStream; if (send != null) { _context.Send(send.Stream); return; } if (message is Disconnect) { _context.Close(); return; } throw new InvalidOperationException("Unsupported pipeline message: " + message); }