Example #1
0
 public static IObservable <T> All <T>(this IObservableMessageBus bus)
     where T : IMessage
 {
     return(((ObservableMessageBus)bus)
            .messageSubject
            .Where(m => m is T)
            .Select(m => (T)m));
 }
Example #2
0
 public static IObservable <T> SubscribeTo <T>(this IObservableMessageBus bus)
 {
     return(((ObservableMessageBus)bus)
            .messageSubject
            .Where(m => m is T || m.Body is T)
            .Select(m => typeof(IMessage).GetTypeInfo().IsAssignableFrom(typeof(T).GetTypeInfo()) ?
                    (T)m :
                    (T)m.Body
                    ));
 }
        public static IDisposable SubscribeToAndUpdate <TMessage, TEntity>(this IObservableMessageBus source, Action <TEntity, TMessage> onNext, IEventRepository repo)
            where TMessage : class, IMessage <IEventSourcedEntityCommand>
            where TEntity : class, IEventSourcedEntity
        {
            async Task a(TMessage obj)
            {
                var ent = await repo.GetAsync <TEntity>(obj.Body.Id);

                onNext(ent, obj);

                await repo.SaveAsync(ent);
            }

            return(BusExtensions.SubscribeTo <TMessage>(source)
                   .Select(x => Observable.FromAsync(() => a(x)))
                   .Concat()
                   .Subscribe());
        }