Skip to content

Commit 86a9da6

Browse files
committed
Remove usage of Handler/AsyncResult idiom.
1 parent 8d8a9ae commit 86a9da6

File tree

4 files changed

+114
-42
lines changed

4 files changed

+114
-42
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package io.vertx.httpproxy;
2+
3+
import io.vertx.core.json.JsonObject;
4+
import io.vertx.core.json.JsonArray;
5+
import java.time.Instant;
6+
import java.time.format.DateTimeFormatter;
7+
import java.util.Base64;
8+
9+
/**
10+
* Converter and mapper for {@link io.vertx.httpproxy.ProxyOptions}.
11+
* NOTE: This class has been automatically generated from the {@link io.vertx.httpproxy.ProxyOptions} original class using Vert.x codegen.
12+
*/
13+
public class ProxyOptionsConverter {
14+
15+
private static final Base64.Decoder BASE64_DECODER = Base64.getUrlDecoder();
16+
private static final Base64.Encoder BASE64_ENCODER = Base64.getUrlEncoder().withoutPadding();
17+
18+
static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, ProxyOptions obj) {
19+
for (java.util.Map.Entry<String, Object> member : json) {
20+
switch (member.getKey()) {
21+
case "cacheOptions":
22+
if (member.getValue() instanceof JsonObject) {
23+
obj.setCacheOptions(new io.vertx.httpproxy.cache.CacheOptions((io.vertx.core.json.JsonObject)member.getValue()));
24+
}
25+
break;
26+
case "supportWebSocket":
27+
if (member.getValue() instanceof Boolean) {
28+
obj.setSupportWebSocket((Boolean)member.getValue());
29+
}
30+
break;
31+
}
32+
}
33+
}
34+
35+
static void toJson(ProxyOptions obj, JsonObject json) {
36+
toJson(obj, json.getMap());
37+
}
38+
39+
static void toJson(ProxyOptions obj, java.util.Map<String, Object> json) {
40+
if (obj.getCacheOptions() != null) {
41+
json.put("cacheOptions", obj.getCacheOptions().toJson());
42+
}
43+
json.put("supportWebSocket", obj.getSupportWebSocket());
44+
}
45+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.vertx.httpproxy.cache;
2+
3+
import io.vertx.core.json.JsonObject;
4+
import io.vertx.core.json.JsonArray;
5+
import java.time.Instant;
6+
import java.time.format.DateTimeFormatter;
7+
import java.util.Base64;
8+
9+
/**
10+
* Converter and mapper for {@link io.vertx.httpproxy.cache.CacheOptions}.
11+
* NOTE: This class has been automatically generated from the {@link io.vertx.httpproxy.cache.CacheOptions} original class using Vert.x codegen.
12+
*/
13+
public class CacheOptionsConverter {
14+
15+
private static final Base64.Decoder BASE64_DECODER = Base64.getUrlDecoder();
16+
private static final Base64.Encoder BASE64_ENCODER = Base64.getUrlEncoder().withoutPadding();
17+
18+
static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, CacheOptions obj) {
19+
for (java.util.Map.Entry<String, Object> member : json) {
20+
switch (member.getKey()) {
21+
case "maxSize":
22+
if (member.getValue() instanceof Number) {
23+
obj.setMaxSize(((Number)member.getValue()).intValue());
24+
}
25+
break;
26+
}
27+
}
28+
}
29+
30+
static void toJson(CacheOptions obj, JsonObject json) {
31+
toJson(obj, json.getMap());
32+
}
33+
34+
static void toJson(CacheOptions obj, java.util.Map<String, Object> json) {
35+
json.put("maxSize", obj.getMaxSize());
36+
}
37+
}

src/main/java/io/vertx/httpproxy/impl/ProxiedRequest.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,7 @@ public ProxyResponse response() {
146146
return new ProxiedResponse(this, proxiedRequest.response());
147147
}
148148

149-
void sendRequest(Handler<AsyncResult<ProxyResponse>> responseHandler) {
150-
151-
request.response().<ProxyResponse>map(r -> {
152-
r.pause(); // Pause it
153-
return new ProxiedResponse(this, proxiedRequest.response(), r);
154-
}).onComplete(responseHandler);
155-
149+
Future<ProxyResponse> sendRequest() {
156150

157151
request.setMethod(method);
158152
request.setURI(uri);
@@ -192,6 +186,11 @@ void sendRequest(Handler<AsyncResult<ProxyResponse>> responseHandler) {
192186
request.reset();
193187
}
194188
});
189+
190+
return request.response().<ProxyResponse>map(r -> {
191+
r.pause(); // Pause it
192+
return new ProxiedResponse(this, proxiedRequest.response(), r);
193+
});
195194
}
196195

197196
private static boolean equals(HostAndPort hp1, HostAndPort hp2) {
@@ -214,9 +213,7 @@ public MultiMap headers() {
214213

215214
@Override
216215
public Future<ProxyResponse> send(HttpClientRequest request) {
217-
Promise<ProxyResponse> promise = context.promise();
218216
this.request = request;
219-
sendRequest(promise);
220-
return promise.future();
217+
return sendRequest();
221218
}
222219
}

src/main/java/io/vertx/httpproxy/impl/ProxiedResponse.java

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,6 @@ public ProxyResponse putHeader(CharSequence name, CharSequence value) {
167167

168168
@Override
169169
public Future<Void> send() {
170-
Promise<Void> promise = request.context.promise();
171-
send(promise);
172-
return promise.future();
173-
}
174-
175-
public void send(Handler<AsyncResult<Void>> completionHandler) {
176170
// Set stuff
177171
proxiedResponse.setStatusCode(statusCode);
178172

@@ -222,32 +216,30 @@ public void send(Handler<AsyncResult<Void>> completionHandler) {
222216

223217
//
224218
if (body == null) {
225-
proxiedResponse.end();
226-
return;
227-
}
228-
229-
long len = body.length();
230-
if (len >= 0) {
231-
proxiedResponse.putHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(len));
219+
return proxiedResponse.end();
232220
} else {
233-
if (request.proxiedRequest().version() == HttpVersion.HTTP_1_0) {
234-
// Special handling for HTTP 1.0 clients that cannot handle chunked encoding
235-
// we need to buffer the content
236-
BufferingWriteStream buffer = new BufferingWriteStream();
237-
body.stream().pipeTo(buffer).onComplete(ar -> {
238-
if (ar.succeeded()) {
239-
Buffer content = buffer.content();
240-
proxiedResponse.end(content).onComplete(completionHandler);
241-
} else {
242-
System.out.println("Not implemented");
243-
}
244-
});
245-
return;
221+
long len = body.length();
222+
if (len >= 0) {
223+
proxiedResponse.putHeader(HttpHeaders.CONTENT_LENGTH, Long.toString(len));
224+
} else {
225+
if (request.proxiedRequest().version() == HttpVersion.HTTP_1_0) {
226+
// Special handling for HTTP 1.0 clients that cannot handle chunked encoding
227+
// we need to buffer the content
228+
BufferingWriteStream buffer = new BufferingWriteStream();
229+
return
230+
body
231+
.stream()
232+
.pipeTo(buffer)
233+
.compose(v -> {
234+
Buffer content = buffer.content();
235+
return proxiedResponse.end(content);
236+
});
237+
}
238+
proxiedResponse.setChunked(true);
246239
}
247-
proxiedResponse.setChunked(true);
240+
ReadStream<Buffer> bodyStream = body.stream();
241+
return sendResponse(bodyStream);
248242
}
249-
ReadStream<Buffer> bodyStream = body.stream();
250-
sendResponse(bodyStream, completionHandler);
251243
}
252244

253245
@Override
@@ -261,16 +253,17 @@ public ProxyResponse release() {
261253
return this;
262254
}
263255

264-
private void sendResponse(ReadStream<Buffer> body, Handler<AsyncResult<Void>> completionHandler) {
256+
private Future<Void> sendResponse(ReadStream<Buffer> body) {
265257
Pipe<Buffer> pipe = body.pipe();
266258
pipe.endOnSuccess(true);
267259
pipe.endOnFailure(false);
268-
pipe.to(proxiedResponse).onComplete(ar -> {
260+
return pipe
261+
.to(proxiedResponse)
262+
.andThen(ar -> {
269263
if (ar.failed()) {
270264
request.request.reset();
271265
proxiedResponse.reset();
272266
}
273-
completionHandler.handle(ar);
274267
});
275268
}
276269
}

0 commit comments

Comments
 (0)