Ejemplo n.º 1
0
        private bool ReadFromBuffer()
        {
            if (Buffer.Empty)
            {
                return(true);
            }

            MemoryStream stream = Buffer.ToStream();

            try
            {
                G2Packet pack;
                int      bRead = ReadPacket(stream, out pack);
                pack.RemotePeer = peer;
                peer.GotPacket(pack);
                int totalRead = (int)pack.getTotalPacketLength();

                //Debug.Assert(bRead == totalRead, "ReadFromBuffer : bRead = " + bRead + " vs totalRead = " + totalRead);

                if (totalRead == Buffer.DataOffset)
                { // buffer completely and uniquely stored the packet
                    Buffer.Flush();
                }
                else if (totalRead < Buffer.DataOffset)
                {                              // buffer contains some other data
                    Buffer.Dequeue(totalRead); // remove data already read
                    return(ReadFromBuffer());  // read others packets contained
                }
                return(true);
            }
            catch (NotEnoughDataException e)
            {
                return(false);
            }
            catch (PacketException e)
            { // big endian for example
                Buffer.Flush();
                return(true);
            }
        }