1 package org.sim0mq.test.pair;
2
3 import java.util.Scanner;
4
5 import org.zeromq.SocketType;
6 import org.zeromq.ZContext;
7 import org.zeromq.ZMQ;
8
9 /**
10 * Client-server implementation in 0MQ using the PAIR implementation. This involves exactly one client and one server that can
11 * chat with each other independent of the order of the messages. Text is read from stdin. This is the client. It can be started
12 * before or after the server. Any messages already created will be buffered and will not get lost.
13 * <p>
14 * Copyright (c) 2013-2017 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15 * BSD-style license. See <a href="http://sim0mq.org/docs/current/license.html">Sim0MQ License</a>.
16 * </p>
17 * $LastChangedDate: 2015-07-24 02:58:59 +0200 (Fri, 24 Jul 2015) $, @version $Revision: 1147 $, by $Author: averbraeck $,
18 * initial version 25 Apr 2020 <br>
19 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
20 */
21 public final class PairClient
22 {
23 /**
24 * @param port port nr
25 * @param clientname name
26 */
27 private PairClient(final int port, final String clientname)
28 {
29 ZContext ctx = new ZContext();
30 ZMQ.Socket socket = ctx.createSocket(SocketType.PAIR);
31 socket.connect("tcp://localhost:" + port);
32 new ListenThread(socket).start();
33 Scanner scanner = new Scanner(System.in);
34 while (true)
35 {
36 String line = scanner.nextLine();
37 if (line.isEmpty())
38 {
39 break;
40 }
41 socket.send(String.format("%s: %s", clientname, line));
42 }
43 ctx.close();
44 ctx.destroy();
45 scanner.close();
46 System.exit(0);
47 }
48
49 /**
50 * @param args pairserver_port name
51 */
52 public static void main(final String[] args)
53 {
54 String port = args.length < 1 ? "9001" : args[0];
55 String name = args.length < 2 ? "client" : args[1];
56 new PairClient(Integer.valueOf(port), name);
57 }
58
59 /** */
60 static class ListenThread extends Thread
61 {
62 /** */
63 private ZMQ.Socket socket;
64
65 /**
66 * @param socket socket
67 */
68 ListenThread(final ZMQ.Socket socket)
69 {
70 super();
71 this.socket = socket;
72 }
73
74 /** {@inheritDoc} */
75 @Override
76 public void run()
77 {
78 while (true)
79 {
80 String msg = this.socket.recvStr();
81 if (!msg.isEmpty())
82 {
83 System.out.println(msg);
84 }
85 }
86 }
87
88 }
89 }