]> git.deb.at Git - rhonda/impostor.hazel.git/commitdiff
Fix and test disconnect message feature
authorForest <chocozilla@gmail.com>
Thu, 20 Jun 2019 21:38:47 +0000 (14:38 -0700)
committerForest <chocozilla@gmail.com>
Thu, 20 Jun 2019 21:38:47 +0000 (14:38 -0700)
Hazel.UnitTests/UdpConnectionTests.cs
Hazel/DisconnectedEventArgs.cs
Hazel/NetworkConnection.cs
Hazel/Udp/UdpConnection.cs

index aa154ced700afe13080eb8362bc07a2752423773..f7a95c03d56ba3caea127292c30a8943df40f408 100644 (file)
@@ -391,5 +391,41 @@ namespace Hazel.UnitTests
                 TestHelper.RunServerDisconnectTest(listener, connection);
             }
         }
+
+        /// <summary>
+        ///     Tests disconnection from the server.
+        /// </summary>
+        [TestMethod]
+        public void ServerExtraDataDisconnectTest()
+        {
+            using (UdpConnectionListener listener = new UdpConnectionListener(new IPEndPoint(IPAddress.Any, 4296)))
+            using (UdpConnection connection = new UdpClientConnection(new IPEndPoint(IPAddress.Loopback, 4296)))
+            {
+                MessageReader received = null;
+                ManualResetEvent mutex = new ManualResetEvent(false);
+
+                connection.Disconnected += delegate (object sender, DisconnectedEventArgs args)
+                {
+                    received = args.Message;
+                    mutex.Set();
+                };
+
+                listener.NewConnection += delegate (NewConnectionEventArgs args)
+                {
+                    MessageWriter writer = MessageWriter.Get(SendOption.None);
+                    writer.Write("Goodbye");
+                    args.Connection.Disconnect("Testing", writer);
+                };
+
+                listener.Start();
+
+                connection.Connect();
+
+                mutex.WaitOne();
+
+                Assert.IsNotNull(received);
+                Assert.AreEqual("Goodbye", received.ReadString());
+            }
+        }
     }
 }
index 3d87d66a499c7cea145b7e29f638fbdeb7b680a7..bbecf81fbdf9159bf9ebfe2e042ac9ffd3f4a98c 100644 (file)
@@ -31,9 +31,10 @@ namespace Hazel
 
         public readonly MessageReader Message;
 
-        public DisconnectedEventArgs(string reason, MessageReader reader)
+        public DisconnectedEventArgs(string reason, MessageReader message)
         {
-
+            this.Reason = reason;
+            this.Message = message;
         }
     }
 }
index ba818229d47acdd6336ebd1c2ed918d75246c90b..f670d115ce54f7bd7698c7ec3a0235a7e97b545d 100644 (file)
@@ -40,11 +40,26 @@ namespace Hazel
         /// </summary>
         protected abstract bool SendDisconnect(MessageWriter writer);
 
-
         /// <summary>
         ///     Called when the socket has been disconnected at the remote host.
         /// </summary>
-        /// <param name="e">The exception if one was the cause.</param>
+        protected void DisconnectRemote(string reason, MessageReader reader)
+        {
+            if (this.SendDisconnect(null))
+            {
+                try
+                {
+                    InvokeDisconnected(reason, reader);
+                }
+                catch { }
+            }
+
+            this.Dispose();
+        }
+
+        /// <summary>
+        ///     Called when the socket has been disconnected locally.
+        /// </summary>
         public override void Disconnect(string reason, MessageWriter writer = null, bool fireEvent = true)
         {
             if (this.SendDisconnect(writer) && fireEvent)
index 8889a1fe98beddd75c05d04a9155ab23d8101410..5cc56ebf43e94da1a04ca499109cbfce3094bd8f 100644 (file)
@@ -121,7 +121,9 @@ namespace Hazel.Udp
                     break;
 
                 case (byte)UdpSendOption.Disconnect:
-                    Disconnect("The remote sent a disconnect request");
+                    message.Offset = 1;
+                    message.Position = 0;
+                    DisconnectRemote("The remote sent a disconnect request", message);
                     message.Recycle();
                     break;