package us.codecraft.netty_servlet.connector.netty; import org.jboss.netty.buffer.DynamicChannelBuffer; import org.jboss.netty.channel.*; import org.jboss.netty.handler.codec.http.DefaultHttpResponse; import org.jboss.netty.handler.codec.http.HttpHeaders; import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.HttpResponse; import us.codecraft.netty_servlet.container.Dispatcher; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import static org.jboss.netty.handler.codec.http.HttpResponseStatus.OK; import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1; /** * @author [email protected] */ public class HttpServerHandler extends SimpleChannelUpstreamHandler { private Dispatcher dispatcher; public HttpServerHandler(Dispatcher dispatcher) { this.dispatcher = dispatcher; } @Override public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { super.channelClosed(ctx, e); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent event) throws Exception { if (event.getMessage() instanceof HttpRequest) { try { HttpServletRequest httpServletRequest = new NettyHttpServletRequestAdaptor((HttpRequest) event.getMessage(), ctx.getChannel()); HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); response.setContent(new DynamicChannelBuffer(200)); HttpServletResponse httpServletResponse = new NettyHttpServletResponseAdaptor(response, ctx.getChannel()); dispatcher.dispatch(httpServletRequest,httpServletResponse); response.headers().set(HttpHeaders.Names.CONTENT_LENGTH,response.getContent().writerIndex()); ChannelFuture future = ctx.getChannel().write(response); future.addListener(ChannelFutureListener.CLOSE); } catch (Exception e) { e.printStackTrace(); } } } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { //DO NOTHING ha ha! super.exceptionCaught(ctx, e); } }