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); }