You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-16 07:06:30 +09:00
Now sets NeedFlushSendQueue whenever a stored message exists in any channel
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user