@Override public Response intercept(Chain chain) throws IOException { ConcurrencyLimiterListener limiterListenerTag = chain.request().tag(ConcurrencyLimiterListener.class); if (limiterListenerTag == null) { return chain.proceed(chain.request()); } ListenableFuture<Limiter.Listener> limiterFuture = limiterListenerTag.limiterListener(); Preconditions.checkState(limiterFuture.isDone(), "Limit listener future should have been fulfilled."); Limiter.Listener listener = Futures.getUnchecked(limiterFuture); try { Response response = chain.proceed(chain.request()); if (DROPPED_CODES.contains(response.code())) { listener.onDropped(); return response; } else if (!response.isSuccessful() || response.isRedirect()) { listener.onIgnore(); return response; } else { return wrapResponse(listener, response); } } catch (IOException e) { listener.onIgnore(); throw e; } }
@Override public Response intercept(Chain chain) throws IOException { ConcurrencyLimiterListener limiterListenerTag = chain.request().tag(ConcurrencyLimiterListener.class); if (limiterListenerTag == null) { return chain.proceed(chain.request()); } ListenableFuture<Limiter.Listener> limiterFuture = limiterListenerTag.limiterListener(); Preconditions.checkState(limiterFuture.isDone(), "Limit listener future should have been fulfilled."); Limiter.Listener listener = Futures.getUnchecked(limiterFuture); try { Response response = chain.proceed(chain.request()); if (DROPPED_CODES.contains(response.code())) { listener.onDropped(); return response; } else if (!response.isSuccessful() || response.isRedirect()) { listener.onIgnore(); return response; } else { return wrapResponse(listener, response); } } catch (IOException e) { listener.onIgnore(); throw e; } }