private void SendNextBuffer()
{
Debug.Assert(_partiallySentBuffer == null);
int count = 0;
ByteBufferSnapshot buffer;
while(count < _outputBuffer.Length && _bufferQueue.TryDequeue(out buffer))
{
int available = _outputBuffer.Length - count;
if(available >= buffer.Count)
{
buffer.CopyTo(0, _outputBuffer, count, buffer.Count);
count += buffer.Count;
}
else
{
buffer.CopyTo(0, _outputBuffer, count, available);
count += available;
_partiallySentBuffer = buffer;
_partiallySentBufferOffset = available;
}
}
if(count > 0)
{
SendOutputBuffer(count);
}
else if(_completedEvent.IsSet)
{
Disconnect();
}
else
{
_idleEvent.Set();
}
}