private void handleStream(int streamId, Flux<Payload> response, int initialRequestN) { response .transform( frameFlux -> { LimitableRequestPublisher<Payload> payloads = LimitableRequestPublisher.wrap(frameFlux); sendingSubscriptions.put(streamId, payloads); payloads.increaseRequestLimit(initialRequestN); return payloads; }) .doFinally(signalType -> sendingSubscriptions.remove(streamId)) .subscribe( payload -> { final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.NEXT, payload); payload.release(); sendProcessor.onNext(frame); }, t -> handleError(streamId, t), () -> { final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.COMPLETE); sendProcessor.onNext(frame); }); }
private void handleRequestResponse(int streamId, Mono<Payload> response) { response .doOnSubscribe(subscription -> sendingSubscriptions.put(streamId, subscription)) .map( payload -> { int flags = FLAGS_C; if (payload.hasMetadata()) { flags = Frame.setFlag(flags, FLAGS_M); } final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.NEXT_COMPLETE, payload, flags); payload.release(); return frame; }) .switchIfEmpty( Mono.fromCallable(() -> Frame.PayloadFrame.from(streamId, FrameType.COMPLETE))) .doFinally(signalType -> sendingSubscriptions.remove(streamId)) .subscribe(sendProcessor::onNext, t -> handleError(streamId, t)); }
public static Frame from(int streamId, FrameType type) { return from(streamId, type, null, Unpooled.EMPTY_BUFFER, 0); }
public static Frame from(int streamId, FrameType type, Payload payload) { return from(streamId, type, payload, payload.hasMetadata() ? FLAGS_M : 0); }
public static Frame from(int streamId, FrameType type, Payload payload, int flags) { final ByteBuf metadata = payload.hasMetadata() ? payload.sliceMetadata() : null; final ByteBuf data = payload.sliceData(); return from(streamId, type, metadata, data, flags); }
private void handleStream(int streamId, Flux<Payload> response, int initialRequestN) { response .transform( frameFlux -> { LimitableRequestPublisher<Payload> payloads = LimitableRequestPublisher.wrap(frameFlux); sendingSubscriptions.put(streamId, payloads); payloads.increaseRequestLimit(initialRequestN); return payloads; }) .doFinally(signalType -> sendingSubscriptions.remove(streamId)) .subscribe( payload -> { final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.NEXT, payload); payload.release(); sendProcessor.onNext(frame); }, t -> handleError(streamId, t), () -> { final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.COMPLETE); sendProcessor.onNext(frame); }); }
private void handleRequestResponse(int streamId, Mono<Payload> response) { response .doOnSubscribe(subscription -> sendingSubscriptions.put(streamId, subscription)) .map( payload -> { int flags = FLAGS_C; if (payload.hasMetadata()) { flags = Frame.setFlag(flags, FLAGS_M); } final Frame frame = Frame.PayloadFrame.from(streamId, FrameType.NEXT_COMPLETE, payload, flags); payload.release(); return frame; }) .switchIfEmpty( Mono.fromCallable(() -> Frame.PayloadFrame.from(streamId, FrameType.COMPLETE))) .doFinally(signalType -> sendingSubscriptions.remove(streamId)) .subscribe(sendProcessor::onNext, t -> handleError(streamId, t)); }
public static Frame from(int streamId, FrameType type) { return from(streamId, type, null, Unpooled.EMPTY_BUFFER, 0); }
public static Frame from(int streamId, FrameType type, Payload payload) { return from(streamId, type, payload, payload.hasMetadata() ? FLAGS_M : 0); }
@Test(timeout = 2_000) public void testHandleValidFrame() { Publisher<Payload> response = rule.socket.requestResponse(EmptyPayload.INSTANCE); Subscriber<Payload> sub = TestSubscriber.create(); response.subscribe(sub); int streamId = rule.getStreamIdForRequestType(REQUEST_RESPONSE); rule.connection.addToReceivedBuffer( Frame.PayloadFrame.from(streamId, NEXT_COMPLETE, EmptyPayload.INSTANCE)); verify(sub).onNext(anyPayload()); verify(sub).onComplete(); }
public int sendRequestResponse(Publisher<Payload> response) { Subscriber<Payload> sub = TestSubscriber.create(); response.subscribe(sub); int streamId = rule.getStreamIdForRequestType(REQUEST_RESPONSE); rule.connection.addToReceivedBuffer( Frame.PayloadFrame.from(streamId, NEXT_COMPLETE, EmptyPayload.INSTANCE)); verify(sub).onNext(anyPayload()); verify(sub).onComplete(); return streamId; }
public static Frame from(int streamId, FrameType type, Payload payload, int flags) { final ByteBuf metadata = payload.hasMetadata() ? payload.sliceMetadata() : null; final ByteBuf data = payload.sliceData(); return from(streamId, type, metadata, data, flags); }
@Test public void testPayload() { Frame frame = Frame.PayloadFrame.from( 1, FrameType.NEXT_COMPLETE, DefaultPayload.create("Hello"), FrameHeaderFlyweight.FLAGS_C); frame.toString(); } }