internal void Add(MessageFilter filter, FilterData data, int priority)
 {
     lock (SyncRoot)
     {
         _table.Add(filter, data, priority);
     }
 }
Exemplo n.º 2
0
        public void AddEndpoint(EndpointDispatcher endpoint)
        {
            lock (ThisLock)
            {
                MessageFilter filter   = endpoint.EndpointFilter;
                int           priority = endpoint.FilterPriority;

                if (_filters == null)
                {
                    if (_cachedEndpoints == null)
                    {
                        _cachedEndpoints = new List <EndpointDispatcher>(optimizationThreshold);
                    }

                    if (_cachedEndpoints.Count < optimizationThreshold)
                    {
                        _cachedEndpoints.Add(endpoint);
                    }
                    else
                    {
                        _filters = new MessageFilterTable <EndpointDispatcher>();
                        for (int i = 0; i < _cachedEndpoints.Count; i++)
                        {
                            int           cachedPriority = _cachedEndpoints[i].FilterPriority;
                            MessageFilter cachedFilter   = _cachedEndpoints[i].EndpointFilter;
                            _filters.Add(cachedFilter, _cachedEndpoints[i], cachedPriority);
                        }
                        _filters.Add(filter, endpoint, priority);
                        _cachedEndpoints = null;
                    }
                }
                else
                {
                    _filters.Add(filter, endpoint, priority);
                }
            }
        }
Exemplo n.º 3
0
        public void Add(AndMessageFilter filter, FilterData data)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(filter));
            }

            filters.Add(filter, data);

            FilterDataPair pair = new FilterDataPair(filter, data);

            filterData.Add(filter, pair);

            table.Add(filter.Filter1, pair);
        }