@Override public void onComplete() { if (done) { return; } done = true; drain(); }
@Override void drainParent() { parent.drain(); }
@Override void removeAndDrainParent() { parent.remove(this); parent.drain(); } }
@Override public void onError(Throwable t) { Objects.requireNonNull(t, "onError"); if (done) { Operators.onErrorDropped(t, currentContext()); return; } if (Exceptions.addThrowable(ERROR, this, t)) { done = true; drain(); } else { Operators.onErrorDroppedMulticast(t); } }
@Override public void onSubscribe(final Subscription s) { if (Operators.setOnce(S, this, s)) { if (s instanceof Fuseable.QueueSubscription) { @SuppressWarnings("unchecked") Fuseable.QueueSubscription<T> f = (Fuseable.QueueSubscription<T>) s; int m = f.requestFusion(Fuseable.ANY); if (m == Fuseable.SYNC) { sourceMode = m; queue = f; drain(); return; } else if (m == Fuseable.ASYNC) { sourceMode = m; queue = f; s.request(Operators.unboundedOrPrefetch(prefetch)); return; } } queue = Queues.<T>get(prefetch).get(); s.request(Operators.unboundedOrPrefetch(prefetch)); } }
@Override public void subscribe(CoreSubscriber<? super T> actual) { Objects.requireNonNull(actual, "subscribe"); EmitterInner<T> inner = new EmitterInner<>(actual, this); actual.onSubscribe(inner); if (inner.isCancelled()) { return; } if (add(inner)) { if (inner.isCancelled()) { remove(inner); } drain(); } else { Throwable e = error; if (e != null) { inner.actual.onError(e); } else { inner.actual.onComplete(); } } }
@Override public void onComplete() { if (done) { return; } done = true; drain(); }
@Override void drainParent() { parent.drain(); }
@Override void removeAndDrainParent() { parent.remove(this); parent.drain(); } }
@Override public void onError(Throwable t) { Objects.requireNonNull(t, "onError"); if (done) { Operators.onErrorDropped(t, currentContext()); return; } if (Exceptions.addThrowable(ERROR, this, t)) { done = true; drain(); } else { Operators.onErrorDroppedMulticast(t); } }
@Override public void onSubscribe(final Subscription s) { if (Operators.setOnce(S, this, s)) { if (s instanceof Fuseable.QueueSubscription) { @SuppressWarnings("unchecked") Fuseable.QueueSubscription<T> f = (Fuseable.QueueSubscription<T>) s; int m = f.requestFusion(Fuseable.ANY); if (m == Fuseable.SYNC) { sourceMode = m; queue = f; drain(); return; } else if (m == Fuseable.ASYNC) { sourceMode = m; queue = f; s.request(Operators.unboundedOrPrefetch(prefetch)); return; } } queue = Queues.<T>get(prefetch).get(); s.request(Operators.unboundedOrPrefetch(prefetch)); } }
@Override public void subscribe(CoreSubscriber<? super T> actual) { Objects.requireNonNull(actual, "subscribe"); EmitterInner<T> inner = new EmitterInner<>(actual, this); actual.onSubscribe(inner); if (inner.isCancelled()) { return; } if (add(inner)) { if (inner.isCancelled()) { remove(inner); } drain(); } else { Throwable e = error; if (e != null) { inner.actual.onError(e); } else { inner.actual.onComplete(); } } }