Search in sources :

Example 31 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class TestZLoop method testZLoopAddTimerFromSocketHandler.

@Test(timeout = 1000)
public void testZLoopAddTimerFromSocketHandler() {
    int rc = 0;
    ZLoop loop = new ZLoop(ctx);
    assert (loop != null);
    ZLoop.IZLoopHandler timerEvent = new ZLoop.IZLoopHandler() {

        @Override
        public int handle(ZLoop loop, PollItem item, Object arg) {
            ((Socket) arg).send("PING", 0);
            return 0;
        }
    };
    ZLoop.IZLoopHandler socketEvent = new ZLoop.IZLoopHandler() {

        @Override
        public int handle(ZLoop loop, PollItem item, Object arg) {
            final long now = System.currentTimeMillis();
            ZLoop.IZLoopHandler timerEvent2 = new ZLoop.IZLoopHandler() {

                @Override
                public int handle(ZLoop loop, PollItem item, Object arg) {
                    final long now2 = System.currentTimeMillis();
                    Assert.assertTrue(now2 >= now + 10);
                    received = ((Socket) arg).recvStr(0);
                    //  Just end the reactor
                    return -1;
                }
            };
            //  After 10 msec fire a timer that ends the reactor
            loop.addTimer(10, 1, timerEvent2, arg);
            return 0;
        }
    };
    //  Fire a timer that sends the ping message
    loop.addTimer(0, 1, timerEvent, input);
    //  When we get the ping message, end the reactor
    PollItem pollInput = new PollItem(output, Poller.POLLIN);
    rc = loop.addPoller(pollInput, socketEvent, output);
    Assert.assertEquals(0, rc);
    loop.start();
    loop.removePoller(pollInput);
    Assert.assertEquals("PING", received);
}
Also used : PollItem(org.zeromq.ZMQ.PollItem) Socket(org.zeromq.ZMQ.Socket) Test(org.junit.Test)

Example 32 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class TestZMQ method testEventConnectRetried.

@Test
public void testEventConnectRetried() throws InterruptedException, IOException {
    Context context = ZMQ.context(1);
    ZMQ.Event event;
    Socket socket = context.socket(ZMQ.REP);
    Socket monitor = context.socket(ZMQ.PAIR);
    monitor.setReceiveTimeOut(100);
    assertTrue(socket.monitor("inproc://monitor.socket", ZMQ.EVENT_CONNECT_RETRIED));
    monitor.connect("inproc://monitor.socket");
    int randomPort = Utils.findOpenPort();
    socket.connect("tcp://127.0.0.1:" + randomPort);
    // on windows, this is required, otherwise test fails
    Thread.sleep(1000L);
    event = ZMQ.Event.recv(monitor);
    assertNotNull("No event was received", event);
    assertEquals(ZMQ.EVENT_CONNECT_RETRIED, event.getEvent());
    socket.close();
    monitor.close();
    context.term();
}
Also used : Context(org.zeromq.ZMQ.Context) Socket(org.zeromq.ZMQ.Socket) Test(org.junit.Test)

Example 33 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class TestZMQ method testEventConnected.

@Test
public void testEventConnected() {
    Context context = ZMQ.context(1);
    ZMQ.Event event;
    Socket helper = context.socket(ZMQ.REQ);
    int port = helper.bindToRandomPort("tcp://127.0.0.1");
    Socket socket = context.socket(ZMQ.REP);
    Socket monitor = context.socket(ZMQ.PAIR);
    monitor.setReceiveTimeOut(100);
    assertTrue(socket.monitor("inproc://monitor.socket", ZMQ.EVENT_CONNECTED));
    monitor.connect("inproc://monitor.socket");
    socket.connect("tcp://127.0.0.1:" + port);
    event = ZMQ.Event.recv(monitor);
    assertNotNull("No event was received", event);
    assertEquals(ZMQ.EVENT_CONNECTED, event.getEvent());
    helper.close();
    socket.close();
    monitor.close();
    context.term();
}
Also used : Context(org.zeromq.ZMQ.Context) Socket(org.zeromq.ZMQ.Socket) Test(org.junit.Test)

Example 34 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class TestZActor method testMinimalistic.

@Test
@Ignore
public void testMinimalistic() {
    Actor acting = new ZActor.SimpleActor() {

        @Override
        public List<Socket> createSockets(ZContext ctx, Object[] args) {
            assert ("TEST".equals(args[0]));
            return Arrays.asList(ctx.createSocket(ZMQ.PUB));
        }

        @Override
        public boolean backstage(Socket pipe, ZPoller poller, int events) {
            String string = pipe.recvStr();
            if ("HELLO".equals(string)) {
                pipe.send("WORLD");
            }
            if ("QUIT".equals(string)) {
                pipe.send("EXIT");
                return false;
            }
            return true;
        }
    };
    ZContext context = new ZContext();
    ZActor actor = new ZActor(context, new ZAgent.VerySimpleSelectorCreator(), acting, "LOCK", Arrays.asList("TEST").toArray());
    Socket pipe = actor.pipe();
    boolean rc = pipe.send("HELLO");
    Assert.assertTrue("Unable to send a message through pipe", rc);
    ZMsg msg = actor.recv();
    String world = msg.popString();
    Assert.assertEquals("No matching response from actor", "WORLD", world);
    rc = pipe.send("QUIT");
    msg = actor.recv();
    Assert.assertNotNull("Unable to receive EXIT message", msg);
    msg = actor.recv();
    Assert.assertNull("Able to receive a message from a locked actor", msg);
    rc = actor.sign();
    Assert.assertFalse("Locked actor is still here", rc);
    rc = actor.send("whatever");
    Assert.assertFalse("Able to send a message to a locked actor", rc);
    try {
        rc = pipe.send("boom ?!");
        Assert.assertTrue("actor pipe was closed pretty fast", rc);
    } catch (ZMQException e) {
        int errno = e.getErrorCode();
        Assert.assertEquals("Expected exception has the wrong code", ZError.ETERM, errno);
    }
    context.close();
    System.out.println(".");
}
Also used : Actor(org.zeromq.ZActor.Actor) Socket(org.zeromq.ZMQ.Socket) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 35 with Socket

use of org.zeromq.ZMQ.Socket in project jeromq by zeromq.

the class ZHelper method buildZPipe.

public static List<Socket> buildZPipe(Context ctx) {
    Socket socket1 = ctx.socket(ZMQ.PAIR);
    socket1.setLinger(0);
    socket1.setHWM(1);
    Socket socket2 = ctx.socket(ZMQ.PAIR);
    socket2.setLinger(0);
    socket2.setHWM(1);
    String iface = "inproc://" + new BigInteger(130, rand).toString(32);
    socket1.bind(iface);
    socket2.connect(iface);
    return Arrays.asList(socket1, socket2);
}
Also used : BigInteger(java.math.BigInteger) Socket(org.zeromq.ZMQ.Socket)

Aggregations

Socket (org.zeromq.ZMQ.Socket)84 Context (org.zeromq.ZMQ.Context)32 ZContext (org.zeromq.ZContext)30 Test (org.junit.Test)26 Poller (org.zeromq.ZMQ.Poller)20 ZMsg (org.zeromq.ZMsg)14 Random (java.util.Random)13 ZFrame (org.zeromq.ZFrame)13 PollItem (org.zeromq.ZMQ.PollItem)6 ByteBuffer (java.nio.ByteBuffer)4 ArrayList (java.util.ArrayList)4 SelectableChannel (java.nio.channels.SelectableChannel)3 HashMap (java.util.HashMap)3 IOException (java.io.IOException)2 LinkedList (java.util.LinkedList)2 Entry (java.util.Map.Entry)2 Ignore (org.junit.Ignore)2 Actor (org.zeromq.ZActor.Actor)2 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1