Inheritance: ITestServiceUpdateListener
        public async Task TestLargeSizeMessage()
        {
            _testService = new TestServer(_port);
            Assert.AreEqual(true, _testService.StartService());

            _testServiceClient = new TestServiceClient(_serverAddress, _port);
            bool clientConnected = await _testServiceClient.StartConnection();
            Assert.AreEqual(true, clientConnected);

            const int length = 100000;
            var charArray = new char[length];
            charArray[0] = 'a';
            for (int i = 1; i < length-1; ++i) charArray[i] = 'b';
            charArray[length-1] = 'c';
            var testString = new string(charArray);

            // how to set a timeout? 

            var response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;
            Assert.IsNotNull(response);
            Assert.AreEqual(TestServiceConstants.ServicePrefix + testString, response.Message);

            _testServiceClient.StopClient();
            // assert client is stopped?
            _testService.StopService();
        }
        private async void TestReconnectionButton_OnClick(object sender, RoutedEventArgs e)
        {
            InfoLabel.Text = "Running...";
            _testServiceClient = new TestServiceClient(_serverAddress, _port);
            bool clientConnected = await _testServiceClient.StartConnection();
            if (!clientConnected)
            {
                InfoLabel.Text = "Fail";
                return;
            }
            var testString = "Hello world!";
            var response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;
            _testServiceClient.StopClient();

            clientConnected = await _testServiceClient.StartConnection();
            if (!clientConnected)
            {
                InfoLabel.Text = "Fail";
                return;
            }
            response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;

            if (response != null && response.Message.Equals(TestServiceConstants.ServicePrefix + testString))
                InfoLabel.Text = "Pass";
            else
                InfoLabel.Text = "Fail";

            _testServiceClient.StopClient();
        }
        private async void TestConnectionButton_OnClick(object sender, RoutedEventArgs e)
        {
            InfoLabel.Text = "Running...";
            _testServiceClient = new TestServiceClient(_serverAddress, _port);
            bool clientConnected = await _testServiceClient.StartConnection();
            InfoLabel.Text = clientConnected ? "Pass" : "Fail";

            _testServiceClient.StopClient();
        }
        private async void TestLargeSizeMessageButton_OnClick(object sender, RoutedEventArgs e)
        {
            InfoLabel.Text = "Running...";
            _testServiceClient = new TestServiceClient(_serverAddress, _port);
            bool clientConnected = await _testServiceClient.StartConnection();

            const int length = 30000;
            var charArray = new char[length];
            charArray[0] = 'a';
            for (int i = 1; i < length - 1; ++i) charArray[i] = 'b';
            charArray[length - 1] = 'c';
            var testString = new string(charArray);

            var response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;

            if (response != null && response.Message.Equals(TestServiceConstants.ServicePrefix + testString))
                InfoLabel.Text = "Pass";
            else
                InfoLabel.Text = "Fail";
            _testServiceClient.StopClient();
        }
        public async Task TestWebSocketOODSSService()
        {
            _testService = new TestServer(_port);
            Assert.AreEqual(true, _testService.StartService());

            _testServiceClient = new TestServiceClient(_serverAddress, _port);
            bool clientConnected = await _testServiceClient.StartConnection();
            Assert.AreEqual(true, clientConnected);

            const string testString = "Hello world!";
            var response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;
            Assert.IsNotNull(response);
            Assert.AreEqual(TestServiceConstants.ServicePrefix + testString, response.Message);

            response = (await _testServiceClient.SendMessage(testString)) as TestServiceResponse;
            Assert.IsNotNull(response);
            Assert.AreEqual(TestServiceConstants.ServicePrefix + testString, response.Message);

            _testServiceClient.StopClient();
            // assert client is stopped?
            _testService.StopService();
        }
        public async Task TestMultipleClients()
        {
            _testService = new TestServer(_port);
            Assert.AreEqual(true, _testService.StartService());

            const int numClients = 5;
            TestServiceClient[] clients = new TestServiceClient[numClients];
            for (int i = 0; i < numClients; ++i)
            {
                clients[i] = new TestServiceClient(_serverAddress, _port);
                bool clientConnected = await clients[i].StartConnection();
                Assert.AreEqual(true, clientConnected);
            }

            for (int i = 0; i < numClients; ++i)
                await SendAndReceive(clients[i], i);

            for (int i = 0; i < numClients; ++i)
            {
                clients[i].StopClient();
            }
            _testService.StopService();
        }
 private async Task<bool> SendAndReceive(TestServiceClient client, int i)
 {
     string testString = i.ToString();
     var response = (await client.SendMessage(testString)) as TestServiceResponse;
     return response != null && response.Message.Equals(TestServiceConstants.ServicePrefix + testString);
 }
        private async void TestMultiClientButton_OnClick(object sender, RoutedEventArgs e)
        {
            InfoLabel.Text = "Running...";
            const int numClients = 5;
            TestServiceClient[] clients = new TestServiceClient[numClients];
            for (int i = 0; i < numClients; ++i)
            {
                clients[i] = new TestServiceClient(_serverAddress, _port);
                bool clientConnected = await clients[i].StartConnection();
                if (!clientConnected)
                {
                    InfoLabel.Text = "Fail";
                    return;
                }
            }

            for (int i = 0; i < numClients; ++i)
            {
                bool success = await SendAndReceive(clients[i], i);
                if (!success)
                {
                    InfoLabel.Text = "Fail";
                    return;
                }
            }

            for (int i = 0; i < numClients; ++i)
            {
                clients[i].StopClient();
            }
            InfoLabel.Text = "Pass";
        }
 private async Task SendAndReceive(TestServiceClient client, int i)
 {
         string testString = i.ToString();
         var response = (await client.SendMessage(testString)) as TestServiceResponse;
         Assert.IsNotNull(response);
         Assert.AreEqual(TestServiceConstants.ServicePrefix + testString, response.Message);
 }