예제 #1
0
        public void Unsubscribe(NSubscription subscriptionToRemove)
        {
            var subscriptions = _subscriptions.Values.FirstOrDefault(x => x.Contains(subscriptionToRemove));

            if (subscriptions == null)
            {
                return;
            }

            var queueCopy = new Queue <NSubscription>();

            while (subscriptions.Any())
            {
                queueCopy.Enqueue(subscriptions.Dequeue());
            }

            while (queueCopy.Any())
            {
                var sub = queueCopy.Dequeue();
                if (sub == subscriptionToRemove)
                {
                    continue;
                }

                subscriptions.Enqueue(sub);
            }
        }
예제 #2
0
        public NSubscription Subscribe <TMessage>(Action <TMessage> action)
        {
            if (action == null)
            {
                throw new NPublisherException("Action must be not null.");
            }

            var subscription = new NSubscription(this, Convert(action));

            if (!_subscriptions.ContainsKey(typeof(TMessage)))
            {
                _subscriptions.Add(typeof(TMessage), new Queue <NSubscription>());
            }

            _subscriptions[typeof(TMessage)].Enqueue((subscription));

            return(subscription);
        }
예제 #3
0
 public static void UnsubscribeIt(NSubscription subscriptionToRemove)
 => Create().Unsubscribe(subscriptionToRemove);