예제 #1
0
        public void AddChildren(IEnumerable <ANamable> children)
        {
            foreach (IChild child in children.Cast <IChild>())
            {
                child.AddParent(this);
            }

            Upstreams.AddRange(children.OfType <AMessageModule>());
            Config.AddRange(children.OfType <AConfig>());
        }
예제 #2
0
        /// <summary>
        /// 产生路由值
        /// </summary>
        /// <param name="requestData"></param>
        /// <returns></returns>
        public IReadOnlyDictionary <string, string> Match(RouteRequestData requestData)
        {
            if (Upstreams.Any() == false)
            {
                return(new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase));
            }

            foreach (var item in Upstreams)
            {
                var values = item.GetRouteValues(requestData);
                if (values != null)
                {
                    return(values);
                }
            }

            return(null);
        }
예제 #3
0
        private IReadOnlyDictionary <string, string> TryGetRouteValues(HttpRequestMessage request)
        {
            var routeData = request.GetRouteData();

            if (routeData?.RouteRule == this)
            {
                return(routeData.Values);
            }

            else if (Upstreams.Any())
            {
                return(Match(new RouteRequestData(request)));
            }

            else
            {
                return(new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase));
            }
        }
예제 #4
0
파일: Recombine.cs 프로젝트: cwenham/Meep
        protected override IObservable <Message> GetMessagingSource()
        {
            if (Upstreams.Count > 2)
            {
                logger.Warn("More than two upstream modules for Recombine:{0}", Name);
            }

            if (Upstreams.Count < 2)
            {
                logger.Fatal("Not enough upstream modules for Recombine:{0}. Needs 2", Name);
                throw new InvalidOperationException("Not enough upstream sources for Recombine module");
            }

            // Use Zip instead of Merge because we want only two parents
            var parents  = Upstreams.Take(2);
            var pairings = parents.First().Pipeline.Zip <Message, Message, (Message, Message)>(parents.Last().Pipeline, (mum, dad) => (mum, dad));

            return(from p in pairings
                   where p.Item1 is XMLMessage && p.Item2 is XMLMessage
                   let offspring = GenerateOffspring(p, Offspring)
                                   where offspring != null
                                   from o in offspring
                                   select o);
        }
예제 #5
0
 IEnumerable <ANamable> IParent.GetChildren()
 {
     return(Upstreams.Cast <ANamable>().Union(Config.Cast <ANamable>()));
 }