"session_key", mySessionKey.pack(), "nonce", myNonce ).waitSuccess() ); try {
private CommandResult sendToRemote(Object... keysValues) { HashMap<String, Object> packet = Ut.mapFromArray(keysValues); synchronized (access) { if (isClosed()) { CommandResult closedResult = new CommandResult(0); closedResult.sendFailure(new EOFException("farcall is closed")); return closedResult; } packet.put("serial", outSerial); CommandResult result = new CommandResult(outSerial); // synchronized (resultQueue) { resultQueue.put(outSerial, result); // } try { connector.send(packet); } catch (IOException e) { // synchronized (resultQueue) { resultQueue.remove(outSerial); // } result.sendFailure(e); close(); return result; } outSerial++; return result; } }
private void processReply(Map<String, Object> input, Integer ref) { CommandResult dr; // synchronized (resultQueue) { dr = resultQueue.remove(ref); // } if (dr != null) { Object error = input.get("error"); if (error != null) { dr.sendFailure(RemoteException.makeException(error)); } else { Object result = input.get("result"); dr.sendSuccess(result); } } }
futures.add(es.submit(() -> { for (int i = 0; i < 10; i++) assertEquals("fast done", fb.send("fast").waitSuccess()); return null; })); futures.add(es.submit(() -> { for (int i = 0; i < 2; i++) assertEquals("slow done", fb.send("slow").waitSuccess()); return null; }));
}); fb.start(); Future<Object> f1 = pool.submit(() -> fb.send("fast").waitSuccess()); Future<Object> f2 = pool.submit(() -> fb.send("fast").waitSuccess()); Future<Object> f3 = pool.submit(() -> fb.send("fast").waitSuccess()); Future<Object> f4 = pool.submit(() -> fb.send("slow").waitSuccess()); Future<Object> f5 = pool.submit(() -> fb.send("slow").waitSuccess()); assertEquals("fast done", f1.get()); assertEquals("fast done", f2.get());
futures.add(es.submit(() -> { for (int i = 0; i < 10; i++) assertEquals("fast done", fb.send("fast").waitSuccess()); return null; })); futures.add(es.submit(() -> { for (int i = 0; i < 2; i++) assertEquals("slow done", fb.send("slow").waitSuccess()); return null; }));
).connect(null)); f.start(); assertEquals(f.send("ping").waitSuccess(), "pong"); f.send("stop").await(20); try { f.send("ping").waitSuccess(); fail("must throw EOF"); } catch (DeferredResult.Error e) {
futures.add(es.submit(() -> { for (int i = 0; i < 10; i++) assertEquals("fast done", fb.send("fast").waitSuccess()); return null; })); futures.add(es.submit(() -> { for (int i = 0; i < 2; i++) assertEquals("slow done", fb.send("slow").waitSuccess()); return null; }));
a.send("ping").success((Object data) -> lastObject = data).join(); assertEquals("pong", lastObject); a.send("bad", null, null).failure((Object data) -> lastObject = data).join(); assertTrue(lastObject instanceof Farcall.RemoteException); a.send("echoargs", array, map).success((Object data) -> { lastObject = data; }).failure((err) -> {
b.send("wait").done((data) -> { waitDone[0] = true; done.fire(null); }); b.send("interrupt").waitSuccess(); done.waitFired(); assertTrue(waitDone[0]);
public void close() { Thread t = null; // This code avoids deadlock of calling close() from different threads // and avoid multiple closes synchronized (access) { if (worker != null) { t = worker; worker = null; } } // Then, releasing the lock, we perform closing, only once: if (t != null) { requestStop = true; t.interrupt(); // While the worker closes, we can free up the queue: EOFException eof = new EOFException(); // synchronized (resultQueue) { for (CommandResult dr : resultQueue.values()) { dr.sendFailure(eof); } resultQueue.clear(); // } // try { // t.join(); // } catch (InterruptedException ignored) { // } connector.close(); } }