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
28 package org.apache.hc.client5.http.nio;
29
30 import java.io.IOException;
31 import java.util.concurrent.Future;
32
33 import org.apache.hc.client5.http.EndpointInfo;
34 import org.apache.hc.core5.annotation.Contract;
35 import org.apache.hc.core5.annotation.ThreadingBehavior;
36 import org.apache.hc.core5.concurrent.BasicFuture;
37 import org.apache.hc.core5.concurrent.FutureCallback;
38 import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
39 import org.apache.hc.core5.http.nio.AsyncPushConsumer;
40 import org.apache.hc.core5.http.nio.AsyncRequestProducer;
41 import org.apache.hc.core5.http.nio.AsyncResponseConsumer;
42 import org.apache.hc.core5.http.nio.HandlerFactory;
43 import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler;
44 import org.apache.hc.core5.http.protocol.HttpContext;
45 import org.apache.hc.core5.http.protocol.HttpCoreContext;
46 import org.apache.hc.core5.io.CloseMode;
47 import org.apache.hc.core5.io.ModalCloseable;
48 import org.apache.hc.core5.util.Timeout;
49
50
51
52
53
54
55 @Contract(threading = ThreadingBehavior.SAFE)
56 public abstract class AsyncConnectionEndpoint implements ModalCloseable {
57
58
59
60
61
62
63
64
65
66 public abstract void execute(
67 String id,
68 AsyncClientExchangeHandler exchangeHandler,
69 HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
70 HttpContext context);
71
72
73
74
75 public abstract boolean isConnected();
76
77
78
79
80
81
82 public abstract void setSocketTimeout(Timeout timeout);
83
84 @Override
85 public final void close() throws IOException {
86 close(CloseMode.GRACEFUL);
87 }
88
89
90
91
92
93
94
95
96 public void execute(
97 final String id,
98 final AsyncClientExchangeHandler exchangeHandler,
99 final HttpContext context) {
100 execute(id, exchangeHandler, null, context);
101 }
102
103
104
105
106
107
108
109
110
111
112
113
114
115 public final <T> Future<T> execute(
116 final String id,
117 final AsyncRequestProducer requestProducer,
118 final AsyncResponseConsumer<T> responseConsumer,
119 final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
120 final HttpContext context,
121 final FutureCallback<T> callback) {
122 final BasicFuture<T> future = new BasicFuture<>(callback);
123 execute(id, new BasicClientExchangeHandler<>(requestProducer, responseConsumer,
124 new FutureCallback<T>() {
125
126 @Override
127 public void completed(final T result) {
128 future.completed(result);
129 }
130
131 @Override
132 public void failed(final Exception ex) {
133 future.failed(ex);
134 }
135
136 @Override
137 public void cancelled() {
138 future.cancel();
139 }
140
141 }),
142 pushHandlerFactory,
143 context != null ? context : HttpCoreContext.create());
144 return future;
145 }
146
147
148
149
150
151
152
153
154
155
156
157
158 public final <T> Future<T> execute(
159 final String id,
160 final AsyncRequestProducer requestProducer,
161 final AsyncResponseConsumer<T> responseConsumer,
162 final HttpContext context,
163 final FutureCallback<T> callback) {
164 return execute(id, requestProducer, responseConsumer, null, context, callback);
165 }
166
167
168
169
170
171
172
173
174
175
176
177
178 public final <T> Future<T> execute(
179 final String id,
180 final AsyncRequestProducer requestProducer,
181 final AsyncResponseConsumer<T> responseConsumer,
182 final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
183 final FutureCallback<T> callback) {
184 return execute(id, requestProducer, responseConsumer, pushHandlerFactory, null, callback);
185 }
186
187
188
189
190
191
192
193
194
195
196
197 public final <T> Future<T> execute(
198 final String id,
199 final AsyncRequestProducer requestProducer,
200 final AsyncResponseConsumer<T> responseConsumer,
201 final FutureCallback<T> callback) {
202 return execute(id, requestProducer, responseConsumer, null, null, callback);
203 }
204
205
206
207
208
209
210 public EndpointInfo getInfo() {
211 return null;
212 }
213
214 }