public BatchStream(ReadStream<Buffer> rs, WriteStream<Buffer> ws) { Objects.requireNonNull(rs, "ReadStream"); Objects.requireNonNull(ws, "WriteStream"); recordParser = RecordParser.newFixed(4, rs); writeStream = ws; // Propagate exceptions to the current stream recordParser.exceptionHandler(throwable -> { if (exceptionHandler != null) { exceptionHandler.handle(throwable); } }); writeStream.exceptionHandler(throwable -> { if (exceptionHandler != null) { exceptionHandler.handle(throwable); } }); }
private Handler<NetSocket> getServerHandler() { return socket -> { RecordParser parser = RecordParser.newFixed(4); Handler<Buffer> handler = new Handler<Buffer>() { int size = -1; public void handle(Buffer buff) { if (size == -1) { size = buff.getInt(0); parser.fixedSizeMode(size); } else { ClusteredMessage received = new ClusteredMessage(); received.readFromWire(buff, codecManager); if (metrics != null) { metrics.messageRead(received.address(), buff.length()); } parser.fixedSizeMode(4); size = -1; if (received.codec() == CodecManager.PING_MESSAGE_CODEC) { // Just send back pong directly on connection socket.write(PONG); } else { deliverMessageLocally(received); } } } }; parser.setOutput(handler); socket.handler(parser); }; }
/** * 在解析出错时,通过重新创建parser对象,将整个缓冲区重置 */ protected void reset() { parser = RecordParser.newFixed(TCP_HEADER_LENGTH, this::onParse); status = ParseStatus.TCP_HEADER; parser.handle(Buffer.buffer(0)); }
private Handler<NetSocket> getServerHandler() { return socket -> { RecordParser parser = RecordParser.newFixed(4); Handler<Buffer> handler = new Handler<Buffer>() { int size = -1; public void handle(Buffer buff) { if (size == -1) { size = buff.getInt(0); parser.fixedSizeMode(size); } else { ClusteredMessage received = new ClusteredMessage(); received.readFromWire(buff, codecManager); if (metrics != null) { metrics.messageRead(received.address(), buff.length()); } parser.fixedSizeMode(4); size = -1; if (received.codec() == CodecManager.PING_MESSAGE_CODEC) { // Just send back pong directly on connection socket.write(PONG); } else { deliverMessageLocally(received); } } } }; parser.setOutput(handler); socket.handler(parser); }; }
/** * Create a new <code>RecordParser</code> instance, initially in fixed size mode, and where the record size is specified * by the <code>size</code> parameter. * <p> * <code>output</code> Will receive whole records which have been parsed. * @param size the initial record size * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size)); return ret; }
/** * 在解析出错时,通过重新创建parser对象,将整个缓冲区重置 */ protected void reset() { parser = RecordParser.newFixed(TCP_HEADER_LENGTH, this::onParse); status = ParseStatus.TCP_HEADER; parser.handle(Buffer.buffer(0)); }
/** * 在解析出错时,通过重新创建parser对象,将整个缓冲区重置 */ protected void reset() { parser = RecordParser.newFixed(TCP_HEADER_LENGTH, this::onParse); status = ParseStatus.TCP_HEADER; parser.handle(Buffer.buffer(0)); }
/** * Create a new <code>RecordParser</code> instance, initially in fixed size mode, and where the record size is specified * by the <code>size</code> parameter. * <p> * <code>output</code> Will receive whole records which have been parsed. * @param size the initial record size * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size)); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but set the <code>output</code> that will receive whole records * which have been parsed. * @param size the initial record size * @param output handler that will receive the output * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, Handler<io.vertx.rxjava.core.buffer.Buffer> output) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { output.handle(io.vertx.rxjava.core.buffer.Buffer.newInstance(event)); } })); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but set the <code>output</code> that will receive whole records * which have been parsed. * @param size the initial record size * @param output handler that will receive the output * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, Handler<io.vertx.rxjava.core.buffer.Buffer> output) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { output.handle(io.vertx.rxjava.core.buffer.Buffer.newInstance(event)); } })); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but wraps the <code>stream</code>. The <code>stream</code> handlers will be set/unset * when the {@link io.vertx.rxjava.core.parsetools.RecordParser#handler} is set. * <p/> * The <code>pause()</code>/<code>resume()</code> operations are propagated to the <code>stream</code>. * @param size the initial record size * @param stream the wrapped stream * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, io.vertx.rxjava.core.streams.ReadStream<io.vertx.rxjava.core.buffer.Buffer> stream) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, stream.getDelegate())); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but wraps the <code>stream</code>. The <code>stream</code> handlers will be set/unset * when the {@link io.vertx.rxjava.core.parsetools.RecordParser#handler} is set. * <p/> * The <code>pause()</code>/<code>resume()</code> operations are propagated to the <code>stream</code>. * @param size the initial record size * @param stream the wrapped stream * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, io.vertx.rxjava.core.streams.ReadStream<io.vertx.rxjava.core.buffer.Buffer> stream) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, stream.getDelegate())); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but wraps the <code>stream</code>. The <code>stream</code> handlers will be set/unset * when the {@link io.vertx.rxjava.core.parsetools.RecordParser#handler} is set. * <p/> * The <code>pause()</code>/<code>resume()</code> operations are propagated to the <code>stream</code>. * @param size the initial record size * @param stream the wrapped stream * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, Observable<io.vertx.rxjava.core.buffer.Buffer> stream) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, io.vertx.rx.java.ReadStreamSubscriber.asReadStream(stream,obj -> (io.vertx.core.buffer.Buffer)obj.getDelegate()).resume())); return ret; }
/** * Like {@link io.vertx.rxjava.core.parsetools.RecordParser#newFixed} but wraps the <code>stream</code>. The <code>stream</code> handlers will be set/unset * when the {@link io.vertx.rxjava.core.parsetools.RecordParser#handler} is set. * <p/> * The <code>pause()</code>/<code>resume()</code> operations are propagated to the <code>stream</code>. * @param size the initial record size * @param stream the wrapped stream * @return */ public static io.vertx.rxjava.core.parsetools.RecordParser newFixed(int size, Observable<io.vertx.rxjava.core.buffer.Buffer> stream) { io.vertx.rxjava.core.parsetools.RecordParser ret = io.vertx.rxjava.core.parsetools.RecordParser.newInstance(io.vertx.core.parsetools.RecordParser.newFixed(size, io.vertx.rx.java.ReadStreamSubscriber.asReadStream(stream,obj -> (io.vertx.core.buffer.Buffer)obj.getDelegate()).resume())); return ret; }
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()); }
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.pause(); parser.fetch(1); parser.handler(header -> readMagicNumber(header, parser)); parser.endHandler(v -> vertx.close()); }