Пример #1
0
        public void AddSubscriber(IPubSubSubscriberInterface _Subscriber, Actions.EAction _Action)
        {
            lock (Observers)
            {
                if (Observers.ContainsKey(_Action))
                {
                    var RelevantList = Observers[_Action];

                    foreach (var Weak in RelevantList)
                    {
                        if (Weak.TryGetTarget(out IPubSubSubscriberInterface Strong) && Strong == _Subscriber)
                        {
                            return;
                        }
                    }
                    RelevantList.Add(new WeakReference <IPubSubSubscriberInterface>(_Subscriber));
                }
                else
                {
                    Observers[_Action] = new List <WeakReference <IPubSubSubscriberInterface> >()
                    {
                        new WeakReference <IPubSubSubscriberInterface>(_Subscriber)
                    };
                }
            }
        }
Пример #2
0
 public bool RemoveSubscriber(IPubSubSubscriberInterface _Subscriber, Actions.EAction _Action)
 {
     lock (Observers)
     {
         if (Observers.ContainsKey(_Action))
         {
             var Counter = 0;
             foreach (var Weak in Observers[_Action])
             {
                 if (Weak.TryGetTarget(out IPubSubSubscriberInterface Strong) && Strong == _Subscriber)
                 {
                     Observers[_Action].RemoveAt(Counter);
                     return(true);
                 }
                 Counter++;
             }
         }
         return(false);
     }
 }