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); } }
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(); }
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); } }
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") }; }
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() }); }
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") }; }
public MemoryQueueWriterFactory(MemoryAccount account, string endpoint = "memory") { _account = account; _endpoint = endpoint; }