public void TestMessageHandler()
        {
            MockSender sender = new() { Id = 42 };

            TestMessageHandler handler = new();

            MockReceiver receiver = new();

            MessageProcessor processor = new();

            processor.SetMessageReceiver(receiver);

            MessageDictionary dic = MessageDictionary.GetInstance();

            processor.RegisterMessageHandler(handler);

            dic.AddOutgoingMessage(Module, Type, p =>
            {
                return(Tuple.Create(TestValue, 42));
            });

            var msg = dic.CreateMessage(Type);

            receiver.ReceiveMessage(new RawMessage(sender, msg.Serialize()));

            Assert.IsTrue(handler.Tcs.Task.Wait(100));
        }
    }
        public Task InitializeModules()
        {
            foreach (var m in Modules.Values)
            {
                log.Debug("initializing " + m.Name);
                m.Logic.Initialize();
            }

            log.Debug("all loaded modules initialized");
            MessageDictionary.GetInstance().CreatePDF("messages.txt");
            return(Task.CompletedTask);
        }
        public void TestMessageDictionary()
        {
            var dic = MessageDictionary.GetInstance();

            //
            // register outgoing message
            //
            dic.AddOutgoingMessage(Module, Type, p =>
            {
                return(Tuple.Create((string)p[0], (int)p[1]));
            }, typeof(Tuple <string, int>), "testString", "testInt");

            //
            // double register message
            //
            Assert.ThrowsException <ArgumentException>(() =>
            {
                dic.AddOutgoingMessage(Module, Type, p =>
                {
                    return(Tuple.Create((string)p[0], (int)p[1]));
                }, typeof(Tuple <string, int>), "testString", "testInt");
            });

            //
            // create registered message
            //
            var msg = dic.CreateMessage(Type, TestValue, 42);

            Assert.IsTrue(msg.Module == Module);
            Assert.IsTrue(msg.Type == Type);
            Assert.IsTrue(msg.Data.GetType() == typeof(Tuple <string, int>));
            Assert.AreEqual(msg.Data, Tuple.Create(TestValue, 42));

            //
            // register and create message with complex type
            //
            dic.AddOutgoingMessage(Module, Type2, p =>
            {
                return(Tuple.Create((string)p[0], (int)p[1]));
            }, "testString", "testInt");

            msg = dic.CreateMessage(Type2, TestValue, 42);

            Assert.IsTrue(msg.Module == Module);
            Assert.IsTrue(msg.Type == Type2);
            Assert.IsTrue(msg.Data.GetType() == typeof(Tuple <string, int>));
            Assert.AreEqual(msg.Data, Tuple.Create(TestValue, 42));

            //
            // create unregistered message
            //
            Assert.ThrowsException <ArgumentException>(() =>
            {
                dic.CreateMessage("abc");
            });

            //
            // register incoming message (type is already used for outgoing message)
            //
            dic.AddIngoingMessage(Module, Type, typeof(string), "testString");

            //
            // double register ingoing message
            //

            Assert.ThrowsException <ArgumentException>(() =>
            {
                dic.AddIngoingMessage(Module, Type, typeof(string), "testString");
            });
        }