private bool OnReceivingFragment(byte[] buffer, IPEndPoint endpointLastsender) { if (buffer.Length > 4 && buffer[0] == 250 && buffer[1] == 250 && buffer[2] == 250 && buffer[3] == 250) { MemoryStream bufferStream; if (this.m_listfragmentsPerConnection.TryGetValue(endpointLastsender, out bufferStream) == false) { if (m_listPoolMemoryStreams.Count == 0) { bufferStream = new MemoryStream(); } else { bufferStream = m_listPoolMemoryStreams.Dequeue(); } this.m_listfragmentsPerConnection[endpointLastsender] = bufferStream; } bufferStream.Write(buffer, 4, buffer.Length - 4); return(true); } if (this.m_listfragmentsPerConnection.TryGetValue(endpointLastsender, out MemoryStream ms)) { byte[] bufferEnd = ms.ToArray(); ListStackPackets.Enqueue(NetworkReceivedPacket.GetPoolObject(endpointLastsender, bufferEnd)); ms.SetLength(0); m_listPoolMemoryStreams.Enqueue(ms); this.m_listfragmentsPerConnection.Remove(endpointLastsender); } return(false); }
private void Receiving(object sender) { IPEndPoint endpointLastsender = new IPEndPoint(IPAddress.Any, 0); byte[] buffer = new byte[1024]; while (true) { try { if (this.Status && this.BaseSocket != null) { buffer = this.BaseSocket.Receive(ref endpointLastsender); if (this.OnReceivingFragment(buffer, endpointLastsender)) { continue; } var packetObject = NetworkReceivedPacket.GetPoolObject(endpointLastsender, buffer); ListStackPackets.Enqueue(packetObject); } else { Thread.Sleep(10); } } catch { } } }