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