public void TestEchoRequest()
        {
            try
            {
                bool   isOk    = false;
                string message = "Hello, world";
                using (var waitHandle = new ManualResetEventSlim())
                {
                    using (var server =
                               CallbackServer.Create(
                                   CreateConfiguration(
                                       host => new TcpServerTransportManager(host),
                                       (id, args) =>
                    {
                        try
                        {
                            Assert.That(args[0] == message, args[0].ToString());
                            Assert.That(args[1].IsTypeOf <Int64>().GetValueOrDefault(), args[1].ToString());
                            isOk = true;
                            return(args);
                        }
                        finally
                        {
                            waitHandle.Set();
                        }
                    }
                                       )
                                   )
                           )
                    {
                        TestEchoRequestCore(ref isOk, waitHandle, message);

                        waitHandle.Reset();
                        isOk = false;
                        // Again
                        TestEchoRequestCore(ref isOk, waitHandle, message);

                        waitHandle.Reset();
                        isOk = false;
                        // Again 2
                        TestEchoRequestCore(ref isOk, waitHandle, message);
                    }
                }
            }
            catch (SocketException sockEx)
            {
                Console.Error.WriteLine("{0}({1}:0x{1:x8})", sockEx.SocketErrorCode, sockEx.ErrorCode);
                Console.Error.WriteLine(sockEx);
                throw;
            }
        }
        public void TestEchoRequestContinuous()
        {
            try
            {
                const int count        = 3;
                bool[]    serverStatus = new bool[count];
                string    message      = "Hello, world";
                using (var waitHandle = new CountdownEvent(count))
                    using (var server =
                               CallbackServer.Create(
                                   CreateConfiguration(
                                       host => new TcpServerTransportManager(host),
                                       (id, args) =>
                    {
                        try
                        {
                            Assert.That(args[0] == message);
                            Assert.That(args[1].IsTypeOf <Int64>().GetValueOrDefault());
                            lock ( serverStatus )
                            {
                                serverStatus[id.Value] = true;
                            }

                            return(args);
                        }
                        finally
                        {
                            waitHandle.Signal();
                        }
                    }
                                       )
                                   )
                           )
                    {
                        TestEchoRequestContinuousCore(serverStatus, waitHandle, count, message);

                        waitHandle.Reset();
                        Array.Clear(serverStatus, 0, serverStatus.Length);
                        // Again
                        TestEchoRequestContinuousCore(serverStatus, waitHandle, count, message);
                    }
            }
            catch (SocketException sockEx)
            {
                Console.Error.WriteLine("{0}({1}:0x{1:x8})", sockEx.SocketErrorCode, sockEx.ErrorCode);
                Console.Error.WriteLine(sockEx);
                throw;
            }
        }