public SubscriptionInfo(PublisherFilter publisherFilter, MessageAttributeFilter attributeFilter, bool isIgnoreSubscription)
 {
     PublisherFilter = publisherFilter;
     AttributeFilter = attributeFilter;
     IsIgnoreSubscription = isIgnoreSubscription;
 }
        /// <summary>
        /// Adds/Modify/Deletes an existing subscription
        /// </summary>
        public void Subscribe(PublisherFilter publisherFilter, MessageAttributeFilter attributeFilter, bool isIgnoreSubscription)
        {
            if (publisherFilter == null)
                throw new ArgumentNullException(nameof(publisherFilter));

            if (m_disposed)
                return;

            lock (m_syncRoot)
            {
                if (m_disposed)
                    return;

                if (m_allSubscriptions == null)
                {
                    if (attributeFilter == null)
                        return;

                    m_allSubscriptions = new List<SubscriptionInfo>();
                    m_allSubscriptions.Add(new SubscriptionInfo(publisherFilter, attributeFilter, isIgnoreSubscription));
                }
                else
                {
                    for (int x = 0; x < m_allSubscriptions.Count; x++)
                    {
                        if (m_allSubscriptions[x].PublisherFilter.ContainsTheSameLogSearchCriteria(publisherFilter))
                        {
                            if (attributeFilter == null)
                            {
                                m_allSubscriptions.RemoveAt(x);
                                return;
                            }
                            m_allSubscriptions[x].AttributeFilter = attributeFilter;
                            m_allSubscriptions[x].IsIgnoreSubscription = isIgnoreSubscription;
                            return;
                        }
                    }
                    if (attributeFilter == null)
                        return;

                    m_allSubscriptions.Add(new SubscriptionInfo(publisherFilter, attributeFilter, isIgnoreSubscription));
                }
            }
            m_recalculateRoutingTable();
        }
        public MessageAttributeFilter GetSubscription(LogPublisherInternal publisher)
        {
            lock (m_syncRoot)
            {
                if (m_allSubscriptions == null)
                    m_allSubscriptions = new List<SubscriptionInfo>();

                MessageAttributeFilter filter = new MessageAttributeFilter();
                foreach (var subscription in m_allSubscriptions)
                {
                    if (subscription.PublisherFilter.ContainsPublisher(publisher))
                    {
                        if (subscription.IsIgnoreSubscription)
                        {
                            filter.Remove(subscription.AttributeFilter);
                        }
                        else
                        {
                            filter.Append(subscription.AttributeFilter);
                        }
                    }
                }
                return filter;
            }
        }
 public void Add(MessageAttributeFilter filter, LogSubscriberInternal subscriber)
 {
     Routes.Add(Tuple.Create(filter, subscriber.Reference));
     Append(filter);
 }