1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-17 15:46:33 +09:00

Sequence numbers now stored in dictionary per connection to enable sending the same message reliable ordered message to several connections

This commit is contained in:
lidgren
2010-05-20 18:36:19 +00:00
parent 00edeaabf4
commit 046ca06ec6
11 changed files with 84 additions and 79 deletions

View File

@@ -148,11 +148,13 @@ namespace Lidgren.Network
{
if (m_storedMessagesNotEmpty.Get(i))
{
foreach (NetOutgoingMessage om in m_storedMessages[i])
Dictionary<ushort, NetOutgoingMessage> dict = m_storedMessages[i];
foreach (ushort seqNr in m_storedMessages[i].Keys)
{
NetOutgoingMessage om = dict[seqNr];
if (now >= om.m_nextResendTime)
{
Resend(now, om);
Resend(now, seqNr, om);
break; // need to break out here; collection may have been modified
}
}
@@ -216,15 +218,9 @@ namespace Lidgren.Network
// encode message
//
ptr = msg.Encode(buffer, ptr, this);
ptr = msg.Encode(now, buffer, ptr, this);
numIncludedMessages++;
if (msg.m_type >= NetMessageType.UserReliableUnordered && msg.m_numSends == 1)
{
// message is sent for the first time, and is reliable, store for resend
StoreReliableMessage(now, msg);
}
// room to piggyback some acks?
if (m_acknowledgesToSend.Count > 0)
{
@@ -612,12 +608,12 @@ namespace Lidgren.Network
// shorten resend times
for (int i = 0; i < m_storedMessages.Length; i++)
{
List<NetOutgoingMessage> list = m_storedMessages[i];
if (list != null)
Dictionary<ushort, NetOutgoingMessage> dict = m_storedMessages[i];
if (dict != null)
{
try
{
foreach (NetOutgoingMessage om in list)
foreach (NetOutgoingMessage om in dict.Values)
om.m_nextResendTime = (om.m_nextResendTime * 0.8) - 0.05;
}
catch (InvalidOperationException)