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.MultiThreadIoEventLoopGroup;
26 import io.netty.channel.SimpleChannelInboundHandler;
27 import io.netty.channel.nio.NioIoHandler;
28 import io.netty.channel.socket.SocketChannel;
29 import io.netty.channel.socket.nio.NioServerSocketChannel;
30 import io.netty.handler.codec.haproxy.HAProxyMessage;
31 import io.netty.handler.codec.haproxy.HAProxyMessageDecoder;
32 import io.netty.handler.logging.LogLevel;
33 import io.netty.handler.logging.LoggingHandler;
34
35 public final class HAProxyServer {
36
37 static final int PORT = Integer.parseInt(System.getProperty("port", "8080"));
38
39 public static void main(String[] args) throws Exception {
40 EventLoopGroup group = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory());
41 try {
42 ServerBootstrap b = new ServerBootstrap();
43 b.group(group)
44 .channel(NioServerSocketChannel.class)
45 .handler(new LoggingHandler(LogLevel.INFO))
46 .childHandler(new HAProxyServerInitializer());
47 b.bind(PORT).sync().channel().closeFuture().sync();
48 } finally {
49 group.shutdownGracefully();
50 }
51 }
52
53 static class HAProxyServerInitializer extends ChannelInitializer<SocketChannel> {
54 @Override
55 public void initChannel(SocketChannel ch) throws Exception {
56 ch.pipeline().addLast(
57 new LoggingHandler(LogLevel.DEBUG),
58 new HAProxyMessageDecoder(),
59 new SimpleChannelInboundHandler() {
60 @Override
61 protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
62 if (msg instanceof HAProxyMessage) {
63 System.out.println("proxy message: " + msg);
64 } else if (msg instanceof ByteBuf) {
65 System.out.println("bytebuf message: " + ByteBufUtil.prettyHexDump((ByteBuf) msg));
66 }
67 }
68 });
69 }
70 }
71 }