示例#1
0
        public void TestSendToAllClients()
        {
            /// create server
            int port          = 5558;
            var bundle        = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server        = bundle.Item1;
            var eventHandler  = bundle.Item2;
            var dataProcessor = TestUtil.CreateSimpleDataProcessor();

            // connect clients
            int count   = 2;
            var clients = Enumerable.Range(0, count).Select(i => TestUtil.CreateTestNativeClient(port)).ToList();

            TestUtil.Wait();
            Assert.AreEqual(count, server.Clients.Count());

            // send message from server to all clients
            string message = "TEST MESSAGE";
            var    sent    = server.SendToAll(TestUtil.ToByte(message));

            Assert.AreEqual(count, sent);

            // read message from clients
            var recieved = clients.Select(c => {
                var buffer = new byte[200];
                var cnt    = c.GetStream().Read(buffer, 0, 200);
                Assert.AreNotEqual(0, cnt);
                var rcnt = dataProcessor.ProcessReceivedRawData(buffer, cnt);
                Assert.AreEqual(1, rcnt.Count());
                return(TestUtil.ToString(rcnt.First()));
            });

            // messages must be the same
            recieved.ToList().ForEach(msg => Assert.AreEqual(message, msg));
        }
示例#2
0
        public void TestServerIsAgnosticToEventHandlerErrors()
        {
            // start server
            var watch         = Stopwatch.StartNew();
            int port          = 5559;
            var bundle        = TestUtil.CreateTestServer <BadServerEventHandler>(port, true);
            var server        = bundle.Item1;
            var eventHandler  = bundle.Item2;
            var dataProcessor = TestUtil.CreateSimpleDataProcessor();

            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 2000);
            Assert.AreEqual(1, eventHandler.Counter);

            // client connect
            watch = Stopwatch.StartNew();
            var client = TestUtil.CreateTestNativeClient(port);

            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 2000);
            Assert.AreEqual(2, eventHandler.Counter);

            // recieve data from client
            watch = Stopwatch.StartNew();
            var clientDataProcessor = TestUtil.CreateSimpleDataProcessor();

            client.GetStream().Write(clientDataProcessor.FilterSendData(TestUtil.ToByte("TEST MESSAGE")));
            TestUtil.Wait();
            client.GetStream().Write(clientDataProcessor.FilterSendData(TestUtil.ToByte("TEST MESSAGE")));
            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 3000);
            Assert.AreEqual(4, eventHandler.Counter);

            // send data to client
            watch = Stopwatch.StartNew();
            server.SendToClient(eventHandler.ConnectedClients.First().Id, TestUtil.ToByte("TEST MESSAGE"));
            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 2000);
            Assert.AreEqual(5, eventHandler.Counter);

            // client disconnect
            watch = Stopwatch.StartNew();
            client.GetStream().Close();
            client.Close();
            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 2000);
            Assert.AreEqual(6, eventHandler.Counter);

            // stop server
            watch = Stopwatch.StartNew();
            server.Stop();
            TestUtil.Wait();
            Assert.IsTrue(watch.ElapsedMilliseconds < 2000);
            // Assert.AreEqual(7, eventHandler.Counter);

            // no clients remain
            Assert.AreEqual(0, server.Clients.Count());
        }
示例#3
0
        public void TestClientDisconnect()
        {
            // create and start server
            int port         = 5555;
            var bundle       = TestUtil.CreateTestServer <ServerEventHandler>(port, true);
            var server       = bundle.Item1;
            var eventHandler = bundle.Item2;

            // client multiple clients
            int count   = 10;
            var clients = Enumerable.Range(1, count).Select(i => {
                var client = TestUtil.CreateTestNativeClient(port);
                TestUtil.Wait();
                Assert.AreEqual(i, eventHandler.ConnectedClients.Count);
                var id = eventHandler.ConnectedClients.Last().Id;
                return(new Tuple <string, TcpClient>(id, client));
            }).ToList();

            Assert.AreEqual(count, clients.Count(c => c.Item2.Connected));
            Assert.AreEqual(count, server.Clients.Count);

            // disconnect n clients (server action)
            int discCount = 3;

            clients.Take(discCount).ToList().ForEach(c => Assert.IsTrue(server.DisconnectClient(c.Item1)));
            TestUtil.Wait();

            // disconnected client will not read data
            clients.Take(discCount).ToList().ForEach((c) => {
                var buffer = new byte[2];
                Assert.AreEqual(0, c.Item2.GetStream().Read(buffer, 0, 2));
            });

            // Assert.AreEqual(count - discCount, clients.Count(c => c.Connected));
            Assert.AreEqual(count - discCount, server.Clients.Count());

            // stop server
            server.Stop();
        }