Exemple #1
0
        private async Task <bool> InvokeRouting(RoutableEventPipelines eventPipeline, TContext context, bool ignoreCompletion)
        {
            // obtain list of routing objects.
            IList <Routing <TContext, TRequest, TResponse> > routing;

            lock (Routing) {
                if (Routing.TryGetValue(eventPipeline, out routing) == false)
                {
                    return(false);
                }
            }

            // obtain a snapshot of the routes.
            var routeCollections = new List <List <Route <TContext, TRequest, TResponse> > >();

            lock (routing) {
                foreach (var r in routing)
                {
                    routeCollections.Add(r.Routes.Where(_ => _.IsMatch(context)).ToList());
                }
            }

            // invoke each route until one succeeds (unless ignoreCompletion).
            bool wasCompletedSuccessfully = false;

            foreach (var routeCollection in routeCollections)
            {
                foreach (var route in routeCollection)
                {
                    if (await route.Invoke(context) == true)
                    {
                        if (ignoreCompletion == true)
                        {
                            wasCompletedSuccessfully = true;
                            break;
                        }
                        else
                        {
                            return(true);
                        }
                    }
                }
            }

            return(wasCompletedSuccessfully);
        }
Exemple #2
0
 /// <summary>
 /// Synonym for AppendRoutingToEventPipeline.
 /// </summary>
 public RoutableOptions <TContext, TRequest, TResponse> AddRouting(RoutableEventPipelines eventPipeline, Routing <TContext, TRequest, TResponse> routing) => AppendRoutingToEventPipeline(eventPipeline, routing);
Exemple #3
0
        /// <summary>
        /// Prepend a routing instance to handle requests to the specified pipeline.
        /// </summary>
        /// <seealso cref="RoutableEventPipelines"/>
        public RoutableOptions <TContext, TRequest, TResponse> PrependRoutingToEventPipeline(RoutableEventPipelines eventPipeline, Routing <TContext, TRequest, TResponse> routing)
        {
            var list = GetEventPipelineRouting(eventPipeline);

            lock (list) {
                list.Insert(0, routing);
            }
            return(this);
        }
Exemple #4
0
 private IList <Routing <TContext, TRequest, TResponse> > GetEventPipelineRouting(RoutableEventPipelines eventPipeline)
 {
     lock (Routing) {
         if (Routing.TryGetValue(eventPipeline, out var list) == false)
         {
             list = new List <Routing <TContext, TRequest, TResponse> >();
             Routing.Add(eventPipeline, list);
             return(list);
         }
         else
         {
             return(list);
         }
     }
 }