public static IObservable <IEnumerable <TTarget> > ApplyEvent <TEvent, TTarget, TContext>(
     this IObservable <TEvent> source,
     IEventProcessor <TTarget, TContext, TEvent> eventProcessor,
     TContext context,
     IEventProcessorTrace <TTarget, TContext, TEvent> trace = null
     )
     where TEvent : IEvent
 {
     return(source.Where(change => eventProcessor.CanExecute(change, context))
            .Select(change =>
     {
         return eventProcessor.Execute(change, context, trace);
     }));
 }
 public static IObservable <IChangeSet <IEnumerable <TTarget>, TKey> > ApplyEvent <TEvent, TKey, TTarget, TContext>(
     this IObservable <IChangeSet <TEvent, TKey> > source,
     IEventProcessor <TTarget, TContext, TEvent> eventProcessor,
     TContext context,
     IEventProcessorTrace <TTarget, TContext, TEvent> trace = null
     )
     where TEvent : IEvent
 {
     return(source
            .Filter(change => eventProcessor.CanExecute(change, context))
            .Transform(change =>
     {
         return eventProcessor.Execute(change, context, trace);
     }));
 }
 public static IObservable <IChangeSet <TEvent, TKey> > RaiseEvent <TEvent, TKey, TTarget, TContext>(
     this IObservable <IChangeSet <TEvent, TKey> > source,
     IEventProcessor <TTarget, TContext, TEvent> eventProcessor,
     TContext context,
     IEventProcessorTrace <TTarget, TContext, TEvent> trace = null
     )
     where TEvent : IEvent
 {
     return(source
            .Filter(change => eventProcessor.CanExecute(change, context))
            .Do(changes =>
     {
         foreach (var change in changes)
         {
             eventProcessor.Execute(change.Current, context, trace);
         }
     }));
 }
Exemple #4
0
        public IEnumerable <TTarget> Execute(TEvent ev, TContext context, IEventProcessorTrace <TTarget, TContext, TEvent> trace)
        {
            var nodes = _sortedGraph.Where(n => n.Value.Accept(ev));

            var notifiables = GetNotifiables(ev, context);

            foreach (var node in nodes)
            {
                if (null != trace)
                {
                    trace.Visit(node, ev, notifiables.Count());
                }

                ProcessNode(node, ev, notifiables, context);
            }

            return(notifiables);
        }