예제 #1
0
        public bool Remove(MessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }
            AndMessageFilter filter2 = filter as AndMessageFilter;

            return((filter2 != null) && this.Remove(filter2));
        }
예제 #2
0
        EndpointDispatcher LookupInCache(Message message, out bool addressMatched)
        {
            EndpointDispatcher result = null;
            int  priority             = int.MinValue;
            bool duplicatePriority    = false;

            addressMatched = false;

            if (this.cachedEndpoints != null && this.cachedEndpoints.Count > 0)
            {
                for (int i = 0; i < this.cachedEndpoints.Count; i++)
                {
                    EndpointDispatcher cachedEndpoint = cachedEndpoints[i];
                    int           cachedPriority      = cachedEndpoint.FilterPriority;
                    MessageFilter cachedFilter        = cachedEndpoint.EndpointFilter;

                    bool             matchResult;
                    AndMessageFilter andFilter = cachedFilter as AndMessageFilter;
                    if (andFilter != null)
                    {
                        bool addressResult;
                        matchResult     = andFilter.Match(message, out addressResult);
                        addressMatched |= addressResult;
                    }
                    else
                    {
                        matchResult = cachedFilter.Match(message);
                    }

                    if (matchResult)
                    {
                        addressMatched = true;
                        if (cachedPriority > priority || result == null)
                        {
                            result            = cachedEndpoint;
                            priority          = cachedPriority;
                            duplicatePriority = false;
                        }
                        else if (cachedPriority == priority && result != null)
                        {
                            duplicatePriority = true;
                        }
                    }
                }
            }

            if (duplicatePriority)
            {
                throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(SR.GetString(SR.FilterMultipleMatches)), message);
            }

            return(result);
        }
예제 #3
0
        public void Add(AndMessageFilter filter, FilterData data)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }
            this.filters.Add(filter, data);
            FilterDataPair <FilterData> pair = new FilterDataPair <FilterData>(filter, data);

            this.filterData.Add(filter, pair);
            this.table.Add(filter.Filter1, pair);
        }
예제 #4
0
 public bool Remove(AndMessageFilter filter)
 {
     if (filter == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
     }
     if (this.filters.Remove(filter))
     {
         this.filterData.Remove(filter);
         this.table.Remove(filter.Filter1);
         return(true);
     }
     return(false);
 }
        public bool Remove(MessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }

            AndMessageFilter sbFilter = filter as AndMessageFilter;

            if (sbFilter != null)
            {
                return(Remove(sbFilter));
            }
            return(false);
        }
        private EndpointDispatcher LookupInCache(Message message, out bool addressMatched)
        {
            EndpointDispatcher dispatcher = null;
            int  num  = -2147483648;
            bool flag = false;

            addressMatched = false;
            if ((this.cachedEndpoints != null) && (this.cachedEndpoints.Count > 0))
            {
                for (int i = 0; i < this.cachedEndpoints.Count; i++)
                {
                    bool flag2;
                    EndpointDispatcher dispatcher2  = this.cachedEndpoints[i];
                    int              filterPriority = dispatcher2.FilterPriority;
                    MessageFilter    endpointFilter = dispatcher2.EndpointFilter;
                    AndMessageFilter filter2        = endpointFilter as AndMessageFilter;
                    if (filter2 != null)
                    {
                        bool flag3;
                        flag2           = filter2.Match(message, out flag3);
                        addressMatched |= flag3;
                    }
                    else
                    {
                        flag2 = endpointFilter.Match(message);
                    }
                    if (flag2)
                    {
                        addressMatched = true;
                        if ((filterPriority > num) || (dispatcher == null))
                        {
                            dispatcher = dispatcher2;
                            num        = filterPriority;
                            flag       = false;
                        }
                        else if ((filterPriority == num) && (dispatcher != null))
                        {
                            flag = true;
                        }
                    }
                }
            }
            if (flag)
            {
                throw TraceUtility.ThrowHelperError(new MultipleFilterMatchesException(System.ServiceModel.SR.GetString("FilterMultipleMatches")), message);
            }
            return(dispatcher);
        }
예제 #7
0
 internal FilterDataPair(AndMessageFilter filter, FilterData data)
 {
     this.filter = filter;
     this.data   = data;
 }