From c185b3b16fa5867ce7e7682927fee90d4ec23b6b Mon Sep 17 00:00:00 2001 From: lidgren Date: Tue, 7 Sep 2010 06:53:23 +0000 Subject: [PATCH] NetConnection.UnsentBytesCount added --- Lidgren.Network/NetConnection.cs | 27 +++++++++++++++++++++++++++ Lidgren.Network/NetQueue.cs | 16 ++++++++++++++++ Lidgren.Network/NetUtility.cs | 2 -- Samples/DurableClient/Program.cs | 1 + UnitTests/NetQueueTests.cs | 12 +++++++++++- 5 files changed, 55 insertions(+), 3 deletions(-) diff --git a/Lidgren.Network/NetConnection.cs b/Lidgren.Network/NetConnection.cs index 3b29af0..e2396a8 100644 --- a/Lidgren.Network/NetConnection.cs +++ b/Lidgren.Network/NetConnection.cs @@ -82,6 +82,33 @@ namespace Lidgren.Network /// public NetPeer Owner { get { return m_owner; } } + /// + /// Gets the number of bytes queued for sending to this connection + /// + public int UnsentBytesCount + { + get + { + int mtu = m_owner.Configuration.MaximumTransmissionUnit - NetConstants.FragmentHeaderSize; + int retval = 0; + + NetSending[] arr = m_unsentMessages.ToArray(); + foreach (NetSending send in arr) + { + if (send.FragmentGroupId == 0) + { + retval += send.Message.LengthBytes; + } + else + { + int thisFragmentLength = (send.FragmentNumber == send.FragmentTotalCount - 1 ? (send.Message.LengthBytes - (mtu * (send.FragmentTotalCount - 1))) : mtu); + retval += thisFragmentLength; + } + } + return retval; + } + } + internal NetConnection(NetPeer owner, IPEndPoint remoteEndpoint) { m_owner = owner; diff --git a/Lidgren.Network/NetQueue.cs b/Lidgren.Network/NetQueue.cs index f23379b..53859e1 100644 --- a/Lidgren.Network/NetQueue.cs +++ b/Lidgren.Network/NetQueue.cs @@ -195,6 +195,22 @@ namespace Lidgren.Network return false; } + public T[] ToArray() + { + lock (m_lock) + { + T[] retval = new T[m_size]; + int ptr = m_head; + for (int i = 0; i < m_size; i++) + { + retval[i] = m_items[ptr++]; + if (ptr >= m_items.Length) + ptr = 0; + } + return retval; + } + } + public void Clear() { lock (m_lock) diff --git a/Lidgren.Network/NetUtility.cs b/Lidgren.Network/NetUtility.cs index 9335d11..1a453ca 100644 --- a/Lidgren.Network/NetUtility.cs +++ b/Lidgren.Network/NetUtility.cs @@ -31,8 +31,6 @@ namespace Lidgren.Network /// public static class NetUtility { - private static Regex s_regIP; - /// /// Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number /// diff --git a/Samples/DurableClient/Program.cs b/Samples/DurableClient/Program.cs index bd3ac10..493209d 100644 --- a/Samples/DurableClient/Program.cs +++ b/Samples/DurableClient/Program.cs @@ -133,6 +133,7 @@ namespace DurableClient bdr.AppendLine("SENT Reliable ordered: " + s_reliableOrderedNr[0] + ", " + s_reliableOrderedNr[1] + ", " + s_reliableOrderedNr[2]); bdr.AppendLine("SENT Sequenced: " + s_sequencedNr[0] + ", " + s_sequencedNr[1] + ", " + s_sequencedNr[2]); + bdr.AppendLine("Unsent bytes: " + conn.UnsentBytesCount); MainForm.label1.Text = bdr.ToString(); } } diff --git a/UnitTests/NetQueueTests.cs b/UnitTests/NetQueueTests.cs index 8be4c9e..220db34 100644 --- a/UnitTests/NetQueueTests.cs +++ b/UnitTests/NetQueueTests.cs @@ -8,12 +8,18 @@ namespace UnitTests { public static void Run() { - NetQueue queue = new NetQueue(8); + NetQueue queue = new NetQueue(4); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); + int[] arr = queue.ToArray(); + if (arr.Length != 3) + throw new Exception("NetQueue.ToArray failure"); + if (arr[0] != 1 || arr[1] != 2 || arr[2] != 3) + throw new Exception("NetQueue.ToArray failure"); + bool ok; int a; @@ -69,6 +75,10 @@ namespace UnitTests if (queue.Count != 0) throw new Exception("NetQueue.Clear failed"); + int[] arr2 = queue.ToArray(); + if (arr2.Length != 0) + throw new Exception("NetQueue.ToArray failure"); + Console.WriteLine("NetQueue tests OK"); } }