@Override public JsonParser handler(Handler<JsonEvent> handler) { eventHandler = handler; if (stream != null) { if (handler != null) { stream.endHandler(v -> end()); stream.exceptionHandler(err -> { if (exceptionHandler != null) { exceptionHandler.handle(err); } }); stream.handler(this); } else { stream.handler(null); stream.endHandler(null); stream.exceptionHandler(null); } } return this; }
@Test public void testTimerStreamSetHandlerSchedulesTheTimer() throws Exception { vertx.runOnContext(v -> { ReadStream<Long> timer = vertx.timerStream(200); AtomicBoolean handled = new AtomicBoolean(); timer.handler(l -> { assertFalse(handled.get()); handled.set(true); }); timer.endHandler(v2 -> { assertTrue(handled.get()); testComplete(); }); }); await(); }
public <T> CompletableFuture<T> saveAs(Function<Buffer, T> converter) { CompletableFuture<T> future = new CompletableFuture<>(); Buffer buffer = Buffer.buffer(); // if readStream.resume() not run on correct eventloop, will: // 1.create a context task to save last chunk data to buffer // 2.activate connection to read new data // but maybe 2 will run before 1, that will cause lost data or get incorrect data context.runOnContext(V -> { readStream.exceptionHandler(future::completeExceptionally); readStream.handler(buffer::appendBuffer); readStream.endHandler(v -> future.complete(converter.apply(buffer))); readStream.resume(); }); return future; }
@Test public void testSetHandlersAfterCompletionButPending() { Sender sender = sender(); sender.stream.handler(item -> {}); sender.stream.pause(); sender.emit(); sender.complete(); sender.stream.exceptionHandler(err -> {}); sender.stream.exceptionHandler(null); sender.stream.endHandler(v -> {}); sender.stream.endHandler(null); }
private void testInvalidSubProtocol(WebsocketVersion version) throws Exception { String path = "/some/path"; String subProtocol = "myprotocol"; server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT).setWebsocketSubProtocols("invalid")).websocketHandler(ws -> { }); server.listen(onSuccess(ar -> { client.websocketStream(DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, path, null, version, subProtocol). exceptionHandler(t -> { // Should fail testComplete(); }). handler(ws -> { }); })); await(); }
/** * Start the Pump. The Pump can be started and stopped multiple times. */ @Override public PumpImpl start() { readStream.handler(dataHandler); return this; }
@Test public void testTimerPause() throws Exception { vertx.runOnContext(v -> { ReadStream<Long> timer = vertx.timerStream(10); timer.handler(l -> fail()); timer.endHandler(l -> testComplete()); timer.pause(); }); await(); }
AtomicInteger steps = new AtomicInteger(); ReadStream<JsonObject> stream = retriever.configStream(); stream.pause(); stream.fetch(3); AtomicBoolean paused = new AtomicBoolean(); stream .handler(conf -> { String foo = conf.getString("foo"); tc.assertFalse(paused.get()); vertx.setTimer(1000, id -> { paused.set(false); stream.fetch(1); }); } else {
readStream.exceptionHandler(readFuture::completeExceptionally); readStream.endHandler(readFuture::complete); context.runOnContext(v -> readStream.resume()); } catch (Throwable e) { readFuture.completeExceptionally(e);
@Override public ReadStream<T> endHandler(Handler<Void> endHandler) { delegate.endHandler(endHandler); return this; } }
@Override public ReadStream<T> exceptionHandler(Handler<Throwable> handler) { delegate.exceptionHandler(handler); return null; }
@Override public ReadStream<T> pause() { delegate.pause(); return this; }
@Override public ReadStream<T> fetch(long amount) { delegate.fetch(amount); return this; }
@Override public ReadStream<T> resume() { delegate.resume(); return this; }
@Test public void testTimerStreamExceptionDuringHandle() throws Exception { vertx.runOnContext(v -> { ReadStream<Long> timer = vertx.timerStream(200); AtomicBoolean handled = new AtomicBoolean(); timer.handler(l -> { assertFalse(handled.get()); handled.set(true); throw new RuntimeException(); }); timer.endHandler(v2 -> { assertTrue(handled.get()); testComplete(); }); }); await(); }
@Test public void testSetHandlersAfterCompletionButPending() { Sender sender = sender(); sender.stream.handler(item -> {}); sender.stream.pause(); sender.emit(); sender.complete(); sender.stream.exceptionHandler(err -> {}); sender.stream.exceptionHandler(null); sender.stream.endHandler(v -> {}); sender.stream.endHandler(null); }