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 public class Client {
39 private static final String HOSTNAME = "localhost";
40
41 private static final int PORT = 8080;
42
43 private static final long CONNECT_TIMEOUT = 30*1000L;
44
45
46 private static final boolean USE_CUSTOM_CODEC = true;
47
48 public static void main(String[] args) throws Throwable {
49 if (args.length == 0) {
50 System.out.println("Please specify the list of any integers");
51 return;
52 }
53
54
55 int[] values = new int[args.length];
56 for (int i = 0; i < args.length; i++) {
57 values[i] = Integer.parseInt(args[i]);
58 }
59
60 NioSocketConnector connector = new NioSocketConnector();
61
62
63 connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
64 if (USE_CUSTOM_CODEC) {
65 connector.getFilterChain().addLast(
66 "codec",
67 new ProtocolCodecFilter(
68 new SumUpProtocolCodecFactory(false)));
69 } else {
70 connector.getFilterChain().addLast(
71 "codec",
72 new ProtocolCodecFilter(
73 new ObjectSerializationCodecFactory()));
74 }
75 connector.getFilterChain().addLast("logger", new LoggingFilter());
76
77 connector.setHandler(new ClientSessionHandler(values));
78
79 IoSession session;
80 for (;;) {
81 try {
82 ConnectFuture future = connector.connect(new InetSocketAddress(
83 HOSTNAME, PORT));
84 future.awaitUninterruptibly();
85 session = future.getSession();
86 break;
87 } catch (RuntimeIoException e) {
88 System.err.println("Failed to connect.");
89 e.printStackTrace();
90 Thread.sleep(5000);
91 }
92 }
93
94
95 session.getCloseFuture().awaitUninterruptibly();
96
97 connector.dispose();
98 }
99 }