RxJava + Retrofit -> BaseObservable для вызовов API для централизованной обработки ответов

Я новичок в RxJava, поэтому, пожалуйста, прости меня, если это звучит слишком новичок :-).

На данный момент у меня есть абстрактный CallbackClass, который реализует Retofit Callback. Там я перехватываю методы Callback «onResponse» и «onError» и обрабатываю различные типы ошибок, прежде чем, наконец, переслать в реализованные пользователем методы. Я также использую этот централизованный класс для регистрации запросов / ответов приложений и прочего.

Например: для конкретных кодов ошибок от моего сервера я получаю новый токен Auth в теле ответа, обновляю токен и затем clone.enqueue вызова. Есть, конечно, несколько других глобальных вариантов поведения в ответах от моего сервера.

Текущее решение (без Rx):

    public abstract void onResponse(Call<T> call, Response<T> response, boolean isSuccess);

    public abstract void onFailure(Call<T> call, Response<T> response, Throwable t, boolean isTimeout);

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        if (_isCanceled) return;

        if (response != null && !response.isSuccessful()) {
            if (response.code() == "SomeCode" && retryCount < RETRY_LIMIT) {
                TokenResponseModel newToken = null;
                try {
                    newToken = new Gson().fromJson(new String(response.errorBody().bytes(), "UTF-8"), TokenResponseModel.class);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                    SomeClass.token = newToken.token;
                    retryCount++;
                    call.clone().enqueue(this);
                    return;
                }
            }
        } else {
            onResponse(call, response, true);
            removeFinishedRequest();
            return;
        }

        onFailure(call, response, null, false);
        removeFinishedRequest();
    }

    @Override
    public void onFailure(Call<T> call, Throwable t) {
        if (_isCanceled) return;

        if (t instanceof UnknownHostException)
            if (eventBus != null)
                eventBus.post(new NoConnectionErrorEvent());

        onFailure(call, null, t, false);
        removeFinishedRequest();
    }

Мой вопрос: есть ли какой-либо способ иметь такое поведение централизованной обработки ответов перед тем, как окончательно соединить (или повторить попытку) методы подписчика?

Я нашел эти 2 ссылки, которые обе имеют хорошую отправную точку, но не конкретное решение. Любая помощь будет по достоинству оценена.

Принудительная повторная попытка запроса после пользовательских исключений API в RxJava

Модификация операторов обработки ошибок 2 и RxJava

Ответы на вопрос(3)

Ваш ответ на вопрос