1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-16 07:06:30 +09:00
This commit is contained in:
Michael Lidgren
2015-09-27 10:52:15 +02:00
3 changed files with 16 additions and 1 deletions

View File

@@ -268,7 +268,7 @@ namespace Lidgren.Network
if (channel != null) if (channel != null)
{ {
channel.SendQueuedMessages(now); channel.SendQueuedMessages(now);
if (channel.QueuedSendsCount > 0) if (channel.NeedToSendMessages())
m_peer.m_needFlushSendQueue = true; // failed to send all queued sends; likely a full window - need to try again m_peer.m_needFlushSendQueue = true; // failed to send all queued sends; likely a full window - need to try again
} }
NetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0); NetException.Assert(m_sendBufferWritePtr < 1 || m_sendBufferNumMessages > 0);

View File

@@ -13,6 +13,8 @@ namespace Lidgren.Network
private int m_windowSize; private int m_windowSize;
private int m_sendStart; private int m_sendStart;
private bool m_anyStoredResends;
private NetBitVector m_receivedAcks; private NetBitVector m_receivedAcks;
internal NetStoredReliableMessage[] m_storedMessages; internal NetStoredReliableMessage[] m_storedMessages;
@@ -20,12 +22,18 @@ namespace Lidgren.Network
internal override int WindowSize { get { return m_windowSize; } } internal override int WindowSize { get { return m_windowSize; } }
internal override bool NeedToSendMessages()
{
return base.NeedToSendMessages() || m_anyStoredResends;
}
internal NetReliableSenderChannel(NetConnection connection, int windowSize) internal NetReliableSenderChannel(NetConnection connection, int windowSize)
{ {
m_connection = connection; m_connection = connection;
m_windowSize = windowSize; m_windowSize = windowSize;
m_windowStart = 0; m_windowStart = 0;
m_sendStart = 0; m_sendStart = 0;
m_anyStoredResends = false;
m_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers); m_receivedAcks = new NetBitVector(NetConstants.NumSequenceNumbers);
m_storedMessages = new NetStoredReliableMessage[m_windowSize]; m_storedMessages = new NetStoredReliableMessage[m_windowSize];
m_queuedSends = new NetQueue<NetOutgoingMessage>(8); m_queuedSends = new NetQueue<NetOutgoingMessage>(8);
@@ -44,6 +52,7 @@ namespace Lidgren.Network
m_receivedAcks.Clear(); m_receivedAcks.Clear();
for (int i = 0; i < m_storedMessages.Length; i++) for (int i = 0; i < m_storedMessages.Length; i++)
m_storedMessages[i].Reset(); m_storedMessages[i].Reset();
m_anyStoredResends = false;
m_queuedSends.Clear(); m_queuedSends.Clear();
m_windowStart = 0; m_windowStart = 0;
m_sendStart = 0; m_sendStart = 0;
@@ -64,6 +73,7 @@ namespace Lidgren.Network
// //
// resends // resends
// //
m_anyStoredResends = false;
for (int i = 0; i < m_storedMessages.Length; i++) for (int i = 0; i < m_storedMessages.Length; i++)
{ {
var storedMsg = m_storedMessages[i]; var storedMsg = m_storedMessages[i];
@@ -71,6 +81,8 @@ namespace Lidgren.Network
if (om == null) if (om == null)
continue; continue;
m_anyStoredResends = true;
double t = storedMsg.LastSent; double t = storedMsg.LastSent;
if (t > 0 && (now - t) > m_resendDelay) if (t > 0 && (now - t) > m_resendDelay)
{ {
@@ -131,6 +143,7 @@ namespace Lidgren.Network
m_storedMessages[storeIndex].Message = message; m_storedMessages[storeIndex].Message = message;
m_storedMessages[storeIndex].LastSent = now; m_storedMessages[storeIndex].LastSent = now;
m_storedMessages[storeIndex].SequenceNumber = seqNr; m_storedMessages[storeIndex].SequenceNumber = seqNr;
m_anyStoredResends = true;
return; return;
} }

View File

@@ -13,6 +13,8 @@ namespace Lidgren.Network
internal int QueuedSendsCount { get { return m_queuedSends.Count; } } internal int QueuedSendsCount { get { return m_queuedSends.Count; } }
internal virtual bool NeedToSendMessages() { return m_queuedSends.Count > 0; }
public int GetFreeWindowSlots() public int GetFreeWindowSlots()
{ {
return GetAllowedSends() - m_queuedSends.Count; return GetAllowedSends() - m_queuedSends.Count;