Beispiel #1
0
        public static void Main(string[] args)
        {
            var es = new Eventstore <InMemoryEventRepository>();
            var a  = new A();
            var b  = new B();
            var c  = new C();

            es.Record(null, a);
            es.Record(a.Id, c);
            es.Record(c.Id, b);

            EventArchive.Write("myarchive.json", es.Replay());

            var events = EventArchive.Read("myarchive.json");

            var     es2 = new Eventstore <InMemoryEventRepository>();
            EventId id  = null;

            events.ToList().ForEach(delegate(IEvent e)
            {
                es2.Record(id, e);
                id = e.Id;
            });

            Console.WriteLine(es2.Replay().ToList().Count);
        }
        public void Store_and_load()
        {
            const string FILENAME = nameof(EventArchive_tests) + "_" + nameof(Store_and_load) + ".json";

            if (File.Exists(FILENAME))
            {
                File.Delete(FILENAME);
            }

            var events = new IEvent[] {
                new TestEvent {
                    Foo = "a"
                },
                new AnotherTestEvent {
                    Bar = 1
                },
                new TestEvent {
                    Foo = "b"
                }
            };

            EventArchive.Write(FILENAME, events);
            var result = EventArchive.Read(FILENAME).ToArray();

            Assert.Equal("a", ((TestEvent)result[0]).Foo);
            Assert.Equal(1, ((AnotherTestEvent)result[1]).Bar);
            Assert.Equal("b", ((TestEvent)result[2]).Foo);
        }
Beispiel #3
0
        public static void Main(string[] args)
        {
            var es = new InMemoryEventstore();

            es.Record(new A());
            es.Record(new C());
            es.Record(new B());

            nsimpleeventstore.adapters.EventArchive.Write("myarchive.json", es.Replay().Events);

            var events = EventArchive.Read("myarchive.json");

            var es2 = new InMemoryEventstore(events);

            Console.WriteLine(es2.Replay().Events.Length);
        }
Beispiel #4
0
        public async Task <HttpResponseMessage> GetEvents(string interval)
        {
            try
            {
                HttpClient httpClient = this.getBasicClient();

                TransactionLog tLog = transactionLogService.Create(new TransactionLog());
                tLog.TransactionLogK = Guid.NewGuid();
                string unqTID = tLog.TransactionLogK.ToString();
                httpClient.DefaultRequestHeaders.Add("X-Transaction-ID", unqTID);

                string apiUri   = "https://" + this.apiChorus + "/events?interval=" + interval;
                var    response = await httpClient.GetAsync(new Uri(apiUri));

                tLog.Authorization = httpClient.DefaultRequestHeaders.Authorization.ToString();
                tLog.BaseAddress   = apiUri;
                tLog.Response      = response.ToString();
                tLog.ResponseBody  = await response.Content.ReadAsStringAsync();

                transactionLogService.SaveChanges();

                if (response.IsSuccessStatusCode)
                {
                    JavaScriptSerializer oJS            = new JavaScriptSerializer();
                    List <EventStage>    listEventStage = new List <EventStage>();
                    listEventStage = oJS.Deserialize <List <EventStage> >(tLog.ResponseBody);

                    //Existing data in EventStage
                    IQueryable <EventStage> esExtgData = eventStageService.Find();

                    //Existing data in EventArchive
                    IQueryable <EventArchive> eaExtgData = eventArchiveService.Find();

                    //New inserts in EventStage
                    List <EventStage> esNewData = new List <EventStage>();

                    //New inserts in EventArchive
                    List <EventArchive> eaNewData = new List <EventArchive>();

                    if (this.chorusLimitEnable == "true")
                    {
                        int totalCount = esExtgData.Count();
                        if (totalCount >= this.chorusOrderLimit)
                        {
                            throw new HttpResponseException(
                                      Request.CreateErrorResponse(HttpStatusCode.NotFound,
                                                                  "Limit of " + this.chorusOrderLimit + " Service-Orders reached.")
                                      );
                        }
                    }

                    //Insert data from payload
                    foreach (EventStage esItm in listEventStage)
                    {
                        if (this.chorusLimitEnable == "true" && esNewData != null)
                        {
                            int totalCount = esExtgData.Count() + esNewData.Count();
                            if (totalCount >= this.chorusOrderLimit)
                            {
                                break;
                            }
                        }
                        EventStage esFound = (from es in esExtgData
                                              where es.OrderID == esItm.OrderID && es.ID == esItm.ID
                                              select es).FirstOrDefault();
                        EventStage esNewFound = null;
                        if (esNewData != null)
                        {
                            esNewFound = esNewData.Where(es => es.OrderID == esItm.OrderID &&
                                                         es.ID == esItm.ID).FirstOrDefault();
                        }

                        if (esFound == null && esNewFound == null)
                        {
                            eventStageService.Create(esItm);
                            esNewData.Add(esItm);
                        }

                        EventArchive eaFound = (from ea in eaExtgData
                                                where ea.OrderID == esItm.OrderID &&
                                                ea.SOStage == esItm.SOStage &&
                                                ea.SOType == esItm.SOType &&
                                                ea.ASID == esItm.ASID &&
                                                ea.ID == esItm.ID
                                                select ea).FirstOrDefault();

                        EventArchive eaNewFound = null;
                        if (eaNewData != null)
                        {
                            eaNewFound = eaNewData.Where(ea => ea.OrderID == esItm.OrderID &&
                                                         ea.SOStage == esItm.SOStage &&
                                                         ea.SOType == esItm.SOType &&
                                                         ea.ASID == esItm.ASID &&
                                                         ea.ID == esItm.ID).FirstOrDefault();
                        }

                        if (eaFound == null && eaNewFound == null)
                        {
                            EventArchive eaTmp = new EventArchive();
                            eaTmp.ID          = esItm.ID;
                            eaTmp.EventAction = esItm.EventAction;
                            eaTmp.OrderID     = esItm.OrderID;
                            eaTmp.SOType      = esItm.SOType;
                            eaTmp.SOStage     = esItm.SOStage;
                            eaTmp.CrtDate     = esItm.CrtDate;
                            eaTmp.ASID        = esItm.ASID;

                            eventArchiveService.Create(eaTmp);
                            eaNewData.Add(eaTmp);
                        }
                    }

                    //Save and check if EventStage-table-modified while execution
                    bool saveFailed;
                    do
                    {
                        saveFailed = false;
                        try
                        {
                            eventStageService.SaveChanges();
                        }
                        catch (DbUpdateConcurrencyException ex)
                        {
                            saveFailed = true;

                            // Update original values from the database
                            var entry = ex.Entries.Single();
                            entry.OriginalValues.SetValues(entry.GetDatabaseValues());
                        }
                    } while (saveFailed);

                    //Save and check if EventArchive-table-modified while execution
                    do
                    {
                        saveFailed = false;
                        try
                        {
                            eventArchiveService.SaveChanges();
                        }
                        catch (DbUpdateConcurrencyException ex)
                        {
                            saveFailed = true;

                            // Update original values from the database
                            var entry = ex.Entries.Single();
                            entry.OriginalValues.SetValues(entry.GetDatabaseValues());
                        }
                    } while (saveFailed);

                    response = Request.CreateResponse(HttpStatusCode.OK, eaNewData);
                }

                return(response);
            }
            catch (Exception e)
            {
                throw e;
            }
        }