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;
 }
Esempio n. 3
0
 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);
            }
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
 /// <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)));
 }
Esempio n. 8
0
 /// <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)));
 }
Esempio n. 9
0
 /// <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));
 }
Esempio n. 10
0
 /// <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));
 }
Esempio n. 11
0
 /// <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));
 }
 /// <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));
 }
Esempio n. 13
0
 public SubscriptionImpl(Uri address, RoutingSlipEvents events, RoutingSlipEventContents include)
 {
     Include = include;
     Address = address;
     Events  = events;
 }
Esempio n. 14
0
 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));
 }
Esempio n. 17
0
 /// <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));
 }