public static void RunSimplePublisherReceiverTest()
        {
            SimpleMessagePublisher <ServerMessageType> server = new SimpleMessagePublisher <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher"
                , "direct"
                , false
                , new ConsoleLogger());

            SimpleMessageReceiver <ServerMessageType> client = new SimpleMessageReceiver <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher"
                , "direct"
                , false
                , new ConsoleLogger());

            server.Open(false);
            client.Open(false);

            client.MessageReceived += new EventHandler <MessageEventArgs <ServerMessageType> >(client_MessageReceived);

            server.SendMessage(ServerMessageType.Plain);
            server.SendMessage(ServerMessageType.SomeObject, new SimpleObject(99));

            Console.ReadLine();

            client.Dispose();
            server.Dispose();
        }
        public static void RunSimplePublisherReceiverShutdownTest()
        {
            SimpleMessagePublisher <ServerMessageType> server = new SimpleMessagePublisher <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher"
                , "direct"
                , false
                , new ConsoleLogger());

            SimpleMessageReceiver <ServerMessageType> client = new SimpleMessageReceiver <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher"
                , "direct"
                , false
                , new ConsoleLogger());

            server.Open(false);
            client.Open(false);

            client.MessageReceived += new EventHandler <MessageEventArgs <ServerMessageType> >(client_MessageReceived);

            server.SendMessage(ServerMessageType.Plain);
            server.SendMessage(ServerMessageType.SomeObject, new SimpleObject(99));

            Console.WriteLine("Connection established and test messages sent, waiting for manual RabbitMQ service shutdown");
            Console.ReadLine();

            Console.WriteLine("Trying to send message...");
            server.SendMessage(ServerMessageType.Plain);

            Console.WriteLine("Manually restart and wait...");
            Console.ReadLine();

            server.SendMessage(ServerMessageType.Plain);
            server.SendMessage(ServerMessageType.SomeObject, new SimpleObject(99));

            client.Dispose();
            server.Dispose();
        }
        public static void RunSimplePublisherReceiverTopicTest()
        {
            string routingKey        = "TestChannel";
            string unknownRoutingKey = "UnknownChannel";

            SimpleMessagePublisher <ServerMessageType> server = new SimpleMessagePublisher <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher.Topic"
                , "topic"
                , false
                , new ConsoleLogger());

            SimpleMessageReceiver <ServerMessageType> client = new SimpleMessageReceiver <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher.Topic"
                , "topic"
                , false
                , true
                , new ConsoleLogger());

            server.Open(false);
            client.Open(false);

            client.MessageReceived += new EventHandler <MessageEventArgs <ServerMessageType> >(topicTest_client_MessageReceived);

            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(99), routingKey);

            // we expect to get the message with value 99
            Console.ReadLine();

            client.Dispose();
            client = new SimpleMessageReceiver <ServerMessageType>(
                "localhost"
                , "CommonTools.Testing.Publisher.Topic"
                , "topic"
                , false
                , false
                , new ConsoleLogger());
            client.Open(false);

            client.MessageReceived += new EventHandler <MessageEventArgs <ServerMessageType> >(topicTest_client_MessageReceived);

            client.BindRoutingKey(routingKey);

            Console.WriteLine("Expecting to get value 99...");
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(99), routingKey);
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(55), unknownRoutingKey);

            Console.ReadLine();

            client.UnbindRoutingKey(routingKey);
            client.BindRoutingKey(unknownRoutingKey);

            Console.WriteLine("Expecting to get value 55...");
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(99), routingKey);
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(55), unknownRoutingKey);

            Console.ReadLine();

            Console.WriteLine("Expecting no error...");
            client.UnbindRoutingKey(unknownRoutingKey);
            client.UnbindRoutingKey(unknownRoutingKey);
            client.BindRoutingKey(unknownRoutingKey);
            client.BindRoutingKey(unknownRoutingKey);

            Console.WriteLine("Expecting to get value 55...");
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(99), routingKey);
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(55), unknownRoutingKey);

            Console.WriteLine("Connection established and test messages sent, waiting for manual RabbitMQ service shutdown");
            Console.ReadLine();

            Console.WriteLine("Manually restart and wait...");
            Console.ReadLine();

            Console.WriteLine("Expecting to get value 55...");
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(99), routingKey);
            server.SendRoutedMessage(ServerMessageType.SomeObject, new SimpleObject(55), unknownRoutingKey);
            Console.ReadLine();

            client.Dispose();
            server.Dispose();
        }