package org.sim0mq.demo; import org.djutils.serialization.SerializationException; import org.sim0mq.Sim0MQException; import org.sim0mq.message.Sim0MQMessage; import org.zeromq.SocketType; import org.zeromq.ZContext; import org.zeromq.ZMQ; /** * Server example for JeroMQ / ZeroMQ. *

* (c) copyright 2015-2020 Delft University of Technology.
* BSD-style license. See DSOL License.
* @author Alexander Verbraeck * @version Oct 21, 2016 */ public final class Server { /** */ private ZContext context; /** the socket. */ private ZMQ.Socket responder; /** */ public Server() { this.context = new ZContext(1); // Socket to talk to clients this.responder = this.context.createSocket(SocketType.REP); this.responder.bind("tcp://*:5556"); new Worker(this).start(); } /** * @return context */ public ZContext getContext() { return this.context; } /** * @return responder */ public ZMQ.Socket getResponder() { return this.responder; } /** * @param args command line arguments * @throws Sim0MQException on error * @throws SerializationException on serialization problem */ public static void main(final String[] args) throws Sim0MQException, SerializationException { new Server(); } /** */ protected static class Worker extends Thread { /** */ private Server server; /** * Constructor. * @param server the server */ public Worker(final Server server) { this.server = server; } /** {@inheritDoc} */ @Override public void run() { while (!Thread.currentThread().isInterrupted()) { try { // Wait for next request from the client byte[] request = this.server.getResponder().recv(0); Object[] message = Sim0MQMessage.decode(request).createObjectArray(); System.out.println("Received " + Sim0MQMessage.print(message)); // send a reply Object[] reply = new Object[] {true, -28.2, 77000, "Bangladesh"}; this.server.getResponder() .send(Sim0MQMessage.encodeUTF8(true, "IDVV14.2", "MC.1", "MM1.4", "TEST.2", 1201L, reply), 0); } catch (Sim0MQException | SerializationException e) { e.printStackTrace(); } } this.server.getResponder().close(); this.server.getContext().destroy(); this.server.getContext().close(); } } }