Example #1
0
        static void AttachToLocalLog(string filePath)
        {
            SimpleMessageSender sender;
            var cache = new FileTapeStream(filePath);
            var store = new LocalEventStore(null, cache);

            var directoryName = Path.GetDirectoryName(filePath) ?? "";
            var dir           = new DirectoryInfo(directoryName);
            FileStorageConfig config;

            if (dir.Name == Topology.TapesContainer)
            {
                // we are in proper tapes container
                config = FileStorage.CreateConfig(dir.Parent);
            }
            else
            {
                var temp = Path.Combine(dir.FullName, string.Format("temp-{0:yyyy-MM-dd-HHmm}", DateTime.Now));
                config = FileStorage.CreateConfig(temp);
            }

            var send     = config.CreateQueueWriter(Topology.RouterQueue);
            var endpoint = new SimpleMessageSender(EnvelopeStreamer, send);

            Application.Run(new DomainLogView(store, endpoint, EnvelopeStreamer));
        }
Example #2
0
        public DomainLogView(LocalEventStore eventStore, SimpleMessageSender endpoint, IEnvelopeStreamer serializer)
        {
            InitializeComponent();

            _client = eventStore;

            _services   = new ShellServices(endpoint);
            _serializer = serializer;

            _log.BackColor = CommonColors.Solarized.Base03;
            _log.ForeColor = CommonColors.Solarized.Base0;

            _display.BackColor = CommonColors.Solarized.Base3;
            _display.ForeColor = CommonColors.Solarized.Base00;

            _detailsLabel.BackColor = CommonColors.Solarized.Base2;
            _detailsLabel.ForeColor = CommonColors.Solarized.Base01;

            var control = new RepopulateView(serializer, eventStore, _services)
            {
                Dock = DockStyle.Fill
            };

            viewsTab.Controls.Add(control);
        }
Example #3
0
        public AssembledComponents AssembleComponents()
        {
            var documents = CreateNuclear(new DocumentStrategy());
            var streamer  = Streamer;

            var tapes       = Tapes;
            var streaming   = Streaming;
            var routerQueue = CreateQueueWriter(Topology.RouterQueue);
            var aggregates  = new AggregateFactory(tapes, streamer, routerQueue);
            var sender      = new SimpleMessageSender(streamer, routerQueue);
            var flow        = new MessageSender(sender);

            var builder = new CqrsEngineBuilder(streamer);

            var log        = tapes.GetOrCreateStream(Topology.DomainLogName);
            var dispatcher = new SimpleDispatcher(aggregates, streamer, log);

            builder.Handle(CreateInbox(Topology.RouterQueue),
                           Topology.Route(CreateQueueWriter, streamer, tapes), "router");
            builder.Handle(CreateInbox(Topology.EntityQueue), aggregates.Dispatch);

            var functions = new RedirectToDynamicEvent();
            // documents
            //functions.WireToWhen(new RegistrationUniquenessProjection(atomic.Factory.GetEntityWriter<unit, RegistrationUniquenessDocument>()));

            // UI projections
            var projectionStore = CreateNuclear(new ProjectionStrategy());

            foreach (var projection in BootstrapProjections.BuildProjectionsWithWhenConvention(projectionStore.Factory))
            {
                functions.WireToWhen(projection);
            }

            // processes
            //functions.WireToWhen(new Domain.RecipeProcess(flow));

            builder.Handle(CreateInbox(Topology.EventsQueue), aem => CallHandlers(functions, aem));


            var timer = new StreamingTimerService(CreateQueueWriter(Topology.RouterQueue),
                                                  streaming.GetContainer(Topology.FutureMessagesContainer), streamer);

            builder.Handle(CreateInbox(Topology.TimerQueue), timer.PutMessage);
            builder.AddProcess(timer);

            // GNS: just for this simple sample. In reality one would have some command handlers involved
            Bus.SetBus(new SimpleBus(sender, dispatcher));

            return(new AssembledComponents
            {
                Builder = builder,
                Sender = sender,
                Dispatcher = dispatcher,
                ProjectionFactory = projectionStore.Factory,
                Setup = this
            });
        }
Example #4
0
 static void Consume(CreateCustomer cmd, NuclearStorage storage, SimpleMessageSender sender)
 {
     var customer = new Customer(cmd.CustomerId, cmd.CustomerName);
     storage.AddEntity(customer.Id, customer);
     sender.SendOne(new CustomerCreated
         {
             CustomerId = cmd.CustomerId,
             CustomerName = cmd.CustomerName
         });
 }
Example #5
0
        protected static void HandleNuclear(NuclearMessage msg, SimpleMessageSender sender, NuclearStorage storage)
        {
            var count = storage.AddOrUpdateSingleton(() => 1, i => i + 1);

            if (count >= 2)
            {
                sender.SendBatch(new object[] {}, e => e.AddString("ok"));
                return;
            }
            sender.SendOne(new NuclearMessage());
        }
Example #6
0
        protected static void HandleAtomic(AtomicMessage msg, SimpleMessageSender sender, IAtomicWriter <unit, int> arg3)
        {
            var count = arg3.AddOrUpdate(unit.it, () => 1, i => i + 1);

            if (count > 2)
            {
                sender.SendBatch(new object[] {}, e => e.AddString("ok"));
                return;
            }
            sender.SendOne(new AtomicMessage());
        }
Example #7
0
        static void AttachToLocalLog(string filePath)
        {
            var config = FileStorage.CreateConfig(Path.GetDirectoryName(filePath) ?? "");

            var cache = new FileTapeStream(filePath);

            var store    = new LocalEventStore(null, cache);
            var send     = config.CreateQueueWriter(Topology.RouterQueue);
            var endpoint = new SimpleMessageSender(EnvelopeStreamer, send);

            Application.Run(new DomainLogView(store, endpoint, EnvelopeStreamer));
        }
Example #8
0
        static void AttachToLocalLog(string filePath)
        {
            var config = FileStorage.CreateConfig(Path.GetDirectoryName(filePath) ?? "");

            var cache = new FileTapeStream(filePath);

            var store = new LocalEventStore(null, cache);
            var send = config.CreateQueueWriter(Topology.RouterQueue);
            var endpoint = new SimpleMessageSender(EnvelopeStreamer, send);

            Application.Run(new DomainLogView(store, endpoint, EnvelopeStreamer));
        }
Example #9
0
        public DomainLogView(LocalEventStore eventStore, SimpleMessageSender endpoint, IEnvelopeStreamer serializer)
        {
            InitializeComponent();

            _client = eventStore;

            _services = new ShellServices(endpoint);
            _serializer = serializer;

            _log.BackColor = CommonColors.Solarized.Base03;
            _log.ForeColor = CommonColors.Solarized.Base0;

            _display.BackColor = CommonColors.Solarized.Base3;
            _display.ForeColor = CommonColors.Solarized.Base00;

            _detailsLabel.BackColor = CommonColors.Solarized.Base2;
            _detailsLabel.ForeColor = CommonColors.Solarized.Base01;
        }
Example #10
0
        public DomainLogView(LocalEventStore eventStore, SimpleMessageSender endpoint, IEnvelopeStreamer serializer)
        {
            InitializeComponent();

            _client = eventStore;

            _services   = new ShellServices(endpoint);
            _serializer = serializer;

            _log.BackColor = CommonColors.Solarized.Base03;
            _log.ForeColor = CommonColors.Solarized.Base0;

            _display.BackColor = CommonColors.Solarized.Base3;
            _display.ForeColor = CommonColors.Solarized.Base00;

            _detailsLabel.BackColor = CommonColors.Solarized.Base2;
            _detailsLabel.ForeColor = CommonColors.Solarized.Base01;
        }
Example #11
0
        public DomainLogView(LocalEventStore eventStore, SimpleMessageSender endpoint, IEnvelopeStreamer serializer)
        {
            InitializeComponent();

            _client = eventStore;

            _services = new ShellServices(endpoint);
            _serializer = serializer;

            _log.BackColor = CommonColors.Solarized.Base03;
            _log.ForeColor = CommonColors.Solarized.Base0;

            _display.BackColor = CommonColors.Solarized.Base3;
            _display.ForeColor = CommonColors.Solarized.Base00;

            _detailsLabel.BackColor = CommonColors.Solarized.Base2;
            _detailsLabel.ForeColor = CommonColors.Solarized.Base01;

            var control = new RepopulateView(serializer, eventStore, _services) {Dock = DockStyle.Fill};
            viewsTab.Controls.Add(control);
        }
Example #12
0
        public AssembledComponents AssembleComponents()
        {
            // set up all the variables

            var routerQueue = CreateQueueWriter(Topology.RouterQueue);

            var commands = new RedirectToCommand();
            var events   = new RedirectToDynamicEvent();

            IEventStore eventStore = null;// new LegacyTapeStreamEventStore(Tapes(Topology.TapesContainer), Streamer, routerQueue);
            var         simple     = new SimpleMessageSender(Streamer, routerQueue);
            var         flow       = new CommandSender(simple);
            var         builder    = new CqrsEngineBuilder(Streamer);

            // route queue infrastructure together
            builder.Handle(CreateInbox(Topology.RouterQueue), Topology.Route(CreateQueueWriter, Streamer, Tapes), "router");
            builder.Handle(CreateInbox(Topology.EntityQueue), em => CallHandlers(commands, em));
            builder.Handle(CreateInbox(Topology.EventsQueue), aem => CallHandlers(events, aem));


            // message wiring magic
            DomainBoundedContext.ApplicationServices(Docs, eventStore).ForEach(commands.WireToWhen);
            DomainBoundedContext.Receptors(flow).ForEach(events.WireToWhen);
            DomainBoundedContext.Projections(Docs).ForEach(events.WireToWhen);
            DomainBoundedContext.Tasks(flow, Docs, false).ForEach(builder.AddTask);

            ClientBoundedContext.Projections(Docs).ForEach(events.WireToWhen);

            return(new AssembledComponents
            {
                Builder = builder,
                Sender = flow,
                Setup = this,
                Simple = simple
            });
        }
Example #13
0
 public CommandSender(SimpleMessageSender sender)
 {
     _sender = sender;
 }
Example #14
0
 public MessageSender(SimpleMessageSender sender)
 {
     _sender = sender;
 }
Example #15
0
 public ShellServices(SimpleMessageSender client)
 {
     _client = client;
 }
Example #16
0
        static void Main(string[] args)
        {
            const string integrationPath = @"temp";

            ConfigureObserver();

            var config = FileStorage.CreateConfig(integrationPath, "files");

            var demoMessages   = new List <ISampleMessage>();
            var currentProcess = Process.GetCurrentProcess();

            demoMessages.Add(new InstanceStarted("Inject git rev", currentProcess.ProcessName,
                                                 currentProcess.Id.ToString()));


            {
                // wipe all folders
                config.Reset();
                Console.WriteLine("Starting in funny mode");
                var security = new SecurityId(0);
                demoMessages.Add(new CreateSecurityAggregate(security));
                demoMessages.Add(new AddSecurityPassword(security, "Rinat Abdullin", "*****@*****.**", "password"));
                demoMessages.Add(new AddSecurityIdentity(security, "Rinat's Open ID", "http://abdullin.myopenid.org"));
                demoMessages.Add(new AddSecurityKey(security, "some key"));
            }



            var atomic   = config.CreateNuclear(new DocumentStrategy());
            var identity = new IdentityGenerator(atomic);
            var streamer = Contracts.CreateStreamer();

            var tapes       = config.CreateTape(Topology.TapesContainer);
            var streaming   = config.CreateStreaming();
            var routerQueue = config.CreateQueueWriter(Topology.RouterQueue);
            var aggregates  = new AggregateFactory(tapes, streamer, routerQueue, atomic, identity);

            var sender = new SimpleMessageSender(streamer, routerQueue);
            var flow   = new MessageSender(sender);

            var builder = new CqrsEngineBuilder(streamer);


            builder.Handle(config.CreateInbox(Topology.RouterQueue),
                           Topology.Route(config.CreateQueueWriter, streamer, tapes), "router");
            builder.Handle(config.CreateInbox(Topology.EntityQueue), aggregates.Dispatch);

            var functions = new RedirectToDynamicEvent();
            // documents
            //functions.WireToWhen(new RegistrationUniquenessProjection(atomic.Factory.GetEntityWriter<unit, RegistrationUniquenessDocument>()));

            // UI projections
            var projectionStore = config.CreateNuclear(new ProjectionStrategy());

            foreach (var projection in BootstrapProjections.BuildProjectionsWithWhenConvention(projectionStore.Factory))
            {
                functions.WireToWhen(projection);
            }

            // processes
            //functions.WireToWhen(new BillingProcess(flow));
            //functions.WireToWhen(new RegistrationProcess(flow));
            functions.WireToWhen(new ReplicationProcess(flow));

            builder.Handle(config.CreateInbox(Topology.EventsQueue), aem => CallHandlers(functions, aem));


            var timer = new StreamingTimerService(config.CreateQueueWriter(Topology.RouterQueue),
                                                  streaming.GetContainer(Topology.FutureMessagesContainer), streamer);

            builder.Handle(config.CreateInbox(Topology.TimerQueue), timer.PutMessage);
            builder.AddProcess(timer);


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

                    foreach (var sampleMessage in demoMessages)
                    {
                        sender.SendOne(sampleMessage);
                    }

                    Console.WriteLine(@"Press enter to stop");
                    Console.ReadLine();
                    cts.Cancel();



                    if (task.Wait(5000))
                    {
                        Console.WriteLine(@"Terminating");
                    }
                }
        }
Example #17
0
 public ShellServices(SimpleMessageSender client)
 {
     _client = client;
 }
 public SimpleBus(SimpleMessageSender sender, SimpleDispatcher dispatcher)
 {
     _sender     = sender;
     _dispatcher = dispatcher;
 }
 public MessageSender(SimpleMessageSender sender)
 {
     _sender = sender;
 }