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.channel.ChannelFuture;
20 import io.netty.channel.ChannelFutureListener;
21 import io.netty.channel.ChannelHandlerContext;
22 import io.netty.channel.ChannelOutboundHandlerAdapter;
23 import io.netty.channel.ChannelPromise;
24 import io.netty.handler.codec.haproxy.HAProxyMessage;
25 import io.netty.handler.codec.haproxy.HAProxyMessageEncoder;
26
27 public class HAProxyHandler extends ChannelOutboundHandlerAdapter {
28
29 @Override
30 public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
31 ctx.pipeline().addBefore(ctx.name(), null, HAProxyMessageEncoder.INSTANCE);
32 super.handlerAdded(ctx);
33 }
34
35 @Override
36 public void write(final ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
37 ChannelFuture future = ctx.write(msg, promise);
38 if (msg instanceof HAProxyMessage) {
39 future.addListener(new ChannelFutureListener() {
40 @Override
41 public void operationComplete(ChannelFuture future) throws Exception {
42 if (future.isSuccess()) {
43 ctx.pipeline().remove(HAProxyMessageEncoder.INSTANCE);
44 ctx.pipeline().remove(HAProxyHandler.this);
45 } else {
46 ctx.close();
47 }
48 }
49 });
50 }
51 }
52 }