1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty5.example.qotm;
17
18 import io.netty5.bootstrap.Bootstrap;
19 import io.netty5.buffer.api.Buffer;
20 import io.netty5.buffer.api.DefaultBufferAllocators;
21 import io.netty5.channel.Channel;
22 import io.netty5.channel.ChannelOption;
23 import io.netty5.channel.EventLoopGroup;
24 import io.netty5.channel.MultithreadEventLoopGroup;
25 import io.netty5.channel.nio.NioHandler;
26 import io.netty5.channel.socket.DatagramPacket;
27 import io.netty5.channel.socket.nio.NioDatagramChannel;
28 import io.netty5.util.internal.SocketUtils;
29
30 import java.util.concurrent.TimeUnit;
31
32 import static java.nio.charset.StandardCharsets.UTF_8;
33
34
35
36
37
38
39
40 public final class QuoteOfTheMomentClient {
41
42 static final int PORT = Integer.parseInt(System.getProperty("port", "7686"));
43
44 public static void main(String[] args) throws Exception {
45
46 EventLoopGroup group = new MultithreadEventLoopGroup(NioHandler.newFactory());
47 try {
48 Bootstrap b = new Bootstrap();
49 b.group(group)
50 .channel(NioDatagramChannel.class)
51 .option(ChannelOption.SO_BROADCAST, true)
52 .handler(new QuoteOfTheMomentClientHandler());
53
54 Channel ch = b.bind(0).asStage().get();
55
56
57 Buffer message = DefaultBufferAllocators.preferredAllocator().copyOf("QOTM?", UTF_8);
58 ch.writeAndFlush(new DatagramPacket(message, SocketUtils.socketAddress("255.255.255.255", PORT)))
59 .asStage().sync();
60
61
62
63
64 if (!ch.closeFuture().asStage().await(5000, TimeUnit.MILLISECONDS)) {
65 System.err.println("QOTM request timed out.");
66 }
67 } finally {
68 group.shutdownGracefully();
69 }
70 }
71 }