1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.netty.example.haproxy;
18
19 import io.netty.bootstrap.ServerBootstrap;
20 import io.netty.buffer.ByteBuf;
21 import io.netty.buffer.ByteBufUtil;
22 import io.netty.channel.ChannelHandlerContext;
23 import io.netty.channel.ChannelInitializer;
24 import io.netty.channel.EventLoopGroup;
25 import io.netty.channel.SimpleChannelInboundHandler;
26 import io.netty.channel.nio.NioEventLoopGroup;
27 import io.netty.channel.socket.SocketChannel;
28 import io.netty.channel.socket.nio.NioServerSocketChannel;
29 import io.netty.handler.codec.haproxy.HAProxyMessage;
30 import io.netty.handler.codec.haproxy.HAProxyMessageDecoder;
31 import io.netty.handler.logging.LogLevel;
32 import io.netty.handler.logging.LoggingHandler;
33
34 public final class HAProxyServer {
35
36 static final int PORT = Integer.parseInt(System.getProperty("port", "8080"));
37
38 public static void main(String[] args) throws Exception {
39 EventLoopGroup group = new NioEventLoopGroup();
40 try {
41 ServerBootstrap b = new ServerBootstrap();
42 b.group(group)
43 .channel(NioServerSocketChannel.class)
44 .handler(new LoggingHandler(LogLevel.INFO))
45 .childHandler(new HAProxyServerInitializer());
46 b.bind(PORT).sync().channel().closeFuture().sync();
47 } finally {
48 group.shutdownGracefully();
49 }
50 }
51
52 static class HAProxyServerInitializer extends ChannelInitializer<SocketChannel> {
53 @Override
54 public void initChannel(SocketChannel ch) throws Exception {
55 ch.pipeline().addLast(
56 new LoggingHandler(LogLevel.DEBUG),
57 new HAProxyMessageDecoder(),
58 new SimpleChannelInboundHandler() {
59 @Override
60 protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
61 if (msg instanceof HAProxyMessage) {
62 System.out.println("proxy message: " + msg);
63 } else if (msg instanceof ByteBuf) {
64 System.out.println("bytebuf message: " + ByteBufUtil.prettyHexDump((ByteBuf) msg));
65 }
66 }
67 });
68 }
69 }
70 }