Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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 { }
            }
        }