Example #1
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);
                }
            }
        }
 public AndMessageFilterTable()
 {
     filters    = new Dictionary <MessageFilter, FilterData>();
     filterData = new Dictionary <MessageFilter, FilterDataPair>();
     table      = new MessageFilterTable <FilterDataPair>();
 }
 internal ThreadSafeMessageFilterTable()
 {
     _table   = new MessageFilterTable <FilterData>();
     SyncRoot = new object();
 }