예제 #1
0
        public void TwoNodesTest()
        {
            var module1 = new Module(Guid.NewGuid());
            module1.Configure();
            module1.Start();

            var module2 = new Module(Guid.NewGuid(), 11112);
            module2.Configure();
            module2.Start();

            Assert.IsTrue(module1.IsRunning);
            Assert.IsTrue(module2.IsRunning);


            var client1 = module1.Find<ClientInterface>();
            var client2 = module2.Find<ClientInterface>();

            client2.Connect("localhost", 11111);


            var msgEvent = new AutoResetEvent(false);
            client1.MessageReceived += (sender, args) =>
                {
                    Logger.Info("Client1 message received.");
                    msgEvent.Set();
                };

            client2.MessageReceived += (sender, args) =>
                {
                    Logger.Info("Client2 message received.");
                    Assert.IsNotNull(args.Data.Path);
                    Assert.IsTrue(args.Data.Path.Count == 2);
                    Assert.IsTrue(args.Data.Path[0] == module1.Id);
                    Assert.IsTrue(args.Data.Path[1] == module2.Id);

                    client2.Send(new Entities.Message()
                        {
                            From = module2.GetMyNode(),
                            To = args.Data.From.Id,
                            Data = new byte[1024]
                        });
                };

            client1.Send(new Entities.Message()
                {
                    From = module1.GetMyNode(),
                    To = module2.Id,
                    Data = new byte[1024],
                });

            Assert.IsTrue(msgEvent.WaitOne(TimeSpan.FromSeconds(2)));


            client1.Send(new Entities.Message()
            {
                From = module1.GetMyNode(),
                To = module2.Id,
                Data = new byte[1024],
            });

            Assert.IsTrue(msgEvent.WaitOne(TimeSpan.FromSeconds(2)));


            module1.Stop();
            module2.Stop();
        }