@Override
public Object makeObject() throws Exception {
Bootstrap clientBootstrap = instantiateAndConfigBootStrap(eventLoopGroup,
eventLoopClass, bootstrapConfiguration);
ConnectionAvailabilityFuture connectionAvailabilityFuture = new ConnectionAvailabilityFuture();
HttpClientChannelInitializer httpClientChannelInitializer = instantiateAndConfigClientInitializer(
senderConfiguration, clientBootstrap, httpRoute, connectionManager, connectionAvailabilityFuture);
clientBootstrap.handler(httpClientChannelInitializer);
ChannelFuture channelFuture;
if (senderConfiguration.getProxyServerConfiguration() != null && senderConfiguration.getScheme()
.equals(HTTP_SCHEME)) {
channelFuture = clientBootstrap.connect(new InetSocketAddress(
senderConfiguration.getProxyServerConfiguration().getProxyHost(),
senderConfiguration.getProxyServerConfiguration().getProxyPort()
));
} else {
channelFuture = clientBootstrap.connect(new InetSocketAddress(httpRoute.getHost(), httpRoute.getPort()));
}
connectionAvailabilityFuture.setSocketAvailabilityFuture(channelFuture);
connectionAvailabilityFuture.setForceHttp2(senderConfiguration.isForceHttp2());
TargetChannel targetChannel =
new TargetChannel(httpClientChannelInitializer, channelFuture, httpRoute, connectionAvailabilityFuture);
httpClientChannelInitializer.setHttp2ClientChannel(targetChannel.getHttp2ClientChannel());
LOG.debug("Created channel: {}", httpRoute);
return targetChannel;
}