RemObjects.InternetPack.Connection.IntReadLineCallback C# (CSharp) Method

IntReadLineCallback() private method

private IntReadLineCallback ( IAsyncResult ar ) : void
ar IAsyncResult
return void
		private void IntReadLineCallback(IAsyncResult ar)
		{
			AsyncReadLineRequest lRequest = (AsyncReadLineRequest)ar.AsyncState;
			try
			{
				Int32 lCount = IntEndRead(ar);
				if (lCount == 0)
				{
					TriggerAsyncDisconnect();
					return;
				}

				for (Int32 i = 0; i < lCount; i++)
				{
					if (fBuffer[i] != 10)
						continue;

					if (i > 0 && fBuffer[i - 1] == 13)
						lRequest.Data.Write(fBuffer, 0, i - 1);
					else
						lRequest.Data.Write(fBuffer, 0, i);

					fBufferStart = i + 1;
					fBufferEnd = lCount;
					lRequest.State = AsyncReadLineState.Done;
					lRequest.Callback(lRequest);

					return;
				}

				if (this.MaxLineLengthEnabled && (lRequest.Data.Length > this.MaxLineLength))
				{
					fBufferStart = 0;
					fBufferEnd = lCount;
					lRequest.State = AsyncReadLineState.MaxLineLengthReached;
					lRequest.Callback(lRequest);

					return;
				}

				lRequest.Data.Write(fBuffer, 0, lCount);
				TriggerAsyncHaveIncompleteData();
				IntBeginRead(fBuffer, 0, fBuffer.Length, IntReadLineCallback, lRequest);
			}
			catch (ObjectDisposedException) // disconnect from this side
			{
				TriggerAsyncDisconnect();
			}
			catch (SocketException) // disconnect
			{
				TriggerAsyncDisconnect();
			}
			catch (ArgumentException)
			{
			}
			catch (Exception) // different platforms throw different exceptions
			{
				TriggerAsyncDisconnect();
			}
		}