static void Main(string[] args)
        {
            "Testing AbstractCommunicator".Title();

            TestCommunicator tc1 = new TestCommunicator();

            tc1.Name = "tc1";
            tc1.Start();

            TestCommunicator tc2 = new TestCommunicator();

            tc2.Name = "tc2";
            tc2.Start();

            TestDispatcher td = new TestDispatcher();

            td.Name    = "td";
            td.Verbose = true;
            td.Start();
            td.Register(tc1);

            // show that GetInstance works

            AbstractMessageDispatcher tdi = TestDispatcher.GetInstance();

            tdi.Register(tc2);

            ServiceMessage msg0 = ServiceMessage.MakeMessage("foobar", "Main", "going nowhere");

            td.PostMessage(msg0);
            ServiceMessage msg1 = ServiceMessage.MakeMessage(tc1.Name, "Main", "some boring contents");

            td.PostMessage(msg1);
            ServiceMessage msg2 = ServiceMessage.MakeMessage(tc2.Name, "Main", "more boring contents");

            td.PostMessage(msg2);
            ServiceMessage msg3 = ServiceMessage.MakeMessage(tc1.Name, "Main", "quit");

            td.PostMessage(msg3);
            ServiceMessage msg4 = ServiceMessage.MakeMessage(tc2.Name, "Main", "quit");

            td.PostMessage(msg4);
            ServiceMessage msg5 = ServiceMessage.MakeMessage(td.Name, "Main", "quit");

            td.PostMessage(msg5);

            tc1.Wait();
            tc2.Wait();
            td.Wait();

            Console.Write("\n\n");
        }