private void OnReceive(byte[] bytes, int length)
{
mMemoryStream.Seek(0, SeekOrigin.End);
mMemoryStream.Write(bytes, 0, length);
//Reset to beginning
mMemoryStream.Seek(0, SeekOrigin.Begin);
while (RemainingBytes() > 2)
{
ushort messageLen = mBinaryReader.ReadUInt16();
if (RemainingBytes() >= messageLen)
{
MemoryStream ms = new MemoryStream();
BinaryWriter writer = new BinaryWriter(ms);
writer.Write(mBinaryReader.ReadBytes(messageLen));
ms.Seek(0, SeekOrigin.Begin);
OnReceivedMessage(ms);
}
else
{
//Back up the position two bytes
mMemoryStream.Position = mMemoryStream.Position - 2;
break;
}
}
//Create a new stream with any leftover bytes
byte[] leftover = mBinaryReader.ReadBytes((int)RemainingBytes());
mMemoryStream.SetLength(0); //Clear
mMemoryStream.Write(leftover, 0, leftover.Length);
}