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);
}
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();
}
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();
}
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(".");
}
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);
}
Aggregations