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.EventLoopGroup;
22 import io.netty.channel.MultiThreadIoEventLoopGroup;
23 import io.netty.channel.nio.NioIoHandler;
24 import io.netty.channel.udt.UdtChannel;
25 import io.netty.channel.udt.nio.NioUdtProvider;
26 import io.netty.handler.logging.LogLevel;
27 import io.netty.handler.logging.LoggingHandler;
28 import io.netty.util.concurrent.DefaultThreadFactory;
29
30 import java.net.InetSocketAddress;
31 import java.util.concurrent.ThreadFactory;
32
33
34
35
36
37
38
39 public abstract class MsgEchoPeerBase {
40
41 protected final int messageSize;
42 protected final InetSocketAddress self;
43 protected final InetSocketAddress peer;
44
45 protected MsgEchoPeerBase(final InetSocketAddress self, final InetSocketAddress peer, final int messageSize) {
46 this.messageSize = messageSize;
47 this.self = self;
48 this.peer = peer;
49 }
50
51 public void run() throws Exception {
52
53 final ThreadFactory connectFactory = new DefaultThreadFactory("rendezvous");
54 final EventLoopGroup connectGroup = new MultiThreadIoEventLoopGroup(1,
55 connectFactory, NioIoHandler.newFactory(NioUdtProvider.MESSAGE_PROVIDER));
56 try {
57 final Bootstrap boot = new Bootstrap();
58 boot.group(connectGroup)
59 .channelFactory(NioUdtProvider.MESSAGE_RENDEZVOUS)
60 .handler(new ChannelInitializer<UdtChannel>() {
61 @Override
62 public void initChannel(final UdtChannel ch)
63 throws Exception {
64 ch.pipeline().addLast(
65 new LoggingHandler(LogLevel.INFO),
66 new MsgEchoPeerHandler(messageSize));
67 }
68 });
69
70 final ChannelFuture f = boot.connect(peer, self).sync();
71
72 f.channel().closeFuture().sync();
73 } finally {
74
75 connectGroup.shutdownGracefully();
76 }
77 }
78 }