All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cleeng.api.AsyncRequestCallback Maven / Gradle / Ivy

package com.cleeng.api;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.Response;

import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;

public class AsyncRequestCallback extends CompletableFuture {

    private static final Logger logger = LogManager.getLogger(AsyncRequestCallback.class);

    protected Gson gson;

    public AsyncRequestCallback(Class responseClass) {
        this.gson = new GsonBuilder().create();
        this._responseClass = responseClass;
    }

    private AsyncHttpClient _client;

    public void setClient(AsyncHttpClient client) {
        this._client = client;
    }

    private CountDownLatch _countdownLatch;

    public void setCountdownLatch(CountDownLatch latch) {
        this._countdownLatch = latch;
    }

    public CountDownLatch getCountdownLatch() {
        return this._countdownLatch;
    }

    protected String _response;

    protected Class _responseClass;

    public T getResponse() {
        return gson.fromJson( this._response, this._responseClass );
    }

    @Override
    public boolean complete(final Response response) {
        final boolean out = super.complete(response);
        logger.info("Completed async request: " + response.getStatusCode() + " count: " + this._countdownLatch.getCount() + " response: " + this._responseClass.getCanonicalName());
        try {
            this._response = response.getResponseBody();
        } catch (Exception e) {

        }
        if (this.useNonBlockingMode == true) {
            if (this._countdownLatch.getCount() == 0) {
                try {
                    logger.info("Closing connection...");
                    this._client.close();
                } catch (IOException e) {
                    logger.error("Failed to close http connection...");
                }
            }
        }
        this._countdownLatch.countDown();
        return out;
    }

    @Override
    public boolean completeExceptionally(Throwable ex) {
        logger.error("Request completed with exception " + ex);
        return super.completeExceptionally(ex);
    }

    public boolean useNonBlockingMode = false;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy