@Override public void onComplete() { if (done || cancelled) { return; } done = true; doTerminate(); drain(); }
@Override public void subscribe(CoreSubscriber<? super T> actual) { Objects.requireNonNull(actual, "subscribe"); if (once == 0 && ONCE.compareAndSet(this, 0, 1)) { actual.onSubscribe(this); this.actual = actual; if (cancelled) { this.actual = null; } else { drain(); } } else { Operators.error(actual, new IllegalStateException("UnicastProcessor " + "allows only a single Subscriber")); } }
@Override public void request(long n) { if (Operators.validate(n)) { Operators.addCap(REQUESTED, this, n); drain(); } }
@Override public void onError(Throwable t) { if (done || cancelled) { Operators.onErrorDropped(t, currentContext()); return; } error = t; done = true; doTerminate(); drain(); }
@Override public void onNext(T t) { if (done || cancelled) { Operators.onNextDropped(t, currentContext()); return; } if (!queue.offer(t)) { Throwable ex = Operators.onOperatorError(null, Exceptions.failWithOverflow(), t, currentContext()); if(onOverflow != null) { try { onOverflow.accept(t); } catch (Throwable e) { Exceptions.throwIfFatal(e); ex.initCause(e); } } onError(Operators.onOperatorError(null, ex, t, currentContext())); return; } drain(); }
@Override public void onComplete() { if (done || cancelled) { return; } done = true; doTerminate(); drain(); }
@Override public void subscribe(CoreSubscriber<? super T> actual) { Objects.requireNonNull(actual, "subscribe"); if (once == 0 && ONCE.compareAndSet(this, 0, 1)) { actual.onSubscribe(this); this.actual = actual; if (cancelled) { this.actual = null; } else { drain(); } } else { Operators.error(actual, new IllegalStateException("UnicastProcessor " + "allows only a single Subscriber")); } }
@Override public void request(long n) { if (Operators.validate(n)) { Operators.addCap(REQUESTED, this, n); drain(); } }
@Override public void onError(Throwable t) { if (done || cancelled) { Operators.onErrorDropped(t, currentContext()); return; } error = t; done = true; doTerminate(); drain(); }
@Override public void onNext(T t) { if (done || cancelled) { Operators.onNextDropped(t, currentContext()); return; } if (!queue.offer(t)) { Throwable ex = Operators.onOperatorError(null, Exceptions.failWithOverflow(), t, currentContext()); if(onOverflow != null) { try { onOverflow.accept(t); } catch (Throwable e) { Exceptions.throwIfFatal(e); ex.initCause(e); } } onError(Operators.onOperatorError(null, ex, t, currentContext())); return; } drain(); }