You've already forked lidgren-network-gen3
mirror of
https://github.com/lidgren/lidgren-network-gen3.git
synced 2026-05-18 08:06:33 +09:00
Reliability fix
This commit is contained in:
@@ -62,8 +62,6 @@ namespace Lidgren.Network
|
|||||||
{
|
{
|
||||||
int num = ((int)NetMessageType.UserReliableOrdered + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserSequenced;
|
int num = ((int)NetMessageType.UserReliableOrdered + NetConstants.NetChannelsPerDeliveryMethod) - (int)NetMessageType.UserSequenced;
|
||||||
m_nextSendSequenceNumber = new int[num];
|
m_nextSendSequenceNumber = new int[num];
|
||||||
for(int i=0;i<m_nextSendSequenceNumber.Length;i++)
|
|
||||||
m_nextSendSequenceNumber[i] = -1; // initialize to -1; pre-increment will start sending at 0
|
|
||||||
m_lastReceivedSequenced = new ushort[num];
|
m_lastReceivedSequenced = new ushort[num];
|
||||||
m_nextForceAckTime = double.MaxValue;
|
m_nextForceAckTime = double.MaxValue;
|
||||||
}
|
}
|
||||||
@@ -71,7 +69,15 @@ namespace Lidgren.Network
|
|||||||
internal ushort GetSendSequenceNumber(NetMessageType mtp)
|
internal ushort GetSendSequenceNumber(NetMessageType mtp)
|
||||||
{
|
{
|
||||||
int slot = (int)mtp - (int)NetMessageType.UserSequenced;
|
int slot = (int)mtp - (int)NetMessageType.UserSequenced;
|
||||||
return (ushort)Interlocked.Increment(ref m_nextSendSequenceNumber[slot]);
|
int retval;
|
||||||
|
lock (m_nextSendSequenceNumber)
|
||||||
|
{
|
||||||
|
retval = m_nextSendSequenceNumber[slot];
|
||||||
|
if (retval == ushort.MaxValue)
|
||||||
|
retval = -1;
|
||||||
|
m_nextSendSequenceNumber[slot] = retval + 1;
|
||||||
|
}
|
||||||
|
return (ushort)retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static int Relate(int seqNr, int lastReceived)
|
internal static int Relate(int seqNr, int lastReceived)
|
||||||
@@ -181,7 +187,7 @@ namespace Lidgren.Network
|
|||||||
m_lastSendRespondedTo = NetTime.Now; // TODO: calculate from send.NextResend and send.NumSends
|
m_lastSendRespondedTo = NetTime.Now; // TODO: calculate from send.NextResend and send.NumSends
|
||||||
int unfin = send.Message.m_numUnfinishedSendings;
|
int unfin = send.Message.m_numUnfinishedSendings;
|
||||||
send.Message.m_numUnfinishedSendings = unfin - 1;
|
send.Message.m_numUnfinishedSendings = unfin - 1;
|
||||||
if (unfin <= 1)
|
if (unfin <= 0)
|
||||||
m_owner.Recycle(send.Message); // every sent has been acked; free the message
|
m_owner.Recycle(send.Message); // every sent has been acked; free the message
|
||||||
|
|
||||||
m_unackedSends.Remove(send);
|
m_unackedSends.Remove(send);
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ namespace Lidgren.Network
|
|||||||
if (send.MessageType >= NetMessageType.UserReliableUnordered)
|
if (send.MessageType >= NetMessageType.UserReliableUnordered)
|
||||||
{
|
{
|
||||||
// store for reliability
|
// store for reliability
|
||||||
if (send.NumSends == 0)
|
if (send.NumSends == 1)
|
||||||
m_unackedSends.Add(send);
|
m_unackedSends.Add(send);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user