Пример #1
0
 public void Dispose()
 {
     _isDisposed = true;
     ++SourceId;
     _registeredCount = 0;
     Unlink();
     // In case Dispose is called from a callback.
     if (!_isInvoking)
     {
         _isInvoking = true;
         for (int i = 0, max = _registeredCallbacks.Count; i < max; ++i)
         {
             RegisteredDelegate del = _registeredCallbacks[i];
             _registeredCallbacks[i] = default(RegisteredDelegate);
             if (del.callback != null)
             {
                 del.callback.Dispose();
             }
         }
         _registeredCallbacks.Clear();
         _isInvoking = false;
     }
     if (_retainCounter == 0)
     {
         ResetAndRepool();
     }
 }
Пример #2
0
        protected virtual void OnRegistered(PlayerCacheAndHistory playerevents)
        {
            RegisteredDelegate handler = Registered;

            if (handler != null)
            {
                handler(playerevents);
            }
        }
Пример #3
0
 public void RegisterDelegate(string name, RegisteredDelegate inDelegate)
 {
     // if the name is alerady registered, add this delegate to the array of delegates associated with that name
     if (registeredDelegatesByName.ContainsKey(name))
     {
         List <RegisteredDelegate> associatedDelegates;
         if (registeredDelegatesByName.TryGetValue(name, out associatedDelegates))
         {
             associatedDelegates.Add(inDelegate);
             registeredDelegatesByName [name] = associatedDelegates;
         }
     }
     // if the name is not already registered, make a new key with it, an add the associated delegate
     else
     {
         List <RegisteredDelegate> associatedDelegates = new List <RegisteredDelegate> ();
         associatedDelegates.Add(inDelegate);
         registeredDelegatesByName.Add(name, associatedDelegates);
     }
 }
Пример #4
0
            public bool TryUnregister(ushort tokenId, uint order)
            {
                int index = IndexOf(order);

                if (tokenId == TokenId & index >= 0)
                {
                    RegisteredDelegate del = _registeredCallbacks[index];
                    if (!_isInvoking)
                    {
                        _registeredCallbacks.RemoveAt(index);
                        del.callback.Dispose();
                        return(true);
                    }
                    if (del.callback != null)
                    {
                        _registeredCallbacks[index] = new RegisteredDelegate(del.order);
                        del.callback.Dispose();
                        return(true);
                    }
                }
                return(false);
            }
Пример #5
0
            private void InvokeCallbacks()
            {
                // Retain in case this is disposed while executing callbacks.
                RetainInternal();
                _isInvoking = true;
                Unlink();
                List <Exception> exceptions = null;

                for (int i = 0, max = _registeredCallbacks.Count; i < max; ++i)
                {
                    RegisteredDelegate del = _registeredCallbacks[i];
                    _registeredCallbacks[i] = default(RegisteredDelegate);
                    if (del.callback != null)
                    {
                        try
                        {
                            del.callback.Invoke(ValueContainer);
                        }
                        catch (Exception e)
                        {
                            if (exceptions == null)
                            {
                                exceptions = new List <Exception>();
                            }
                            exceptions.Add(e);
                        }
                    }
                }
                _registeredCallbacks.Clear();
                _isInvoking = false;
                ReleaseInternal();
                if (exceptions != null)
                {
                    // Propagate exceptions to caller as aggregate.
                    throw new AggregateException(exceptions);
                }
            }