package org.voovan.test.netty;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.voovan.tools.TByteBuffer;

/**
 * 类文字命名
 *
 * @author helyho
 *         <p>
 *         Voovan Framework.
 *         WebSite: https://github.com/helyho/Voovan
 *         Licence: Apache v2 License
 */
public class NettyServer {

    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        public void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast(new DiscardServerHandler());
                        }
                    })
                    .option(ChannelOption.SO_BACKLOG, 1024)
                    .childOption(ChannelOption.SO_KEEPALIVE, true);

            ChannelFuture f = b.bind(28080).sync();

            f.channel().closeFuture().sync();
        } finally {
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }

    public static class DiscardServerHandler extends ChannelInboundHandlerAdapter {

        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) {
            //byte[] buffer = new byte[((ByteBuf) msg).readableBytes()];
            //((ByteBuf) msg).readBytes(buffer);
            //System.out.println(new String(buffer));
            //((ByteBuf) msg).clear();
            ((ByteBuf) msg).release();
            String retVal = "HTTP/1.1 200 OK\r\n" +
                    "Server: Voovan-WebServer/V1.0-RC-1\r\n" +
                    "Connection: keep-alive\r\n" +
                    "Content-Length: 2\r\n" +
                    "Date: Thu, 05 Jan 2017 04:55:20 GMT\r\n" +
                    "Content-Type: text/html\r\n"+
                    "\r\n"+
                    "OK\r\n\r\n";
            ByteBuf bf = ctx.alloc().buffer(retVal.length());
            bf.writeBytes(retVal.getBytes());
            ctx.writeAndFlush(bf);
            bf.release();
            ctx.close();
        }

        @Override
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)
            // Close the connection when an exception is raised.
            cause.printStackTrace();
            ctx.close();
        }
    }
}

@@ -2529,34 +2529,8 @@
 f);%0A
-            bf.release();%0A
     

修复 netty 测试用例 bug