package biz.paluch.logging.gelf.netty; import java.util.List; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; /** * @author Mark Paluch * @since 10.11.13 10:30 */ public class NettyLocalServer { private int port = 19392; private EventLoopGroup group = new NioEventLoopGroup(); private GelfInboundHandler handler = new GelfInboundHandler(); private Class<? extends Channel> channelClass; private ChannelFuture f; public NettyLocalServer(Class<? extends Channel> channelClass) { this.channelClass = channelClass; } public void run() throws Exception { run(new ChannelInitializer<Channel>() { @Override protected void initChannel(Channel ch) throws Exception { ch.pipeline().addLast(handler); } }); } public void run(ChannelInitializer<Channel> initializer) throws Exception { if (ServerChannel.class.isAssignableFrom(channelClass)) { ServerBootstrap b = new ServerBootstrap(); b.group(group); b.channel((Class) channelClass).childHandler(initializer).childOption(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(8192, 8192, Integer.MAX_VALUE)); // Bind and start to accept incoming connections. f = b.bind(port).sync(); } else { Bootstrap b = new Bootstrap(); b.group(group); b.channel(channelClass).handler(initializer); // Bind and start to accept incoming connections. f = b.bind(port).sync(); } } public void close() { if (f != null) { f.channel().close(); f = null; } } public List<Object> getJsonValues() { return handler.getJsonValues(); } public GelfInboundHandler getHandler() { return handler; } public void clear() { handler.clear(); } public int getPort() { return port; } }