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)); }
handleError(streamId, new IllegalStateException("Setup frame received post setup.")); break; default: handleError( streamId, new IllegalStateException(
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)); }
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); }); }
handleError(streamId, new IllegalStateException("Setup frame received post setup.")); break; default: handleError( streamId, new IllegalStateException(