public void Dulicate_message_is_detected()
        {
            var streamer = EnvelopeStreamer.CreateDefault(typeof(Message));

            var builder = new CqrsEngineBuilder(streamer);

            var cfg = new MemoryAccount();
            var sender = cfg.CreateSimpleSender(streamer, "in");
            builder.Handle(cfg.CreateInbox("in"), envelope => Console.WriteLine("Got message"));

            var env = new EnvelopeBuilder("fixed ID").Build();

            using (var token = new CancellationTokenSource())
            using (var build = builder.Build())
            using (TestObserver.When<EnvelopeDuplicateDiscarded>(discarded => token.Cancel()))
            {
                sender.SendEnvelope(env);
                sender.SendEnvelope(env);
                build.Start(token.Token);

                if (Debugger.IsAttached)
                {
                    token.Token.WaitHandle.WaitOne();
                }
                else
                {
                    token.Token.WaitHandle.WaitOne(10000);
                }

                Assert.IsTrue(token.IsCancellationRequested);
            }
        }
Пример #2
0
        public void Test()
        {
            // this test will start a simple web server on port 8082 (with a CQRS engine)
            // You might need to reserve that port or run test as admin. Check out unit test
            // output for the exact command line on port reservation (or MSDN docs)
            //
            // netsh http add urlacl url=http://+:8082/ user=RINAT-R5\Rinat.Abdullin
            // after starting the test, navigate you browser to localhost:8082/index.htm
            // and try dragging the image around



            // in-memory structure to capture mouse movement
            // statistics
            var stats = new MouseStats();


            // we accept a message just of this type, using a serializer
            var messages   = new[] { typeof(MouseMoved), typeof(MouseClick) };
            var serializer = new MyJsonSerializer(messages);
            var streamer   = new EnvelopeStreamer(serializer);
            var store      = new MemoryAccount();
            var atomic     = store.CreateNuclear().Factory;

            // let's configure our custom Http server to
            // 1. serve resources
            // 2. serve MouseStats View
            // 3. accept commands
            var environment = new HttpEnvironment {
                Port = 8082
            };
            var builder = new CqrsEngineBuilder(streamer);

            builder.AddProcess(new Listener(environment,
                                            new EmbeddedResourceHttpRequestHandler(typeof(MouseMoved).Assembly, "Snippets.HttpEndpoint"),
                                            new MouseStatsRequestHandler(stats),
                                            new HeatMapRequestHandler(atomic.GetEntityReader <unit, HeatMapView>()),
                                            new MouseEventsRequestHandler(store.CreateQueueWriter("inbox"), serializer, streamer)));

            builder.Handle(store.CreateInbox("inbox"), envelope =>
            {
                if (envelope.Items.Any(i => i.Content is MouseMoved))
                {
                    MouseStatHandler(envelope, stats);
                }
                else if (envelope.Items.Any(i => i.Content is MouseClick))
                {
                    MouseClickHandler(envelope, atomic.GetEntityWriter <unit, PointsView>());
                }
            });


            builder.AddProcess(new HeatMapGenerateTask(atomic.GetEntityReader <unit, PointsView>(), atomic.GetEntityWriter <unit, HeatMapView>()));



            Process.Start("http://localhost:8082/index.htm");
            // this is a test, so let's block everything
            builder.Build().RunForever();
        }
Пример #3
0
        public void Dulicate_message_is_detected()
        {
            var streamer = EnvelopeStreamer.CreateDefault(typeof(Message));

            var builder = new CqrsEngineBuilder(streamer);

            var cfg    = new MemoryAccount();
            var sender = cfg.CreateSimpleSender(streamer, "in");

            builder.Handle(cfg.CreateInbox("in"), envelope => Console.WriteLine("Got message"));

            var env = new EnvelopeBuilder("fixed ID").Build();

            using (var token = new CancellationTokenSource())
                using (var build = builder.Build())
                    using (TestObserver.When <EnvelopeDuplicateDiscarded>(discarded => token.Cancel()))
                    {
                        sender.SendEnvelope(env);
                        sender.SendEnvelope(env);
                        build.Start(token.Token);

                        if (Debugger.IsAttached)
                        {
                            token.Token.WaitHandle.WaitOne();
                        }
                        else
                        {
                            token.Token.WaitHandle.WaitOne(10000);
                        }

                        Assert.IsTrue(token.IsCancellationRequested);
                    }
        }
Пример #4
0
        public void Test()
        {
            var types = Assembly.GetExecutingAssembly().GetExportedTypes()
                        .Where(t => typeof(IPS_SampleMessage).IsAssignableFrom(t));
            var streamer = EnvelopeStreamer.CreateDefault(types);
            var builder  = new CqrsEngineBuilder(streamer);
            // only message contracts within this class

            // configure in memory:
            //                            -> sub 1
            //  inbox -> [PubSubRouter] <
            //                            -> sub 2
            //
            var store   = new MemoryAccount();
            var nuclear = store.CreateNuclear();

            var router = new PubSubRouter(nuclear, store.CreateWriteQueueFactory(), streamer);

            router.Init();

            builder.Dispatch(store.CreateInbox("sub1"), b => Console.WriteLine("sub1 hit"));
            builder.Dispatch(store.CreateInbox("sub2"), b => Console.WriteLine("sub2 hit"));
            builder.Handle(store.CreateInbox("inbox"), router.DispatchMessage);


            var sender = store.CreateSimpleSender(streamer, "inbox");

            using (var engine = builder.Build())
                using (var cts = new CancellationTokenSource())
                {
                    var task = engine.Start(cts.Token);

                    // no handler should get these.
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());

                    // subscribe sub1 to all messages and sub2 to specific message
                    sender.SendControl(eb =>
                    {
                        eb.AddString("router-subscribe:sub1", ".*");
                        eb.AddString("router-subscribe:sub2", "SomethingHappened");
                    });
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());

                    // unsubscribe all
                    sender.SendControl(eb =>
                    {
                        eb.AddString("router-unsubscribe:sub1", ".*");
                        eb.AddString("router-unsubscribe:sub2", "SomethingHappened");
                    });
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());


                    task.Wait(5000);
                }
        }
 protected override Setup ComposeComponents(IEnvelopeStreamer streamer)
 {
     var config = new MemoryAccount();
     return new Setup
     {
         Inbox = config.CreateInbox("in"),
         Sender = config.CreateSimpleSender(streamer, "in"),
         Storage = config.CreateNuclear()
     };
 }
 protected override Setup ConfigureComponents(IEnvelopeStreamer config)
 {
     var acc = new MemoryAccount();
     return new Setup
         {
             Store = acc.CreateNuclear(),
             Inbox = acc.CreateInbox("queue"),
             Sender = acc.CreateSimpleSender(config, "queue")
         };
 }
Пример #7
0
        protected override Setup ConfigureComponents(IEnvelopeStreamer config)
        {
            var acc = new MemoryAccount();

            return(new Setup
            {
                Store = acc.CreateNuclear(),
                Inbox = acc.CreateInbox("queue"),
                Sender = acc.CreateSimpleSender(config, "queue")
            });
        }
        protected override Setup ComposeComponents(IEnvelopeStreamer streamer)
        {
            var config = new MemoryAccount();

            return(new Setup
            {
                Inbox = config.CreateInbox("in"),
                Sender = config.CreateSimpleSender(streamer, "in"),
                Storage = config.CreateNuclear()
            });
        }
Пример #9
0
        protected override Setup ConfigureComponents(IEnvelopeStreamer streamer)
        {
            var _config = new MemoryAccount();

            return(new Setup
            {
                Store = _config.CreateNuclear(),
                Inbox = _config.CreateInbox("dev"),
                Sender = _config.CreateSimpleSender(streamer, "dev")
            });
        }
        protected override Setup ConfigureComponents(IEnvelopeStreamer streamer)
        {
            var _config = new MemoryAccount();
            return new Setup
            {
                Store = _config.CreateNuclear(),
                Inbox = _config.CreateInbox("dev"),
                Sender = _config.CreateSimpleSender(streamer, "dev")

            };
        }
Пример #11
0
 public MemoryQueueWriterFactory(MemoryAccount account, string endpoint = "memory")
 {
     _account = account;
     _endpoint = endpoint;
 }
Пример #12
0
 public MemoryQueueWriterFactory(MemoryAccount account, string endpoint = "memory")
 {
     _account  = account;
     _endpoint = endpoint;
 }