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); } })); }
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); }