RemObjects.InternetPack.Http.AsyncHttpWorker.SendResponse C# (CSharp) Method

SendResponse() public method

public SendResponse ( ) : void
return void
		public void SendResponse()
		{
			try
			{
				fContext.CurrentResponse.KeepAlive = ((AsyncHttpServer)AsyncOwner).KeepAlive;
				Byte[] lHeader = Encoding.ASCII.GetBytes(fContext.CurrentResponse.Header.ToString());

				if (lHeader.Length >= 4096 || fContext.CurrentResponse.ContentSource == ContentSource.ContentNone)
				{
					fBodyOffset = 0;

					switch (fContext.CurrentResponse.ContentSource)
					{
						case ContentSource.ContentBytes:
							DataConnection.BeginWrite(lHeader, 0, fBodyOffset, ResponseBodyCallback, fContext.CurrentResponse.ContentBytes);
							break;

						case ContentSource.ContentString:
							Byte[] lBuffer = fContext.CurrentResponse.Encoding.GetBytes(fContext.CurrentResponse.ContentString);
							DataConnection.BeginWrite(lHeader, 0, fBodyOffset, ResponseBodyCallback, lBuffer);
							break;

						case ContentSource.ContentStream:
							fContext.CurrentResponse.ContentStream.Position = 0;
							DataConnection.BeginWrite(lHeader, 0, fBodyOffset, ResponseBodyCallback, fContext.CurrentResponse.ContentStream);
							break;

						default:
							DataConnection.BeginWrite(lHeader, 0, fBodyOffset, ResponseBodyCallback, null);
							break;
					}
				}
				else
				{
					if (fBodyBuffer == null)
						fBodyBuffer = new Byte[4096];

					Array.Copy(lHeader, 0, fBodyBuffer, 0, lHeader.Length);
					fBodyOffset = fBodyBuffer.Length - lHeader.Length;

					switch (fContext.CurrentResponse.ContentSource)
					{
						case ContentSource.ContentBytes:
							if (fBodyOffset > fContext.CurrentResponse.ContentBytes.Length)
								fBodyOffset = fContext.CurrentResponse.ContentBytes.Length;
							Array.Copy(fContext.CurrentResponse.ContentBytes, 0, fBodyBuffer, lHeader.Length, fBodyOffset);
							DataConnection.BeginWrite(fBodyBuffer, 0, fBodyOffset + lHeader.Length, ResponseBodyCallback, fContext.CurrentResponse.ContentBytes);
							break;

						case ContentSource.ContentString:
							Byte[] lBuffer = fContext.CurrentResponse.Encoding.GetBytes(fContext.CurrentResponse.ContentString);
							if (fBodyOffset > lBuffer.Length)
								fBodyOffset = lBuffer.Length;
							Array.Copy(lBuffer, 0, fBodyBuffer, lHeader.Length, fBodyOffset);
							DataConnection.BeginWrite(fBodyBuffer, 0, fBodyOffset + lHeader.Length, ResponseBodyCallback, lBuffer);
							break;

						case ContentSource.ContentStream:
							fContext.CurrentResponse.ContentStream.Position = 0;
							fBodyOffset = fContext.CurrentResponse.ContentStream.Read(fBodyBuffer, lHeader.Length, fBodyOffset);
							DataConnection.BeginWrite(fBodyBuffer, 0, fBodyOffset + lHeader.Length, ResponseBodyCallback, fContext.CurrentResponse.ContentStream);
							break;

						default:
							DataConnection.BeginWrite(lHeader, 0, fBodyOffset, ResponseBodyCallback, null);
							break;
					}
				}
			}
			catch (ConnectionClosedException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
			}
			catch (SocketException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
			}
			catch (ObjectDisposedException)
			{
				this.fOwner.TriggerHttpResponseFailed(new AsyncHttpRequestEventArgs(this.DataConnection, this.fContext));
				Done();
			}
		}