@Override public void onCompleted() { if (ssm.active) { state.complete(); for (SubjectObserver<? super T> o : ssm.terminate(NotificationLite.instance().completed())) { if (caughtUp(o)) { o.onCompleted(); } } } } /**
@Override public void onError(final Throwable e) { if (ssm.active) { state.error(e); for (SubjectObserver<? super T> o : ssm.terminate(NotificationLite.instance().error(e))) { if (caughtUp(o)) { o.onError(e); } } } }
@Override public void onNext(T t) { if (ssm.active) { state.next(t); for (SubjectSubscriptionManager.SubjectObserver<? super T> o : ssm.observers()) { if (caughtUp(o)) { o.onNext(t); } } } }
private boolean caughtUp(SubjectObserver<? super T> o) { if (!o.caughtUp) { o.caughtUp = true; state.replayObserver(o); return false; } else { // it was caught up so proceed the "raw route" return true; } }