From f65504518cdfee3bb57104b2ede89831cdbab51a Mon Sep 17 00:00:00 2001 From: lidgren Date: Thu, 17 Jun 2010 17:47:15 +0000 Subject: [PATCH] Fragmentation fix --- Lidgren.Network/NetConnection.cs | 7 +++++++ Samples/BarebonesClient/Program.cs | 3 ++- Samples/BarebonesServer/Program.cs | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Lidgren.Network/NetConnection.cs b/Lidgren.Network/NetConnection.cs index 59b09ec..5ab0116 100644 --- a/Lidgren.Network/NetConnection.cs +++ b/Lidgren.Network/NetConnection.cs @@ -28,6 +28,8 @@ namespace Lidgren.Network [DebuggerDisplay("RemoteEndpoint={m_remoteEndpoint} Status={m_status}")] public partial class NetConnection { + private static readonly NetFragmentationInfo s_genericFragmentationInfo = new NetFragmentationInfo(); + private readonly NetPeer m_owner; internal readonly IPEndPoint m_remoteEndpoint; internal double m_lastHeardFrom; @@ -402,6 +404,8 @@ namespace Lidgren.Network im.m_sequenceNumber = channelSequenceNumber; im.m_senderConnection = this; im.m_senderEndpoint = m_remoteEndpoint; + if (isFragment) + im.m_fragmentationInfo = s_genericFragmentationInfo; m_owner.LogVerbose("Withholding " + im + " (waiting for " + m_nextExpectedReliableSequence[reliableSlot] + ")"); @@ -443,11 +447,13 @@ namespace Lidgren.Network im.m_sequenceNumber = seqNr; im.m_senderConnection = this; im.m_senderEndpoint = m_remoteEndpoint; + NetFragmentationInfo info = new NetFragmentationInfo(); info.TotalFragmentCount = fragmentTotalCount; info.Received = new bool[fragmentTotalCount]; info.FragmentSize = bytesLen; im.m_fragmentationInfo = info; + m_fragmentGroups[fragmentGroup] = im; } @@ -457,6 +463,7 @@ namespace Lidgren.Network return; // all received! + im.m_fragmentationInfo = null; m_fragmentGroups.Remove(fragmentGroup); } else diff --git a/Samples/BarebonesClient/Program.cs b/Samples/BarebonesClient/Program.cs index 09d5bb4..a47e0a4 100644 --- a/Samples/BarebonesClient/Program.cs +++ b/Samples/BarebonesClient/Program.cs @@ -12,6 +12,7 @@ namespace BarebonesClient { NetPeerConfiguration config = new NetPeerConfiguration("barebones"); config.SimulatedLoss = 0.1f; + config.EnableMessageType(NetIncomingMessageType.VerboseDebugMessage); NetClient client = new NetClient(config); client.Start(); @@ -39,7 +40,7 @@ namespace BarebonesClient // temporary code to verify issue with large messages StringBuilder bdr = new StringBuilder(); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 400; i++) bdr.Append("Hallonsmurf" + i.ToString()); om.Write(bdr.ToString()); diff --git a/Samples/BarebonesServer/Program.cs b/Samples/BarebonesServer/Program.cs index 3deacb2..aed1b0f 100644 --- a/Samples/BarebonesServer/Program.cs +++ b/Samples/BarebonesServer/Program.cs @@ -13,6 +13,7 @@ namespace BarebonesServer NetPeerConfiguration config = new NetPeerConfiguration("barebones"); config.Port = 14242; config.SimulatedLoss = 0.1f; + config.EnableMessageType(NetIncomingMessageType.VerboseDebugMessage); NetServer server = new NetServer(config); server.Start(); @@ -42,7 +43,7 @@ namespace BarebonesServer // temporary code to verify issue with large messages StringBuilder bdr = new StringBuilder(); - for (int i = 0; i < 1000; i++) + for (int i = 0; i < 400; i++) bdr.Append("Hallonsmurf" + i.ToString()); string str = inc.ReadString();