public void AcceptPackets()
{
List<byte> RxBuffer = new List<byte>();
while(_mClient.Connected)
{
try
{
// TODO: This is really really messy.
byte[] rxbuf = new byte[256*1024];
int available = _mStream.Read(rxbuf, 0, 256 * 1024);
byte[] rxbuf2 = new byte[available];
Array.Copy(rxbuf, rxbuf2, available);
RxBuffer.AddRange(rxbuf2);
while (RxBuffer.Count >= 6)
{
if (RxBuffer.Count > 2*1024*1024) // Cap buffer at 2MiB
RxBuffer.RemoveRange(0, RxBuffer.Count - 2*1024*1024); // remove x bytes so 2 MiB remains.
try
{
if (RxBuffer[0] == (byte) '$' && RxBuffer[1] == (byte) '#') /// 0x24 + 0x23
{
int size = BitConverter.ToInt32(RxBuffer.ToArray(), 2);
if (RxBuffer.Count > size)
{
RxBuffer.RemoveRange(0, 6);
NetworkPacket pack =
(NetworkPacket) ByteMethods.DeserializeFromBytes(RxBuffer.ToArray());
if (Packet != null)
Packet(pack);
RxBuffer.RemoveRange(0, size);
}
else
break;
}
}
catch (Exception ex)
{
}
int next = RxBuffer.IndexOf((byte) '$');
if (next >= 2)
RxBuffer.RemoveRange(0, next - 1);
}
}
catch (Exception ex)
{
}
Thread.Sleep(5);
}
}