1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.example.udt.echo.rendezvousBytes;
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.SocketAddress;
31 import java.util.concurrent.ThreadFactory;
32
33
34
35
36
37
38
39
40
41
42 public class ByteEchoPeerBase {
43
44 protected final int messageSize;
45 protected final SocketAddress myAddress;
46 protected final SocketAddress peerAddress;
47
48 public ByteEchoPeerBase(int messageSize, SocketAddress myAddress, SocketAddress peerAddress) {
49 this.messageSize = messageSize;
50 this.myAddress = myAddress;
51 this.peerAddress = peerAddress;
52 }
53
54 public void run() throws Exception {
55 final ThreadFactory connectFactory = new DefaultThreadFactory("rendezvous");
56 final EventLoopGroup connectGroup = new MultiThreadIoEventLoopGroup(1,
57 connectFactory, NioIoHandler.newFactory(NioUdtProvider.BYTE_PROVIDER));
58 try {
59 final Bootstrap bootstrap = new Bootstrap();
60 bootstrap.group(connectGroup)
61 .channelFactory(NioUdtProvider.BYTE_RENDEZVOUS)
62 .handler(new ChannelInitializer<UdtChannel>() {
63 @Override
64 protected void initChannel(UdtChannel ch) throws Exception {
65 ch.pipeline().addLast(
66 new LoggingHandler(LogLevel.INFO),
67 new ByteEchoPeerHandler(messageSize));
68 }
69 });
70 final ChannelFuture future = bootstrap.connect(peerAddress, myAddress).sync();
71 future.channel().closeFuture().sync();
72 } finally {
73 connectGroup.shutdownGracefully();
74 }
75 }
76 }