com.king.platform.net.http.netty.HttpClientHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.king.platform.net.http.netty.HttpClientHandler.java

Source

// 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 org.slf4j.Logger;

import static org.slf4j.LoggerFactory.getLogger;

@Sharable
public class HttpClientHandler extends ChannelDuplexHandler {

    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 exceptionCaught(ChannelHandlerContext ctx, final Throwable cause) {
        logger.error("Exception on channel " + ctx.channel(), cause);

        HttpRequestContext httpRequestContext = ctx.channel().attr(HttpRequestContext.HTTP_REQUEST_ATTRIBUTE_KEY)
                .get();
        if (httpRequestContext != null) {
            httpRequestContext.getRequestEventBus().triggerEvent(Event.ERROR, httpRequestContext, cause);
        }

    }

}