public DefaultFutureListeners(IFutureListener <T> first, IFutureListener <T> second) { listeners = new IFutureListener <T> [2]; listeners[0] = first; listeners[1] = second; size = 2; }
new public IPromise <V> RemoveListener(IFutureListener <V> listener) { ObjectUtil.CheckNotNull(listener, "listener"); lock (syncLock) { _RemoveListener(listener); } return(this); }
public override IFuture <V> AddListener(IFutureListener <V> listener) { if (listener == null) { throw new NullReferenceException("listener"); } DefaultPromise <V> .NotifyListener(Executor, this, listener); return(this); }
private void _RemoveListener(IFutureListener <V> listener) { if (this.listeners is DefaultFutureListeners <V> ) { ((DefaultFutureListeners <V>) this.listeners).Remove(listener); } else if (listeners == listener) { listeners = null; } }
private static void _NotifyListener(IFuture <V> future, IFutureListener <V> listener) { try { listener.OperationComplete(future); } catch (Exception ex) { // @TODO: 添加对ex的Log } }
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; }
new public IPromise <V> AddListener(IFutureListener <V> listener) { ObjectUtil.CheckNotNull(listener, "listener"); lock (syncLock) { _AddListener(listener); } if (IsDone) { _NotifyListeners(); } return(this); }
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); } }
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); }
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; } } }
public virtual IFuture <V> RemoveListener(IFutureListener <V> listener) { throw new NotImplementedException(); }
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); }); }
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); }
public override IFuture <V> RemoveListener(IFutureListener <V> listener) { return(this); }