@Override public HttpServerFileUpload streamToFileSystem(String filename) { pause(); context.owner().fileSystem().open(filename, new OpenOptions(), ar -> { if (ar.succeeded()) { file = ar.result(); Pump p = Pump.pump(HttpServerFileUploadImpl.this, ar.result()); p.start(); resume(); } else { notifyExceptionHandler(ar.cause()); } }); return this; }
@Override public void start() throws Exception { vertx.createNetServer().connectHandler(sock -> { // Create a pump Pump.pump(sock, sock).start(); }).listen(1234); System.out.println("Echo server is now listening"); } }
@Override public void start() throws Exception { vertx.createHttpServer().requestHandler(req -> { req.pause(); String filename = UUID.randomUUID() + ".uploaded"; vertx.fileSystem().open(filename, new OpenOptions(), ares -> { AsyncFile file = ares.result(); Pump pump = Pump.pump(req, file); req.endHandler(v1 -> file.close(v2 -> { System.out.println("Uploaded to " + filename); req.response().end(); })); pump.start(); req.resume(); }); }).listen(8080); } }
@Override public void start() throws Exception { NetServerOptions options = new NetServerOptions() .setSsl(true).setKeyStoreOptions(new JksOptions().setPath("server-keystore.jks").setPassword("wibble")); vertx.createNetServer(options).connectHandler(sock -> { // Create a pump Pump.pump(sock, sock).start(); }).listen(1234); System.out.println("Echo server is now listening"); } }
@Override public void start() throws Exception { HttpClientRequest req = vertx.createHttpClient(new HttpClientOptions()).put(8080, "localhost", "/someurl", resp -> { System.out.println("Response " + resp.statusCode()); }); String filename = "upload.txt"; FileSystem fs = vertx.fileSystem(); fs.props(filename, ares -> { FileProps props = ares.result(); System.out.println("props is " + props); long size = props.size(); req.headers().set("content-length", "" + size); fs.open(filename, new OpenOptions(), ares2 -> { AsyncFile file = ares2.result(); Pump pump = Pump.pump(file, req); file.endHandler(v -> { req.end(); }); pump.start(); }); }); } }
WriteStream ws = ar.result(); Pump p = Pump.pump(rs, ws); p.start(); rs.endHandler(v -> { arr.result().close(car -> {
@Test public void testPumpBasic() throws Exception { FakeReadStream<MyClass> rs = new FakeReadStream<>(); FakeWriteStream<MyClass> ws = new FakeWriteStream<>(); Pump p = Pump.pump(rs, ws, 1001); for (int i = 0; i < 10; i++) { // Repeat a few times p.start(); List<MyClass> inp = new ArrayList<>(); for (int j = 0; j < 10; j++) { MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); } assertEquals(inp, ws.received); assertFalse(rs.paused); assertEquals(0, rs.pauseCount); assertEquals(0, rs.resumeCount); p.stop(); ws.clearReceived(); MyClass myClass = new MyClass(); rs.addData(myClass); assertEquals(0, ws.received.size()); } }
@Test public void testPumpPauseResume() throws Exception { FakeReadStream<MyClass> rs = new FakeReadStream<>(); FakeWriteStream<MyClass> ws = new FakeWriteStream<>(); Pump p = Pump.pump(rs, ws, 5); p.start(); for (int i = 0; i < 10; i++) { // Repeat a few times List<MyClass> inp = new ArrayList<>(); for (int j = 0; j < 4; j++) { MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); assertFalse(rs.paused); assertEquals(i, rs.pauseCount); assertEquals(i, rs.resumeCount); } MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); assertTrue(rs.paused); assertEquals(i + 1, rs.pauseCount); assertEquals(i, rs.resumeCount); assertEquals(inp, ws.received); ws.clearReceived(); assertFalse(rs.paused); assertEquals(i + 1, rs.pauseCount); assertEquals(i + 1, rs.resumeCount); } }
@Override public HttpServerFileUpload streamToFileSystem(String filename) { pause(); context.owner().fileSystem().open(filename, new OpenOptions(), ar -> { if (ar.succeeded()) { file = ar.result(); Pump p = Pump.pump(HttpServerFileUploadImpl.this, ar.result()); p.start(); resume(); } else { notifyExceptionHandler(ar.cause()); } }); return this; }
WriteStream ws = ar.result(); Pump p = Pump.pump(rs, ws); p.start(); rs.endHandler(v -> { arr.result().close(car -> {
@Test public void testPumpBasic() throws Exception { FakeReadStream<MyClass> rs = new FakeReadStream<>(); FakeWriteStream<MyClass> ws = new FakeWriteStream<>(); Pump p = Pump.pump(rs, ws, 1001); for (int i = 0; i < 10; i++) { // Repeat a few times p.start(); List<MyClass> inp = new ArrayList<>(); for (int j = 0; j < 10; j++) { MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); } assertEquals(inp, ws.received); assertFalse(rs.paused); assertEquals(0, rs.pauseCount); assertEquals(0, rs.resumeCount); p.stop(); ws.clearReceived(); MyClass myClass = new MyClass(); rs.addData(myClass); assertEquals(0, ws.received.size()); } }
@Test public void testPumpPauseResume() throws Exception { FakeReadStream<MyClass> rs = new FakeReadStream<>(); FakeWriteStream<MyClass> ws = new FakeWriteStream<>(); Pump p = Pump.pump(rs, ws, 5); p.start(); for (int i = 0; i < 10; i++) { // Repeat a few times List<MyClass> inp = new ArrayList<>(); for (int j = 0; j < 4; j++) { MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); assertFalse(rs.paused); assertEquals(i, rs.pauseCount); assertEquals(i, rs.resumeCount); } MyClass myClass = new MyClass(); inp.add(myClass); rs.addData(myClass); assertTrue(rs.paused); assertEquals(i + 1, rs.pauseCount); assertEquals(i, rs.resumeCount); assertEquals(inp, ws.received); ws.clearReceived(); assertFalse(rs.paused); assertEquals(i + 1, rs.pauseCount); assertEquals(i + 1, rs.resumeCount); } }