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.core5.concurrent.Cancellable;
33 import org.apache.hc.core5.concurrent.ComplexFuture;
34 import org.apache.hc.core5.concurrent.FutureCallback;
35 import org.apache.hc.core5.http.HttpHost;
36 import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
37 import org.apache.hc.core5.http.nio.AsyncPushConsumer;
38 import org.apache.hc.core5.http.nio.AsyncRequestProducer;
39 import org.apache.hc.core5.http.nio.AsyncResponseConsumer;
40 import org.apache.hc.core5.http.nio.HandlerFactory;
41 import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler;
42 import org.apache.hc.core5.http.protocol.HttpContext;
43 import org.apache.hc.core5.reactor.DefaultConnectingIOReactor;
44
45 abstract class AbstractMinimalHttpAsyncClientBase extends AbstractHttpAsyncClientBase {
46
47 AbstractMinimalHttpAsyncClientBase(
48 final DefaultConnectingIOReactor ioReactor,
49 final AsyncPushConsumerRegistry pushConsumerRegistry,
50 final ThreadFactory threadFactory) {
51 super(ioReactor, pushConsumerRegistry, threadFactory);
52 }
53
54 @Override
55 protected <T> Future<T> doExecute(
56 final HttpHost httpHost,
57 final AsyncRequestProducer requestProducer,
58 final AsyncResponseConsumer<T> responseConsumer,
59 final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
60 final HttpContext context,
61 final FutureCallback<T> callback) {
62 final ComplexFuture<T> future = new ComplexFuture<>(callback);
63 future.setDependency(execute(new BasicClientExchangeHandler<>(
64 requestProducer,
65 responseConsumer,
66 new FutureCallback<T>() {
67
68 @Override
69 public void completed(final T result) {
70 future.completed(result);
71 }
72
73 @Override
74 public void failed(final Exception ex) {
75 future.failed(ex);
76 }
77
78 @Override
79 public void cancelled() {
80 future.cancel();
81 }
82
83 }), pushHandlerFactory, context));
84 return future;
85 }
86
87 public final Cancellable execute(final AsyncClientExchangeHandler exchangeHandler) {
88 return execute(exchangeHandler, null, null);
89 }
90
91 public abstract Cancellable execute(
92 AsyncClientExchangeHandler exchangeHandler,
93 HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
94 HttpContext context);
95
96 }