HttpServer.HttpContext.OnReceive C# (CSharp) Method

OnReceive() private method

Interpret incoming data.
private OnReceive ( IAsyncResult ar ) : void
ar IAsyncResult
return void
		private void OnReceive(IAsyncResult ar)
		{
			// been closed by our side.
			if (Stream == null)
				return;

			_context = this;
			HttpFactory.Current = HttpFactory;

			try
			{
				int bytesLeft = Stream.EndRead(ar);
				if (bytesLeft == 0)
				{
					_logger.Trace("Client disconnected.");
					Close();
					return;
				}

				_logger.Debug(Socket.RemoteEndPoint + " received " + bytesLeft + " bytes.");

				if (bytesLeft < 5000)
				{
                    string temp = Encoding.Default.GetString(_buffer, 0, bytesLeft);
					_logger.Trace(temp);
				}

				int offset = ParseBuffer(bytesLeft);
				bytesLeft -= offset;

				if (bytesLeft > 0)
				{
					_logger.Warning("Moving " + bytesLeft + " from " + offset + " to beginning of array.");
					Buffer.BlockCopy(_buffer, offset, _buffer, 0, bytesLeft);
				}
				Stream.BeginRead(_buffer, 0, _buffer.Length - offset, OnReceive, null);
			}
			catch (ParserException err)
			{
				_logger.Warning(err.ToString());
				var response = new Response("HTTP/1.0", HttpStatusCode.BadRequest, err.Message);
				var generator = HttpFactory.Current.Get<ResponseWriter>();
			    generator.SendErrorPage(this, response, err);
				Close();
			}
			catch (Exception err)
			{
				if (!(err is IOException))
				{
					_logger.Error("Failed to read from stream: " + err);
                    var responseWriter = HttpFactory.Current.Get<ResponseWriter>();
				    var response = new Response("HTTP/1.0", HttpStatusCode.InternalServerError, err.Message);
				    responseWriter.SendErrorPage(this, response, err);
				}

				Close();
			}
		}