1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-19 00:26:30 +09:00

Fixed number of fragments statistics, fixed dropping duplicates for early received reliable unordered messages, added dropped messages statistics

This commit is contained in:
Michael Lidgren
2015-06-09 14:10:28 +02:00
parent d111197edb
commit 387f786950
7 changed files with 48 additions and 57 deletions

View File

@@ -45,6 +45,7 @@ namespace Lidgren.Network
internal long m_sentMessages; internal long m_sentMessages;
internal long m_receivedMessages; internal long m_receivedMessages;
internal long m_droppedMessages;
internal long m_receivedFragments; internal long m_receivedFragments;
internal long m_sentBytes; internal long m_sentBytes;
@@ -99,35 +100,20 @@ namespace Lidgren.Network
// public double LastSendRespondedTo { get { return m_connection.m_lastSendRespondedTo; } } // public double LastSendRespondedTo { get { return m_connection.m_lastSendRespondedTo; } }
#if USE_RELEASE_STATISTICS #if !USE_RELEASE_STATISTICS
internal void PacketSent(int numBytes, int numMessages)
{
NetException.Assert(numBytes > 0 && numMessages > 0);
m_sentPackets++;
m_sentBytes += numBytes;
m_sentMessages += numMessages;
}
#else
[Conditional("DEBUG")] [Conditional("DEBUG")]
internal void PacketSent(int numBytes, int numMessages)
{
NetException.Assert(numBytes > 0 && numMessages > 0);
m_sentPackets++;
m_sentBytes += numBytes;
m_sentMessages += numMessages;
}
#endif #endif
internal void PacketSent(int numBytes, int numMessages)
#if USE_RELEASE_STATISTICS
internal void PacketReceived(int numBytes, int numMessages)
{ {
NetException.Assert(numBytes > 0 && numMessages > 0); NetException.Assert(numBytes > 0 && numMessages > 0);
m_receivedPackets++; m_sentPackets++;
m_receivedBytes += numBytes; m_sentBytes += numBytes;
m_receivedMessages += numMessages; m_sentMessages += numMessages;
} }
#else
#if !USE_RELEASE_STATISTICS
[Conditional("DEBUG")] [Conditional("DEBUG")]
#endif
internal void PacketReceived(int numBytes, int numMessages, int numFragments) internal void PacketReceived(int numBytes, int numMessages, int numFragments)
{ {
NetException.Assert(numBytes > 0 && numMessages > 0); NetException.Assert(numBytes > 0 && numMessages > 0);
@@ -136,18 +122,10 @@ namespace Lidgren.Network
m_receivedMessages += numMessages; m_receivedMessages += numMessages;
m_receivedFragments += numFragments; m_receivedFragments += numFragments;
} }
#endif
#if USE_RELEASE_STATISTICS #if !USE_RELEASE_STATISTICS
internal void MessageResent(MessageResendReason reason)
{
if (reason == MessageResendReason.Delay)
m_resentMessagesDueToDelay++;
else
m_resentMessagesDueToHole++;
}
#else
[Conditional("DEBUG")] [Conditional("DEBUG")]
#endif
internal void MessageResent(MessageResendReason reason) internal void MessageResent(MessageResendReason reason)
{ {
if (reason == MessageResendReason.Delay) if (reason == MessageResendReason.Delay)
@@ -155,7 +133,14 @@ namespace Lidgren.Network
else else
m_resentMessagesDueToHole++; m_resentMessagesDueToHole++;
} }
#if !USE_RELEASE_STATISTICS
[Conditional("DEBUG")]
#endif #endif
internal void MessageDropped()
{
m_droppedMessages++;
}
/// <summary> /// <summary>
/// Returns a string that represents this object /// Returns a string that represents this object
@@ -167,6 +152,7 @@ namespace Lidgren.Network
bdr.AppendLine("Current MTU: " + m_connection.m_currentMTU); bdr.AppendLine("Current MTU: " + m_connection.m_currentMTU);
bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets"); bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets");
bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets"); bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets");
bdr.AppendLine("Dropped " + m_droppedMessages + " messages (dupes/late/early)");
if (m_resentMessagesDueToDelay > 0) if (m_resentMessagesDueToDelay > 0)
bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay); bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay);

View File

@@ -490,7 +490,8 @@ namespace Lidgren.Network
bool isFragment = ((low & 1) == 1); bool isFragment = ((low & 1) == 1);
ushort sequenceNumber = (ushort)((low >> 1) | (((int)high) << 7)); ushort sequenceNumber = (ushort)((low >> 1) | (((int)high) << 7));
numFragments++; if (isFragment)
numFragments++;
ushort payloadBitLength = (ushort)(m_receiveBuffer[ptr++] | (m_receiveBuffer[ptr++] << 8)); ushort payloadBitLength = (ushort)(m_receiveBuffer[ptr++] | (m_receiveBuffer[ptr++] << 8));
int payloadByteLength = NetUtility.BytesToHoldBits(payloadBitLength); int payloadByteLength = NetUtility.BytesToHoldBits(payloadBitLength);

View File

@@ -107,32 +107,19 @@ namespace Lidgren.Network
/// </summary> /// </summary>
public int BytesInRecyclePool { get { return m_peer.m_storagePoolBytes; } } public int BytesInRecyclePool { get { return m_peer.m_storagePoolBytes; } }
#if USE_RELEASE_STATISTICS #if !USE_RELEASE_STATISTICS
internal void PacketSent(int numBytes, int numMessages)
{
m_sentPackets++;
m_sentBytes += numBytes;
m_sentMessages += numMessages;
}
#else
[Conditional("DEBUG")] [Conditional("DEBUG")]
internal void PacketSent(int numBytes, int numMessages)
{
m_sentPackets++;
m_sentBytes += numBytes;
m_sentMessages += numMessages;
}
#endif #endif
internal void PacketSent(int numBytes, int numMessages)
#if USE_RELEASE_STATISTICS
internal void PacketReceived(int numBytes, int numMessages)
{ {
m_receivedPackets++; m_sentPackets++;
m_receivedBytes += numBytes; m_sentBytes += numBytes;
m_receivedMessages += numMessages; m_sentMessages += numMessages;
} }
#else
#if !USE_RELEASE_STATISTICS
[Conditional("DEBUG")] [Conditional("DEBUG")]
#endif
internal void PacketReceived(int numBytes, int numMessages, int numFragments) internal void PacketReceived(int numBytes, int numMessages, int numFragments)
{ {
m_receivedPackets++; m_receivedPackets++;
@@ -140,7 +127,6 @@ namespace Lidgren.Network
m_receivedMessages += numMessages; m_receivedMessages += numMessages;
m_receivedFragments += numFragments; m_receivedFragments += numFragments;
} }
#endif
/// <summary> /// <summary>
/// Returns a string that represents this object /// Returns a string that represents this object

View File

@@ -66,8 +66,9 @@ namespace Lidgren.Network
if (relate < 0) if (relate < 0)
{ {
m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE");
// duplicate // duplicate
m_connection.m_statistics.MessageDropped();
m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE");
return; return;
} }
@@ -75,6 +76,7 @@ namespace Lidgren.Network
if (relate > m_windowSize) if (relate > m_windowSize)
{ {
// too early message! // too early message!
m_connection.m_statistics.MessageDropped();
m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart);
return; return;
} }

View File

@@ -42,6 +42,7 @@ namespace Lidgren.Network
if (relate < 0) if (relate < 0)
{ {
m_connection.m_statistics.MessageDropped();
m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING LATE or DUPE"); m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING LATE or DUPE");
return; return;
} }
@@ -50,6 +51,7 @@ namespace Lidgren.Network
if (relate > m_windowSize) if (relate > m_windowSize)
{ {
// too early message! // too early message!
m_connection.m_statistics.MessageDropped();
m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart);
return; return;
} }

View File

@@ -65,6 +65,7 @@ namespace Lidgren.Network
if (relate < 0) if (relate < 0)
{ {
// duplicate // duplicate
m_connection.m_statistics.MessageDropped();
m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE"); m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE");
return; return;
} }
@@ -73,10 +74,19 @@ namespace Lidgren.Network
if (relate > m_windowSize) if (relate > m_windowSize)
{ {
// too early message! // too early message!
m_connection.m_statistics.MessageDropped();
m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart); m_peer.LogDebug("Received " + message + " TOO EARLY! Expected " + m_windowStart);
return; return;
} }
if (m_earlyReceived.Get(message.m_sequenceNumber % m_windowSize))
{
// duplicate
m_connection.m_statistics.MessageDropped();
m_peer.LogVerbose("Received message #" + message.m_sequenceNumber + " DROPPING DUPLICATE");
return;
}
m_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true); m_earlyReceived.Set(message.m_sequenceNumber % m_windowSize, true);
//m_peer.LogVerbose("Received " + message + " WITHHOLDING, waiting for " + m_windowStart); //m_peer.LogVerbose("Received " + message + " WITHHOLDING, waiting for " + m_windowStart);
//m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message; //m_withheldMessages[message.m_sequenceNumber % m_windowSize] = message;

View File

@@ -20,7 +20,11 @@ namespace Lidgren.Network
int relate = NetUtility.RelativeSequenceNumber(nr, m_lastReceivedSequenceNumber + 1); int relate = NetUtility.RelativeSequenceNumber(nr, m_lastReceivedSequenceNumber + 1);
if (relate < 0) if (relate < 0)
{
m_connection.m_statistics.MessageDropped();
m_peer.LogVerbose("Received message #" + nr + " DROPPING DUPLICATE");
return; // drop if late return; // drop if late
}
m_lastReceivedSequenceNumber = nr; m_lastReceivedSequenceNumber = nr;
m_peer.ReleaseMessage(msg); m_peer.ReleaseMessage(msg);