1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.example.discard;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.channel.ChannelFutureListener;
20 import io.netty.channel.ChannelHandlerContext;
21 import io.netty.channel.SimpleChannelInboundHandler;
22
23
24
25
26 public class DiscardClientHandler extends SimpleChannelInboundHandler<Object> {
27
28 private ByteBuf content;
29 private ChannelHandlerContext ctx;
30
31 @Override
32 public void channelActive(ChannelHandlerContext ctx) {
33 this.ctx = ctx;
34
35
36 content = ctx.alloc().directBuffer(DiscardClient.SIZE).writeZero(DiscardClient.SIZE);
37
38
39 generateTraffic();
40 }
41
42 @Override
43 public void channelInactive(ChannelHandlerContext ctx) {
44 content.release();
45 }
46
47 @Override
48 public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
49
50 }
51
52 @Override
53 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
54
55 cause.printStackTrace();
56 ctx.close();
57 }
58
59 long counter;
60
61 private void generateTraffic() {
62
63
64 ctx.writeAndFlush(content.retainedDuplicate()).addListener(trafficGenerator);
65 }
66
67 private final ChannelFutureListener trafficGenerator = future -> {
68 if (future.isSuccess()) {
69 generateTraffic();
70 } else {
71 future.cause().printStackTrace();
72 future.channel().close();
73 }
74 };
75 }