예제 #1
0
        public static Task publishToReadModel(ResolvedEvent eS_Event)
        {
            EventFromES normal = NormalizeESEvent(eS_Event);

            EventDistributor.Publish(normal);
            return(Task.FromResult(0));
        }
예제 #2
0
        public static List <EventFromES> HydrateFromES(string streamId)
        {
            var eventStream = connection.ReadStreamEventsForwardAsync(streamId, 0, 256, false).Result.Events;
            List <EventFromES> theWetList = new List <EventFromES>();

            foreach (var eS_Event in eventStream)
            {
                EventFromES normalized = NormalizeESEvent(eS_Event);
                theWetList.Add(normalized);
            }
            return(theWetList);
        }
예제 #3
0
        private static EventFromES NormalizeESEvent(ResolvedEvent eS_Event)
        {
            string      eventData = System.Text.Encoding.UTF8.GetString(eS_Event.Event.Data);
            dynamic     body      = JsonConvert.DeserializeObject <dynamic>(eventData);
            EventFromES fromES    = new EventFromES
            {
                StreamId  = eS_Event.OriginalStreamId,
                Id        = eS_Event.OriginalStreamId,
                Data      = body,
                EventType = eS_Event.Event.EventType,
                TimeStamp = eS_Event.Event.Created.ToString()
            };

            return(fromES);
        }
        public static void Publish(EventFromES anEvent)
        {
            dynamic readmodelData;
            string  nspace = "Ops.ReadModels";
            var     q      = from t in Assembly.GetExecutingAssembly().GetTypes()
                             where t.IsClass && t.Namespace == nspace
                             select t;

            foreach (var readModel in q)
            {
                string[] rMName  = readModel.Name.ToString().Split("Data");
                string[] rMName2 = readModel.Name.ToString().Split("Read");
                if (rMName.Length == 1 && rMName2.Length > 1)
                {
                    try
                    {
                        MethodInfo theMethod  = typeof(ReadModels.ReadModel).GetMethod("EventPublish", new[] { typeof(EventFromES) });
                        string     methodName = readModel.Name.ToString();
                        string     nameSpace  = readModel.Namespace.ToString();
                        string     key        = methodName.Split("Read")[0];
                        if (Book.book.ContainsKey(key))
                        {
                            string fullClassName     = nameSpace + "." + methodName;
                            object readModelToInvoke = Activator.CreateInstance(Type.GetType(fullClassName));
                            readmodelData = theMethod.Invoke(readModelToInvoke, new EventFromES[] { anEvent });
                        }
                        else
                        {
                            Book.book.Add(key, new List <ReadModelData>());
                            string fullClassName     = nameSpace + "." + methodName;
                            object readModelToInvoke = Activator.CreateInstance(Type.GetType(fullClassName));
                            readmodelData = theMethod.Invoke(readModelToInvoke, new EventFromES[] { anEvent });
                        }
                        if (key.Split("Table").Length > 1 && readmodelData != null)
                        {
                            TableReadmodelConnection.UpdateTable(readmodelData, key);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.Write(e);
                    }
                }
            }
        }