-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathNioHttpClient.java
More file actions
101 lines (87 loc) · 2.86 KB
/
NioHttpClient.java
File metadata and controls
101 lines (87 loc) · 2.86 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.hubspot.slack.client.http;
import com.google.common.util.concurrent.ListenableFuture;
import com.hubspot.horizon.AsyncHttpClient;
import com.hubspot.horizon.AsyncHttpClient.Callback;
import com.hubspot.horizon.HttpRequest;
import com.hubspot.horizon.HttpRequest.Options;
import com.hubspot.horizon.HttpResponse;
import com.hubspot.horizon.internal.AbstractHttpResponse;
import com.hubspot.slack.client.concurrency.MoreExecutors;
import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.function.Function;
public class NioHttpClient implements Closeable {
private static final ExecutorService CALLBACK_EXECUTOR = MoreExecutors
.threadPoolDaemonExecutorBuilder("NioHttpClient-Callback")
.setFollowThreadLocals(false)
.setUnbounded(true)
.build();
private final AsyncHttpClient delegate;
public interface Factory {
NioHttpClient wrap(AsyncHttpClient delegate);
}
public NioHttpClient(AsyncHttpClient delegate) {
this.delegate = delegate;
}
/**
* @deprecated Use {@link #executeCompletableFuture(HttpRequest)}
*/
@Deprecated
public ListenableFuture<HttpResponse> execute(HttpRequest httpRequest) {
return delegate.execute(httpRequest);
}
/**
* @deprecated Use {@link #executeCompletableFuture(HttpRequest)}
*/
@Deprecated
public ListenableFuture<HttpResponse> execute(
HttpRequest httpRequest,
Options options
) {
return delegate.execute(httpRequest, options);
}
/**
* @deprecated Use {@link #executeCompletableFuture(HttpRequest)}
*/
@Deprecated
public void execute(HttpRequest httpRequest, Callback callback) {
delegate.execute(httpRequest, callback);
}
/**
* @deprecated Use {@link #executeCompletableFuture(HttpRequest)}
*/
@Deprecated
public void execute(HttpRequest httpRequest, Options options, Callback callback) {
delegate.execute(httpRequest, options, callback);
}
public CompletableFuture<HttpResponse> executeCompletableFuture(HttpRequest request) {
CompletableFuture<HttpResponse> responseFuture = new CompletableFuture<>();
execute(
request,
new Callback() {
@Override
public void completed(HttpResponse response) {
if (response instanceof AbstractHttpResponse) {
HttpResponse cached = CachingHttpResponse.from(
(AbstractHttpResponse) response
);
responseFuture.complete(cached);
} else {
responseFuture.complete(response);
}
}
@Override
public void failed(Exception ex) {
responseFuture.completeExceptionally(ex);
}
}
);
return responseFuture.thenApplyAsync(Function.identity(), CALLBACK_EXECUTOR);
}
@Override
public void close() throws IOException {
delegate.close();
}
}