List of usage examples for io.vertx.core.streams WriteStream exceptionHandler
@Override WriteStream<T> exceptionHandler(Handler<Throwable> handler);
From source file:org.apache.servicecomb.foundation.vertx.stream.PumpCommon.java
License:Apache License
/** * * @param context//from www . j a v a2 s.co m * @param readStream * @param writeStream * @return future of save action<br> * <p>important: * <p> if writeStream is AsyncCloseable, future means write complete * <p> if writeStream is not AsyncCloseable, future only means read complete */ @SuppressWarnings("unchecked") public CompletableFuture<Void> pump(Context context, ReadStream<Buffer> readStream, WriteStream<Buffer> writeStream) { CompletableFuture<Void> readFuture = new CompletableFuture<>(); writeStream.exceptionHandler(readFuture::completeExceptionally); readStream.exceptionHandler(readFuture::completeExceptionally); // just means read finished, not means write finished readStream.endHandler(readFuture::complete); // if readStream(HttpClientResponse) and awriteStream(HttpServerResponse) // belongs to difference eventloop // maybe will cause deadlock // if happened, vertx will print deadlock stacks Pump.pump(readStream, writeStream).start(); try { context.runOnContext(v -> readStream.resume()); } catch (Throwable e) { readFuture.completeExceptionally(e); } if (!AsyncCloseable.class.isInstance(writeStream)) { return readFuture; } return closeWriteStream((AsyncCloseable<Void>) writeStream, readFuture); }
From source file:org.sfs.io.AsyncIO.java
License:Apache License
public static Observable<Void> append(Buffer buffer, final WriteStream<Buffer> ws) { return Observable.defer(() -> { ObservableFuture<Void> drainHandler = RxHelper.observableFuture(); ws.exceptionHandler(drainHandler::fail); if (ws.writeQueueFull()) { ws.drainHandler(drainHandler::complete); } else {/*from w ww . j a v a2s . com*/ drainHandler.complete(null); } return drainHandler.flatMap(aVoid -> { ObservableFuture<Void> writeHandler = RxHelper.observableFuture(); ws.exceptionHandler(writeHandler::fail); ws.write(buffer); if (ws.writeQueueFull()) { ws.drainHandler(writeHandler::complete); } else { writeHandler.complete(null); } return writeHandler; }); }); }