@Override public Observable<Void> asLifecycleObservable() { return delegate.asLifecycleObservable(); }
protected void subscribeToDelegateChannelLifecycle(C newDelegateChannel) { final Observable<Void> lifecycleObservable = newDelegateChannel.asLifecycleObservable(); Subscription oldSubscription = delegateLifecycleSubscription.getAndSet( lifecycleObservable.subscribe(new Subscriber<Void>() { @Override public void onCompleted() { logger.info("Channel closed gracefully and must be reconnected"); scheduleRetry(); } @Override public void onError(Throwable e) { if (recoverableError(e)) { logger.info("Channel failure; scheduling the reconnection in " + retryDelay + "ms", e); scheduleRetry(); } else { logger.error("Unrecoverable error; closing the retryable channel"); lifecycle.onError(e); close(); } } @Override public void onNext(Void aVoid) { // No-op } }) ); if (oldSubscription != null && !oldSubscription.isUnsubscribed()) { oldSubscription.unsubscribe(); } }