Lidgren.Network.NetUtility.RelativeSequenceNumber C# (CSharp) Méthode

RelativeSequenceNumber() static private méthode

static private RelativeSequenceNumber ( int nr, int expected ) : int
nr int
expected int
Résultat int
		internal static int RelativeSequenceNumber(int nr, int expected)
		{
			int retval = ((nr + NetConstants.NumSequenceNumbers) - expected) % NetConstants.NumSequenceNumbers;
			if (retval > (NetConstants.NumSequenceNumbers / 2))
				retval -= NetConstants.NumSequenceNumbers;
			return retval;
		}

Usage Example

        // remoteWindowStart is remote expected sequence number; everything below this has arrived properly
        // seqNr is the actual nr received
        internal override void ReceiveAcknowledge(double now, int seqNr)
        {
            // late (dupe), on time or early ack?
            int relate = NetUtility.RelativeSequenceNumber(seqNr, m_windowStart);

            if (relate < 0)
            {
                //m_connection.m_peer.LogDebug("Received late/dupe ack for #" + seqNr);
                return;                 // late/duplicate ack
            }

            if (relate == 0)
            {
                //m_connection.m_peer.LogDebug("Received right-on-time ack for #" + seqNr);

                // ack arrived right on time
                NetException.Assert(seqNr == m_windowStart);

                m_receivedAcks[m_windowStart] = false;
                m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;

                return;
            }

            // Advance window to this position
            m_receivedAcks[seqNr] = true;

            while (m_windowStart != seqNr)
            {
                m_receivedAcks[m_windowStart] = false;
                m_windowStart = (m_windowStart + 1) % NetConstants.NumSequenceNumbers;
            }
        }
All Usage Examples Of Lidgren.Network.NetUtility::RelativeSequenceNumber