public IAsyncResult BeginReadLine(AsyncCallback callback, Object state)
{
if (!BufferedAsync)
throw new Exception("BufferedAsync must be true to use BeginReadLine");
AsyncReadLineRequest lRequest;
if (fBuffer != null)
{
for (Int32 i = fBufferStart; i < fBufferEnd; i++)
{
if (fBuffer[i] != 10)
continue;
Int32 lLen = i - fBufferStart;
if (lLen > 0 && fBuffer[i - 1] == 13)
lLen--;
lRequest = new AsyncReadLineRequest(state, callback);
lRequest.Data.Write(fBuffer, fBufferStart, lLen);
lRequest.State = AsyncReadLineState.SyncDone;
fBufferStart = i + 1;
callback(lRequest);
return lRequest;
}
}
lRequest = new AsyncReadLineRequest(state, callback);
if (fBuffer != null)
lRequest.Data.Write(fBuffer, fBufferStart, fBufferEnd - fBufferStart);
else
fBuffer = new Byte[BUFFER_SIZE];
fBufferStart = 0;
fBufferEnd = 0;
try
{
IntBeginRead(fBuffer, 0, fBuffer.Length, IntReadLineCallback, lRequest);
}
catch (ObjectDisposedException) // disconnect from this side
{
TriggerAsyncDisconnect();
throw;
}
catch (SocketException) // disconnect
{
TriggerAsyncDisconnect();
throw;
}
return lRequest;
}