1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.impl.async;
28
29 import java.util.concurrent.Future;
30 import java.util.concurrent.ThreadFactory;
31
32 import org.apache.hc.client5.http.protocol.HttpClientContext;
33 import org.apache.hc.core5.concurrent.Cancellable;
34 import org.apache.hc.core5.concurrent.ComplexFuture;
35 import org.apache.hc.core5.concurrent.FutureCallback;
36 import org.apache.hc.core5.http.HttpHost;
37 import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
38 import org.apache.hc.core5.http.nio.AsyncPushConsumer;
39 import org.apache.hc.core5.http.nio.AsyncRequestProducer;
40 import org.apache.hc.core5.http.nio.AsyncResponseConsumer;
41 import org.apache.hc.core5.http.nio.HandlerFactory;
42 import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler;
43 import org.apache.hc.core5.http.protocol.HttpContext;
44 import org.apache.hc.core5.reactor.DefaultConnectingIOReactor;
45
46 abstract class AbstractMinimalHttpAsyncClientBase extends AbstractHttpAsyncClientBase {
47
48 AbstractMinimalHttpAsyncClientBase(
49 final DefaultConnectingIOReactor ioReactor,
50 final AsyncPushConsumerRegistry pushConsumerRegistry,
51 final ThreadFactory threadFactory) {
52 super(ioReactor, pushConsumerRegistry, threadFactory);
53 }
54
55 @Override
56 protected <T> Future<T> doExecute(
57 final HttpHost httpHost,
58 final AsyncRequestProducer requestProducer,
59 final AsyncResponseConsumer<T> responseConsumer,
60 final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
61 final HttpContext context,
62 final FutureCallback<T> callback) {
63 final ComplexFuture<T> future = new ComplexFuture<>(callback);
64 future.setDependency(execute(new BasicClientExchangeHandler<>(
65 requestProducer,
66 responseConsumer,
67 new FutureCallback<T>() {
68
69 @Override
70 public void completed(final T result) {
71 future.completed(result);
72 }
73
74 @Override
75 public void failed(final Exception ex) {
76 future.failed(ex);
77 }
78
79 @Override
80 public void cancelled() {
81 future.cancel();
82 }
83
84 }), pushHandlerFactory, context));
85 return future;
86 }
87
88 public final Cancellable execute(final AsyncClientExchangeHandler exchangeHandler) {
89 return execute(exchangeHandler, null, HttpClientContext.create());
90 }
91
92 public abstract Cancellable execute(
93 AsyncClientExchangeHandler exchangeHandler,
94 HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
95 HttpContext context);
96
97 }