public void TestClientEventsAreFired()
        {
            // create test server
            int port   = 6556;
            var server = TestUtil.CreateTestServer <ServerEventHandler>(port, true).Item1;

            // create client
            var eventHandler = new ClientEventHandler();
            var bundle       = TestUtil.CreateClient <ClientEventHandler>(port, true, false);
            var client       = bundle.Item1;
            var handler      = bundle.Item2;

            TestUtil.Wait();
            Assert.IsTrue(client.Connected);
            Assert.AreEqual(1, handler.Count);

            // server stop (client will disconnect)
            server.Stop();
            TestUtil.Wait();
            Assert.AreEqual(2, handler.Count);

            // client connect again
            Assert.IsTrue(server.Start());
            client.Connect();
            TestUtil.Wait();
            Assert.AreEqual(3, handler.Count);

            // test recieve message
            string msg = "TEST MESSAGE";

            Assert.AreEqual(1, server.SendToAll(TestUtil.ToByte(msg)));
            TestUtil.Wait();
            Assert.AreEqual(4, handler.Count);
            Assert.AreEqual(msg, handler.Recieved);

            // test send message
            client.Send(TestUtil.ToByte(msg));
            TestUtil.Wait();
            Assert.AreEqual(5, handler.Count);
            Assert.AreEqual(msg, handler.Sent);

            // server stop
            server.Stop();
            TestUtil.Wait();
            Assert.IsFalse(client.Connected);
            Assert.AreEqual(6, handler.Count);

            // failed connect
            client.Connect();
            TestUtil.Wait();
            Assert.AreEqual(7, handler.Count);
        }