You've already forked lidgren-network-gen3
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:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user