package glaze.client.async;
import glaze.client.Client;
import glaze.client.Response;
import glaze.client.handlers.ErrorHandler;
import java.util.concurrent.Future;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
import org.apache.http.protocol.HttpContext;
/**
* Interface for Marmalade asynchronous clients.
*
*/
public interface AsyncClient extends Client
{
HttpAsyncRequestProducer createAsyncProducer(HttpUriRequest request);
<T> Future<T> execute(HttpAsyncRequestProducer producer, HttpAsyncResponseConsumer<T> consumer);
<T> Future<T> execute(HttpAsyncRequestProducer producer, HttpAsyncResponseConsumer<T> consumer,
FutureCallback<T> futureCallback);
<T> Future<T> execute(HttpAsyncRequestProducer producer, HttpAsyncResponseConsumer<T> consumer, HttpContext context,
FutureCallback<T> futureCallback);
Future<Response> execute(HttpUriRequest request, ErrorHandler errorHandler);
Future<Response> execute(HttpUriRequest request, FutureCallback<Response> futureCallback, ErrorHandler errorHandler);
Future<Response> execute(HttpUriRequest request, HttpContext context, FutureCallback<Response> futureCallback,
ErrorHandler errorHandler);
<T> Future<T> map(AsyncMap<T> mapRequest);
AsyncClient reset();
HttpAsyncClient getHttpClient();
}