示例#1
0
 public DefaultFutureListeners(IFutureListener <T> first, IFutureListener <T> second)
 {
     listeners    = new IFutureListener <T> [2];
     listeners[0] = first;
     listeners[1] = second;
     size         = 2;
 }
示例#2
0
 new public IPromise <V> RemoveListener(IFutureListener <V> listener)
 {
     ObjectUtil.CheckNotNull(listener, "listener");
     lock (syncLock)
     {
         _RemoveListener(listener);
     }
     return(this);
 }
示例#3
0
        public override IFuture <V> AddListener(IFutureListener <V> listener)
        {
            if (listener == null)
            {
                throw new NullReferenceException("listener");
            }
            DefaultPromise <V> .NotifyListener(Executor, this, listener);

            return(this);
        }
示例#4
0
 private void _RemoveListener(IFutureListener <V> listener)
 {
     if (this.listeners is DefaultFutureListeners <V> )
     {
         ((DefaultFutureListeners <V>) this.listeners).Remove(listener);
     }
     else if (listeners == listener)
     {
         listeners = null;
     }
 }
示例#5
0
 private static void _NotifyListener(IFuture <V> future, IFutureListener <V> listener)
 {
     try
     {
         listener.OperationComplete(future);
     }
     catch (Exception ex)
     {
         // @TODO: 添加对ex的Log
     }
 }
示例#6
0
 public void Add(IFutureListener <T> listener)
 {
     IFutureListener <T>[] listeners = this.listeners;
     if (size == listeners.Length)
     {
         this.listeners = new IFutureListener <T> [size << 1];
         Array.Copy(listeners, this.listeners, size);
     }
     this.listeners[size] = listener;
     ++size;
 }
示例#7
0
 new public IPromise <V> AddListener(IFutureListener <V> listener)
 {
     ObjectUtil.CheckNotNull(listener, "listener");
     lock (syncLock)
     {
         _AddListener(listener);
     }
     if (IsDone)
     {
         _NotifyListeners();
     }
     return(this);
 }
示例#8
0
 private void _AddListener(IFutureListener <V> listener)
 {
     if (this.listeners == null)
     {
         this.listeners = listener;
     }
     else if (this.listeners is DefaultFutureListeners <V> )
     {
         ((DefaultFutureListeners <V>) this.listeners).Add(listener);
     }
     else
     {
         this.listeners = new DefaultFutureListeners <V>((IFutureListener <V>) this.listeners, listener);
     }
 }
示例#9
0
 public override IFuture <V> AddListeners(params IFutureListener <V>[] listeners)
 {
     if (listeners == null)
     {
         throw new NullReferenceException("listeners");
     }
     for (int i = 0; i < listeners.Length; ++i)
     {
         IFutureListener <V> listener = listeners[i];
         if (listener == null)
         {
             continue;
         }
         DefaultPromise <V> .NotifyListener(Executor, this, listener);
     }
     return(this);
 }
示例#10
0
        public void Remove(IFutureListener <T> listener)
        {
            IFutureListener <T>[] listeners = this.listeners;
            for (int i = 0; i < size; ++i)
            {
                if (listeners[i] == listener)
                {
                    int listenersToMove = size - i - 1;
                    if (listenersToMove > 0)
                    {
                        Array.Copy(listeners, i + 1, this.listeners, i, listenersToMove);
                    }
                    this.listeners[--size] = null;

                    return;
                }
            }
        }
示例#11
0
 public virtual IFuture <V> RemoveListener(IFutureListener <V> listener)
 {
     throw new NotImplementedException();
 }
示例#12
0
 private static void _NotifyListenerWithStackOverFlowProtection(IEventExecutor eventExecutor, IFuture <V> future, IFutureListener <V> listener)
 {
     if (eventExecutor.InEventLoop())
     {
         // @TODO: 增加对调用堆栈深度的保护(避免出现堆栈溢出)
         try
         {
             _NotifyListener(future, listener);
         }
         catch { }
         return;
     }
     _SafeExecute(eventExecutor, () => { _NotifyListener(future, listener); });
 }
示例#13
0
 protected internal static void NotifyListener(IEventExecutor eventExecutor, IFuture <V> future, IFutureListener <V> listener)
 {
     ObjectUtil.CheckNotNull(eventExecutor, "eventExecutor");
     ObjectUtil.CheckNotNull(future, "future");
     ObjectUtil.CheckNotNull(listener, "listener");
     _NotifyListenerWithStackOverFlowProtection(eventExecutor, future, listener);
 }
示例#14
0
 public override IFuture <V> RemoveListener(IFutureListener <V> listener)
 {
     return(this);
 }