async Task PublishSubscriptionEvent <T>(RoutingSlipEvents eventFlag, Func <RoutingSlipEventContents, T> messageFactory, Subscription subscription) where T : class { if ((subscription.Events & RoutingSlipEvents.EventMask) == RoutingSlipEvents.All || subscription.Events.HasFlag(eventFlag)) { if (string.IsNullOrWhiteSpace(_activityName) || string.IsNullOrWhiteSpace(subscription.ActivityName) || _activityName.Equals(subscription.ActivityName, StringComparison.OrdinalIgnoreCase)) { var endpoint = await _sendEndpointProvider.GetSendEndpoint(subscription.Address).ConfigureAwait(false); var message = messageFactory(subscription.Include); if (subscription.Message != null) { var adapter = new MessageEnvelopeContextAdapter(null, subscription.Message, JsonMessageSerializer.ContentTypeHeaderValue, message); await endpoint.Send(message, adapter).ConfigureAwait(false); } else { await endpoint.Send(message).ConfigureAwait(false); } } } }
public SubscriptionImpl(Uri address, RoutingSlipEvents events, RoutingSlipEventContents include, string activityName = null, MessageEnvelope message = null) { Include = include; ActivityName = activityName; Address = address; Events = events; Message = message; }
public RoutingSlipBuilderSendEndpoint(IRoutingSlipSendEndpointTarget builder, Uri destinationAddress, RoutingSlipEvents events, string activityName, RoutingSlipEventContents include = RoutingSlipEventContents.All) { _observers = new SendObservable(); _builder = builder; _events = events; _activityName = activityName; _include = include; _destinationAddress = destinationAddress; }
async Task PublishEvent <T>(RoutingSlipEvents eventFlag, Func <RoutingSlipEventContents, T> messageFactory) where T : class { foreach (var subscription in _routingSlip.Subscriptions) { await PublishSubscriptionEvent(eventFlag, messageFactory, subscription).ConfigureAwait(false); } if (_routingSlip.Subscriptions.All(sub => sub.Events.HasFlag(RoutingSlipEvents.Supplemental))) { await _publishEndpoint.Publish(messageFactory(RoutingSlipEventContents.All)).ConfigureAwait(false); } }
async Task PublishEvent <T>(RoutingSlipEvents eventFlag, Func <RoutingSlipEventContents, T> messageFactory) where T : class { if (_routingSlip.Subscriptions.Any()) { foreach (var subscription in _routingSlip.Subscriptions) { if (subscription.Events == RoutingSlipEvents.All || subscription.Events.HasFlag(eventFlag)) { var endpoint = await _sendEndpointProvider.GetSendEndpoint(subscription.Address).ConfigureAwait(false); var subscriptionMessage = messageFactory(subscription.Include); await endpoint.Send(subscriptionMessage).ConfigureAwait(false); } } } else { await _publishEndpoint.Publish(messageFactory(RoutingSlipEventContents.All)).ConfigureAwait(false); } }
/// <summary> /// Adds a message subscription to the routing slip that will be sent at the specified event points /// </summary> /// <param name="address"></param> /// <param name="events"></param> /// <param name="activityName">Only send events for the specified activity</param> /// <param name="contents"></param> /// <param name="callback"></param> /// <returns></returns> public Task AddSubscription(Uri address, RoutingSlipEvents events, RoutingSlipEventContents contents, string activityName, Func <ISendEndpoint, Task> callback) { return(callback(new RoutingSlipBuilderSendEndpoint(this, address, events, activityName, contents))); }
/// <summary> /// Adds a message subscription to the routing slip that will be sent at the specified event points /// </summary> /// <param name="address"></param> /// <param name="events"></param> /// <param name="callback"></param> /// <returns></returns> public Task AddSubscription(Uri address, RoutingSlipEvents events, Func <ISendEndpoint, Task> callback) { return(callback(new RoutingSlipBuilderSendEndpoint(this, address, events, null))); }
/// <summary> /// Add an explicit subscription to the routing slip events /// </summary> /// <param name="address">The destination address where the events are sent</param> /// <param name="events">The events to include in the subscription</param> /// <param name="contents">The contents of the routing slip event</param> /// <param name="activityName">Only send events for the specified activity</param> public void AddSubscription(Uri address, RoutingSlipEvents events, RoutingSlipEventContents contents, string activityName) { _subscriptions.Add(new SubscriptionImpl(address, events, contents, activityName)); }
/// <summary> /// Add an explicit subscription to the routing slip events /// </summary> /// <param name="address">The destination address where the events are sent</param> /// <param name="events">The events to include in the subscription</param> /// <param name="contents">The contents of the routing slip event</param> public void AddSubscription(Uri address, RoutingSlipEvents events, RoutingSlipEventContents contents) { _subscriptions.Add(new SubscriptionImpl(address, events, contents)); }
/// <summary> /// Adds a custom subscription message to the routing slip which is sent at the specified events /// </summary> /// <param name="address">The destination address where the events are sent</param> /// <param name="events">The events to include in the subscription</param> /// <param name="contents">The contents of the routing slip event</param> /// <param name="activityName"></param> /// <param name="message">The custom message to be sent</param> void IRoutingSlipSendEndpointTarget.AddSubscription(Uri address, RoutingSlipEvents events, RoutingSlipEventContents contents, string activityName, MessageEnvelope message) { _subscriptions.Add(new SubscriptionImpl(address, events, contents, activityName, message)); }
public SubscriptionImpl(Uri address, RoutingSlipEvents events, RoutingSlipEventContents include) { Include = include; Address = address; Events = events; }
/// <summary> /// Adds a message subscription to the routing slip that will be sent at the specified event points /// </summary> /// <param name="address"></param> /// <param name="events"></param> /// <param name="activityName">Only send events for the specified activity</param> /// <param name="contents"></param> /// <param name="callback"></param> /// <returns></returns> public Task AddSubscription(Uri address, RoutingSlipEvents events, RoutingSlipEventContents contents, string activityName, Func<ISendEndpoint, Task> callback) { return callback(new RoutingSlipBuilderSendEndpoint(this, address, events, activityName, contents)); }
/// <summary> /// Adds a message subscription to the routing slip that will be sent at the specified event points /// </summary> /// <param name="address"></param> /// <param name="events"></param> /// <param name="callback"></param> /// <returns></returns> public Task AddSubscription(Uri address, RoutingSlipEvents events, Func<ISendEndpoint, Task> callback) { return callback(new RoutingSlipBuilderSendEndpoint(this, address, events, null)); }