1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-16 07:06:30 +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

@@ -32,7 +32,6 @@ namespace Lidgren.Network
internal NetMessageType m_type;
internal NetMessageLibraryType m_libType;
internal ushort m_sequenceNumber;
internal IPEndPoint m_unconnectedRecipient;
@@ -99,7 +98,8 @@ namespace Lidgren.Network
return ptr;
}
internal int Encode(byte[] buffer, int ptr, NetConnection conn)
// encode and store for resending (if conn != null and message is reliable)
internal int Encode(double now, byte[] buffer, int ptr, NetConnection conn)
{
// message type
buffer[ptr++] = (byte)((int)m_type | (m_fragmentGroupId == -1 ? 0 : 128));
@@ -112,10 +112,15 @@ namespace Lidgren.Network
{
if (conn == null)
throw new NetException("Trying to encode NetMessageType " + m_type + " to unconnected endpoint!");
if (m_numSends == 0)
m_sequenceNumber = conn.GetSendSequenceNumber(m_type);
buffer[ptr++] = (byte)m_sequenceNumber;
buffer[ptr++] = (byte)(m_sequenceNumber >> 8);
ushort seqNr;
if (m_type >= NetMessageType.UserReliableUnordered)
seqNr = conn.GetSendSequenceNumber(m_type); // "disposable" sequence number
else
seqNr = conn.StoreReliableMessage(now, this);
buffer[ptr++] = (byte)seqNr;
buffer[ptr++] = (byte)(seqNr >> 8);
}
// payload length
@@ -187,8 +192,6 @@ namespace Lidgren.Network
bdr.Append('|');
bdr.Append(m_libType.ToString());
}
bdr.Append(" #");
bdr.Append(m_sequenceNumber);
bdr.Append(" sent ");
bdr.Append(m_numSends);
bdr.Append(" times]");