@Override protected void receive(final Object message) { receiveBuilder(message) .when(TokenDeliveredMessage.class, m -> { if (!currentTokensOption.isPresent() || currentTokenIsOlder(m.tokens)) { updateToken(m.tokens); } }) .when(TokenDeliveryFailedMessage.class, m -> { if (!currentTokensOption.isPresent()) { currentAccessTokenFuture.completeExceptionally(m.cause); } else if(lastTokenIsStillValid()){ //keep the old token } else { currentTokensOption = Optional.empty(); currentAccessTokenFuture = CompletableFutureUtils.failed(m.cause); } }); } }
@Override public <T> CompletableFuture<T> execute(final SphereRequest<T> sphereRequest) { final HttpRequestIntent httpRequest = sphereRequest.httpRequestIntent(); final HttpResponse httpResponse = function.apply(httpRequest); try { final T t = SphereClientImpl.parse(httpResponse, sphereRequest, objectMapper, SphereApiConfig.of("createHttpTestDouble", "https://createHttpTestDouble.tld")); return CompletableFutureUtils.successful(t); } catch (final Exception e) { return CompletableFutureUtils.failed(e); } }
@Override public CompletableFuture<HttpResponse> execute(final HttpRequest httpRequest) { LOGGER.debug(() -> "executing " + httpRequest); final Request request = asNingRequest(httpRequest); try { final CompletableFuture<Response> future = wrap(asyncHttpClient.executeRequest(request)); return future.thenApply((Response response) -> { final byte[] responseBodyAsBytes = getResponseBodyAsBytes(response); Optional<byte[]> body = responseBodyAsBytes.length > 0 ? Optional.of(responseBodyAsBytes) : Optional.empty(); final HttpResponse httpResponse = HttpResponse.of(response.getStatusCode(), body, Optional.of(httpRequest), HttpHeaders.of(response.getHeaders())); LOGGER.debug(() -> "response " + httpResponse); return httpResponse; }); } catch (final IOException e) { return CompletableFutureUtils.failed(new HttpException(e)); } }