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