@Override public void start() throws Exception { vertx.createNetClient().connect(1234, "localhost", res -> { if (res.succeeded()) { NetSocket socket = res.result(); RecordParser.newDelimited("\n", socket) .endHandler(v -> socket.close()) .exceptionHandler(t -> { t.printStackTrace(); socket.close(); }) .handler(buffer -> { String greeting = buffer.toString("UTF-8"); System.out.println("Net client receiving: " + greeting); }); // Now send some data Stream.of("John", "Joe", "Lisa", "Bill").forEach(name -> { System.out.println("Net client sending: " + name); socket.write(name).write("\n"); }); } else { System.out.println("Failed to connect " + res.cause()); } }); } }
@Test public void testSwitchModeResetsState() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("3\r\nabc\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("3")), emitted); parser.fixedSizeMode(5); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("3"), Buffer.buffer("abc\r\n")), emitted); }
@Test public void testParseEmptyChunkOnFetch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("abc\r\n\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("abc")), emitted); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer()), emitted); }
@Test public void testSuspendParsing() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc\r\ndef\r\n")); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer("def")), emitted); }
@Override public void start() throws Exception { vertx.createNetServer().connectHandler(sock -> { RecordParser parser = RecordParser.newDelimited("\n", sock); parser .endHandler(v -> sock.close()) .exceptionHandler(t -> { t.printStackTrace(); sock.close(); }) .handler(buffer -> { String name = buffer.toString("UTF-8"); sock.write("Hello " + name + "\n", "UTF-8"); }); }).listen(1234); System.out.println("Echo server is now listening"); } }
@Test public void testPausedStreamShouldNotPauseOnIncompleteMatch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); parser.handler(event -> {}); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc")); assertFalse(stream.isPaused()); }
parser.endHandler(v -> ends.incrementAndGet()); Deque<String> records = new ArrayDeque<>(); parser.handler(record -> records.add(record.toString())); assertFalse(stream.isPaused()); parser.pause();
@Test public void testParseEmptyChunkOnFetch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("abc\r\n\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("abc")), emitted); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer()), emitted); }
@Test public void testSuspendParsing() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc\r\ndef\r\n")); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer("def")), emitted); }
@Test public void testSwitchModeResetsState() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("3\r\nabc\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("3")), emitted); parser.fixedSizeMode(5); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("3"), Buffer.buffer("abc\r\n")), emitted); }
public io.vertx.rxjava.core.parsetools.RecordParser handler(Handler<io.vertx.rxjava.core.buffer.Buffer> handler) { delegate.handler(new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { handler.handle(io.vertx.rxjava.core.buffer.Buffer.newInstance(event)); } }); return this; }
public io.vertx.rxjava.core.parsetools.RecordParser handler(Handler<io.vertx.rxjava.core.buffer.Buffer> handler) { delegate.handler(new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { handler.handle(io.vertx.rxjava.core.buffer.Buffer.newInstance(event)); } }); return this; }
@Test public void testPausedStreamShouldNotPauseOnIncompleteMatch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); parser.handler(event -> {}); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc")); assertFalse(stream.isPaused()); }
parser.endHandler(v -> ends.incrementAndGet()); Deque<String> records = new ArrayDeque<>(); parser.handler(record -> records.add(record.toString())); assertFalse(stream.isPaused()); parser.pause();
private static void readVersion(Buffer header, RecordParser parser) { logger.info("Version: {}", header.getInt(0)); parser.delimitedMode("\n"); parser.handler(name -> readName(name, parser)); }
private static void readName(Buffer name, RecordParser parser) { logger.info("Name: {}", name.toString()); parser.fixedSizeMode(4); parser.handler(keyLength -> readKey(keyLength, parser)); }
private static void readName(Buffer name, RecordParser parser) { logger.info("Name: {}", name.toString()); parser.fixedSizeMode(4); parser.handler(keyLength -> readKey(keyLength, parser)); parser.fetch(1); }
private static void readValue(String key, RecordParser parser) { parser.fixedSizeMode(4); parser.handler(valueLength -> finishEntry(key, valueLength, parser)); parser.fetch(1); }
public static void main(String[] args) { Vertx vertx = Vertx.vertx(); AsyncFile file = vertx.fileSystem().openBlocking("sample.db", new OpenOptions().setRead(true)); RecordParser parser = RecordParser.newFixed(4, file); parser.handler(header -> readMagicNumber(header, parser)); parser.endHandler(v -> vertx.close()); }