1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.example.udt.echo.rendezvous;
17
18 import io.netty.bootstrap.Bootstrap;
19 import io.netty.channel.ChannelFuture;
20 import io.netty.channel.ChannelInitializer;
21 import io.netty.channel.nio.NioEventLoopGroup;
22 import io.netty.channel.udt.UdtChannel;
23 import io.netty.channel.udt.nio.NioUdtProvider;
24 import io.netty.handler.logging.LogLevel;
25 import io.netty.handler.logging.LoggingHandler;
26 import io.netty.util.concurrent.DefaultThreadFactory;
27
28 import java.net.InetSocketAddress;
29 import java.util.concurrent.ThreadFactory;
30
31
32
33
34
35
36
37 public abstract class MsgEchoPeerBase {
38
39 protected final int messageSize;
40 protected final InetSocketAddress self;
41 protected final InetSocketAddress peer;
42
43 protected MsgEchoPeerBase(final InetSocketAddress self, final InetSocketAddress peer, final int messageSize) {
44 this.messageSize = messageSize;
45 this.self = self;
46 this.peer = peer;
47 }
48
49 public void run() throws Exception {
50
51 final ThreadFactory connectFactory = new DefaultThreadFactory("rendezvous");
52 final NioEventLoopGroup connectGroup = new NioEventLoopGroup(1,
53 connectFactory, NioUdtProvider.MESSAGE_PROVIDER);
54 try {
55 final Bootstrap boot = new Bootstrap();
56 boot.group(connectGroup)
57 .channelFactory(NioUdtProvider.MESSAGE_RENDEZVOUS)
58 .handler(new ChannelInitializer<UdtChannel>() {
59 @Override
60 public void initChannel(final UdtChannel ch)
61 throws Exception {
62 ch.pipeline().addLast(
63 new LoggingHandler(LogLevel.INFO),
64 new MsgEchoPeerHandler(messageSize));
65 }
66 });
67
68 final ChannelFuture f = boot.connect(peer, self).sync();
69
70 f.channel().closeFuture().sync();
71 } finally {
72
73 connectGroup.shutdownGracefully();
74 }
75 }
76 }