com.king.platform.net.http.netty.HttpClientHandler Maven / Gradle / Ivy
// Copyright (C) king.com Ltd 2015
// https://github.com/king/king-http-client
// Author: Magnus Gustafsson
// License: Apache 2.0, https://raw.github.com/king/king-http-client/LICENSE-APACHE
package com.king.platform.net.http.netty;
import com.king.platform.net.http.netty.eventbus.Event;
import com.king.platform.net.http.netty.request.HttpClientRequestHandler;
import com.king.platform.net.http.netty.response.HttpClientResponseHandler;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import io.netty.util.AttributeKey;
import org.slf4j.Logger;
import static org.slf4j.LoggerFactory.getLogger;
@Sharable
public class HttpClientHandler extends ChannelDuplexHandler {
public static final AttributeKey HTTP_CLIENT_HANDLER_TRIGGERED_ERROR = AttributeKey.valueOf("__HttpClientHandler_ErrorTriggered");
private final Logger logger = getLogger(getClass());
private final HttpClientResponseHandler httpClientResponseHandler;
private final HttpClientRequestHandler httpClientRequestHandler;
public HttpClientHandler(HttpClientResponseHandler httpClientResponseHandler, HttpClientRequestHandler httpClientRequestHandler) {
this.httpClientResponseHandler = httpClientResponseHandler;
this.httpClientRequestHandler = httpClientRequestHandler;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
httpClientResponseHandler.handleResponse(ctx, msg);
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
httpClientRequestHandler.handleRequest(ctx, msg, promise);
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
httpClientResponseHandler.handleChannelInactive(ctx);
super.channelReadComplete(ctx);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, final Throwable cause) {
logger.trace("Exception on channel " + ctx.channel(), cause);
ctx.channel().attr(HTTP_CLIENT_HANDLER_TRIGGERED_ERROR).set(true);
HttpRequestContext httpRequestContext = ctx.channel().attr(HttpRequestContext.HTTP_REQUEST_ATTRIBUTE_KEY).get();
if (httpRequestContext != null) {
httpRequestContext.getRequestEventBus().triggerEvent(Event.ERROR, httpRequestContext, cause);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy