]> git.deb.at Git - rhonda/impostor.hazel.git/commitdiff
Clean up some stuff, make some stuff public for easier statistics. There's a memory...
authorForest <chocozilla@gmail.com>
Wed, 24 Oct 2018 05:48:14 +0000 (22:48 -0700)
committerForest <chocozilla@gmail.com>
Wed, 24 Oct 2018 05:48:14 +0000 (22:48 -0700)
Hazel/Connection.cs
Hazel/ConnectionListener.cs
Hazel/IRecyclable.cs
Hazel/MessageReader.cs
Hazel/MessageWriter.cs
Hazel/ObjectPool.cs
Hazel/Udp/UdpConnection.Reliable.cs
Hazel/Udp/UdpConnection.cs
Hazel/Udp/UdpConnectionListener.cs

index 74e3a225f4203bd5226350a8f1a8785b26274980..5bb765f5a65dc16bde0e03bf819adfe6a9befb6c 100644 (file)
@@ -322,6 +322,10 @@ namespace Hazel
         {
             if (disposing)
             {
+                this.DataReceived = null;
+                this.DataReceivedRaw = null;
+                this.DataSentRaw = null;
+                this.Disconnected = null;
             }
         }
     }
index b12309e10b58df08c56b56305a063b79f13815a8..5aaf6d74103e98c0bedeb2f74fff58e93a41b3f7 100644 (file)
@@ -112,7 +112,7 @@ namespace Hazel
         /// <param name="disposing">Are we disposing?</param>
         protected virtual void Dispose(bool disposing)
         {
-
+            this.NewConnection = null;
         }
     }
 }
index 8310f25a1b58ea3430b872065668f1d08dd69f24..3e9769e70d1b87d78c10d79a08ca8bb70f71c04d 100644 (file)
@@ -9,7 +9,7 @@ namespace Hazel
     ///     Interface for all items that can be returned to an object pool.
     /// </summary>
     /// <threadsafety static="true" instance="true"/>
-    interface IRecyclable
+    public interface IRecyclable
     {
         /// <summary>
         ///     Returns this object back to the object pool.
index 7363dddba623276f6cbe15c2f45cf5d1fdbd5948..49e2e6464422ec98dd6166c2f55a0dcbdba97193 100644 (file)
@@ -7,7 +7,7 @@ namespace Hazel
     ///
     public class MessageReader : IRecyclable
     {
-        private static readonly ObjectPool<MessageReader> objectPool = new ObjectPool<MessageReader>(() => new MessageReader());
+        public static readonly ObjectPool<MessageReader> ReaderPool = new ObjectPool<MessageReader>(() => new MessageReader());
 
         public byte[] Buffer;
         public byte Tag;
@@ -31,7 +31,7 @@ namespace Hazel
         
         public static MessageReader Get(MessageReader srcMsg)
         {
-            var output = objectPool.GetObject();
+            var output = ReaderPool.GetObject();
             output.Buffer = srcMsg.Buffer;
             output.Offset = srcMsg.Offset;
             output.Position = srcMsg.Position;
@@ -42,7 +42,7 @@ namespace Hazel
 
         public static MessageReader Get(byte[] buffer)
         {
-            var output = objectPool.GetObject();
+            var output = ReaderPool.GetObject();
             output.Buffer = buffer;
             output.Offset = 0;
             output.Position = 0;
@@ -54,7 +54,7 @@ namespace Hazel
 
         public static MessageReader Get(byte[] buffer, int offset)
         {
-            var output = objectPool.GetObject();
+            var output = ReaderPool.GetObject();
             output.Buffer = buffer;
             output.Offset = offset;
             output.Position = 0;
@@ -83,7 +83,7 @@ namespace Hazel
         public void Recycle()
         {
             this.Position = this.Length = 0;
-            objectPool.PutObject(this);
+            ReaderPool.PutObject(this);
         }
 
         #region Read Methods
index d9ad29851c588d96e1fe3c1c3fe12ceecbbb5210..165c41c630c000bc38fb4e05df5c672e224af651 100644 (file)
@@ -9,7 +9,7 @@ namespace Hazel
     public class MessageWriter : IRecyclable
     {
         public static int BufferSize = 64000;
-        private static readonly ObjectPool<MessageWriter> objectPool = new ObjectPool<MessageWriter>(() => new MessageWriter(BufferSize));
+        public static readonly ObjectPool<MessageWriter> WriterPool = new ObjectPool<MessageWriter>(() => new MessageWriter(BufferSize));
 
         internal byte[] Buffer;
         public int Length;
@@ -60,7 +60,7 @@ namespace Hazel
         /// <param name="sendOption">The option specifying how the message should be sent.</param>
         public static MessageWriter Get(SendOption sendOption = SendOption.None)
         {
-            var output = objectPool.GetObject();
+            var output = WriterPool.GetObject();
             output.Clear(sendOption);
 
             return output;
@@ -123,7 +123,7 @@ namespace Hazel
         public void Recycle()
         {
             this.Position = this.Length = 0;
-            objectPool.PutObject(this);
+            WriterPool.PutObject(this);
         }
 
         #region WriteMethods
index a4d8d68426c45e2f1c2058c2a3554bd082099b64..c497b3b4ab682a3dad3e78ede48e890a5e1de8d1 100644 (file)
@@ -14,8 +14,10 @@ namespace Hazel
     /// </summary>
     /// <typeparam name="T">The type that is pooled.</typeparam>
     /// <threadsafety static="true" instance="true"/>
-    sealed class ObjectPool<T> where T : IRecyclable
+    public sealed class ObjectPool<T> where T : IRecyclable
     {
+        public int Size { get { return this.pool.Count; } }
+
         /// <summary>
         ///     Our pool of objects
         /// </summary>
index afd2a219f436e32a0ef82d9d897d8b52d22edbab..81663b6827ebb4ac776b19969918d6b98318394a 100644 (file)
@@ -419,5 +419,20 @@ namespace Hazel.Udp
             }
             catch (InvalidOperationException) { }
         }
+
+        void DisposeReliablePackets()
+        {
+            lock (this.reliableDataPacketsSent)
+            {
+                var packets = this.reliableDataPacketsSent.Keys.ToArray();
+                foreach (var kvp in this.reliableDataPacketsSent)
+                {
+                    Packet pkt = kvp.Value;
+                    pkt.Recycle();
+                }
+
+                this.reliableDataPacketsSent.Clear();
+            }
+        }
     }
 }
index dfa00eceea4e30fc2c2f67bdfab165db8d607455..ccfde7c4b0e65c5645992fcb10bf1351d4622298 100644 (file)
@@ -288,6 +288,7 @@ namespace Hazel.Udp
             if (disposing)
             {
                 DisposeKeepAliveTimer();
+                DisposeReliablePackets();
             }
 
             base.Dispose(disposing);
index 2fcd09d30408a5bc116cc77eb68d4ff890932e1c..44410d2fbeee30871a0249ebfc9ebaf959db94e0 100644 (file)
@@ -190,6 +190,8 @@ namespace Hazel.Udp
         /// <param name="endPoint">The endpoint to send to.</param>
         internal void SendData(byte[] bytes, int length, EndPoint endPoint)
         {
+            if (length > bytes.Length) return;
+
             try
             {
                 listener.BeginSendTo(
@@ -259,7 +261,8 @@ namespace Hazel.Udp
         {
             lock (connections)
             {
-                foreach (var kvp in this.connections)
+                var connects = this.connections.ToArray();
+                foreach (var kvp in connects)
                 {
                     if (kvp.Value.State == ConnectionState.Connected)
                     {
@@ -269,6 +272,8 @@ namespace Hazel.Udp
                         }
                         catch { }
                     }
+
+                    kvp.Value.Dispose();
                 }
 
                 connections.Clear();