Server.Network.ByteQueue.Dequeue C# (CSharp) Méthode

Dequeue() public méthode

public Dequeue ( byte buffer, int offset, int size ) : int
buffer byte
offset int
size int
Résultat int
		public int Dequeue( byte[] buffer, int offset, int size )
		{
			if ( size > m_Size )
				size = m_Size;

			if ( size == 0 )
				return 0;

			if ( m_Head < m_Tail )
			{
				Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, size );
			}
			else
			{
				int rightLength = ( m_Buffer.Length - m_Head );

				if ( rightLength >= size )
				{
					Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, size );
				}
				else
				{
					Buffer.BlockCopy( m_Buffer, m_Head, buffer, offset, rightLength );
					Buffer.BlockCopy( m_Buffer, 0, buffer, offset + rightLength, size - rightLength );
				}
			}

			m_Head = ( m_Head + size ) % m_Buffer.Length;
			m_Size -= size;

			if ( m_Size == 0 )
			{
				m_Head = 0;
				m_Tail = 0;
			}

			return size;
		}

Usage Example

Exemple #1
0
        private bool HandleSeed(NetState ns, ByteQueue buffer)
        {
            if (buffer.GetPacketID() == 0xEF)
            {
                // new packet in client	6.0.5.0	replaces the traditional seed method with a	seed packet
                // 0xEF	= 239 =	multicast IP, so this should never appear in a normal seed.	 So	this is	backwards compatible with older	clients.
                ns.Seeded = true;
                return(true);
            }
            else if (buffer.Length >= 4)
            {
                byte[] m_Peek = new byte[4];

                buffer.Dequeue(m_Peek, 0, 4);

                int seed = (m_Peek[0] << 24) | (m_Peek[1] << 16) | (m_Peek[2] << 8) | m_Peek[3];

                if (seed == 0)
                {
                    Console.WriteLine("Login: {0}: Invalid client detected, disconnecting", ns);
                    ns.Dispose();
                    return(false);
                }

                ns.m_Seed = seed;
                ns.Seeded = true;
                return(true);
            }
            else
            {
                return(false);
            }
        }
All Usage Examples Of Server.Network.ByteQueue::Dequeue