1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.sumup;
21
22 import java.net.InetSocketAddress;
23
24 import org.apache.mina.core.RuntimeIoException;
25 import org.apache.mina.core.future.ConnectFuture;
26 import org.apache.mina.core.session.IoSession;
27 import org.apache.mina.example.sumup.codec.SumUpProtocolCodecFactory;
28 import org.apache.mina.filter.codec.ProtocolCodecFilter;
29 import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
30 import org.apache.mina.filter.logging.LoggingFilter;
31 import org.apache.mina.transport.socket.nio.NioSocketConnector;
32
33
34
35
36
37
38
39 public class Client {
40 private static final String HOSTNAME = "localhost";
41
42 private static final int PORT = 8080;
43
44 private static final long CONNECT_TIMEOUT = 30*1000L;
45
46
47 private static final boolean USE_CUSTOM_CODEC = true;
48
49 public static void main(String[] args) throws Throwable {
50 if (args.length == 0) {
51 System.out.println("Please specify the list of any integers");
52 return;
53 }
54
55
56 int[] values = new int[args.length];
57 for (int i = 0; i < args.length; i++) {
58 values[i] = Integer.parseInt(args[i]);
59 }
60
61 NioSocketConnector connector = new NioSocketConnector();
62
63
64 connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
65 if (USE_CUSTOM_CODEC) {
66 connector.getFilterChain().addLast(
67 "codec",
68 new ProtocolCodecFilter(
69 new SumUpProtocolCodecFactory(false)));
70 } else {
71 connector.getFilterChain().addLast(
72 "codec",
73 new ProtocolCodecFilter(
74 new ObjectSerializationCodecFactory()));
75 }
76 connector.getFilterChain().addLast("logger", new LoggingFilter());
77
78 connector.setHandler(new ClientSessionHandler(values));
79
80 IoSession session;
81 for (;;) {
82 try {
83 ConnectFuture future = connector.connect(new InetSocketAddress(
84 HOSTNAME, PORT));
85 future.awaitUninterruptibly();
86 session = future.getSession();
87 break;
88 } catch (RuntimeIoException e) {
89 System.err.println("Failed to connect.");
90 e.printStackTrace();
91 Thread.sleep(5000);
92 }
93 }
94
95
96 session.getCloseFuture().awaitUninterruptibly();
97
98 connector.dispose();
99 }
100 }