internal static void HandleAndCommitAndPost( SubscriberMessage message, PublishersBySubscription publishersBySubscription, NotificationsByCorrelationsFunction <TUowProvider> notificationsByCorrelationsFunction, PublisherVersionByCorrelationsFunction <TUowProvider> publisherVersionByCorrelationsFunction, SaveNotificationsByPublisherAndVersionAction <TUowProvider> saveNotificationsByPublisherAndVersionAction, CommitWork <TUowProvider> commitWork, Action <IEnumerable <IDomainEvent> > publish) { var list = new List <IDomainEvent>(); commitWork(provider => { Handle( message, publishersBySubscription, notificationsByCorrelationsFunction(provider), publisherVersionByCorrelationsFunction(provider), () => DateTimeOffset.Now, saveNotificationsByPublisherAndVersionAction(provider), messages => list.AddRange(messages)); }); publish(list); }
public PublisherCorrelationMap( List <KeyValuePair <TypeContract, CorrelationMap> > maps, List <KeyValuePair <TypeContract, Func <TSubscriberDataContract, JsonContent, TSubscriberDataContract> > > mappers, PublishersBySubscription publisherByNotificationAndPublisherContract) { _publisherDataContractMaps = maps ?? new List <KeyValuePair <TypeContract, CorrelationMap> >(); _publisherDataMappers = mappers ?? new List <KeyValuePair <TypeContract, Func <TSubscriberDataContract, JsonContent, TSubscriberDataContract> > >(); PublisherBySubscription = publisherByNotificationAndPublisherContract ?? new PublishersBySubscription(); }
public static EventStoreConfiguration <TEventStoreConnectionStringName> ConfigureSubscribers <TEventStoreConnectionStringName>( this EventStoreConfiguration <TEventStoreConnectionStringName> configuration, PublishersBySubscription subscribers) where TEventStoreConnectionStringName : class { configuration.ConfigureSubscriptions(subscribers.Select(x => x.Key)); new RequestsRegistration <PublishersBySubscription>(() => subscribers) .Register <ConfiguredSubscribers, Subscriber>( (input, provider) => EventStore <AdoNetTransactionUowProvider <TEventStoreConnectionStringName> > .Subscriber(provider), Return.List); return(configuration); }
public static Func <TypeContract, IEnumerable <Func <INotification, NotificationsByPublisher> > > Given( this PublishersBySubscription subscriptions, params IDomainEvent[] given) { var list = given.AsEvents().ToList().AsReadOnly(); return(contract => subscriptions .Where(p => p.Key.NotificationContract.Equals(contract)) .Select(p => p.Value) .Select <Publisher, Func <INotification, NotificationsByPublisher> > ( publisher => notification => publisher( new Event { Notification = notification, EventId = new EventId { Value = list.OrderByDescending(g => g.EventId.Value).First().EventId.Value + 1 } }, NotificationsByCorrelations(list), () => DateTimeOffset.Now) )); }
internal static void Handle( SubscriberMessage message, PublishersBySubscription publishersBySubscription, NotificationsByCorrelations notificationsByCorrelations, Func <IEnumerable <Correlation>, int> publisherVersionByPublisherDataContractCorrelations, Func <DateTimeOffset> clock, Action <NotificationsByPublisherAndVersion> saveNotificationsByPublisherAndVersion, Action <IEnumerable <IDomainEvent> > notify) { var publisher = publishersBySubscription[message.Subscription]; var notificationsByPublisher = publisher( message.Event, notificationsByCorrelations, clock); var notificationsByPublisherAndVersion = Functions.AppendPublisherVersion( notificationsByPublisher, publisherVersionByPublisherDataContractCorrelations); saveNotificationsByPublisherAndVersion(notificationsByPublisherAndVersion); notify(notificationsByPublisher.Notifications.Select(x => x.Item1)); }