private void HandleRead(byte[] data, int index, int length)
{
try
{
if (_readIndex >= _readBuffer.Length)
{
_readIndex = 0;
Array.Resize(ref _readBuffer, BitConverter.ToInt32(data, index));
index += 4;
}
int read = Math.Min(_readBuffer.Length - _readIndex, length - index);
Buffer.BlockCopy(data, index, _readBuffer, _readIndex, read);
_readIndex += read;
if (_readIndex >= _readBuffer.Length)
{
_asyncOperation.Post(x => OnClientRead((byte[])x), _readBuffer);
}
if (read < (length - index))
{
HandleRead(data, index + read, length);
}
}
catch { }
}