private void handleChannel(int streamId, Payload payload, int initialRequestN) { UnicastProcessor<Payload> frames = UnicastProcessor.create(); channelProcessors.put(streamId, frames); Flux<Payload> payloads = frames .doOnCancel(() -> sendProcessor.onNext(Frame.Cancel.from(streamId))) .doOnError(t -> sendProcessor.onNext(Frame.Error.from(streamId, t))) .doOnRequest(l -> sendProcessor.onNext(Frame.RequestN.from(streamId, l))) .doFinally(signalType -> channelProcessors.remove(streamId)); // not chained, as the payload should be enqueued in the Unicast processor before this method // returns // and any later payload can be processed frames.onNext(payload); handleStream(streamId, requestChannel(payloads), initialRequestN); }
private void handleChannel(int streamId, Payload payload, int initialRequestN) { UnicastProcessor<Payload> frames = UnicastProcessor.create(); channelProcessors.put(streamId, frames); Flux<Payload> payloads = frames .doOnCancel(() -> sendProcessor.onNext(Frame.Cancel.from(streamId))) .doOnError(t -> sendProcessor.onNext(Frame.Error.from(streamId, t))) .doOnRequest(l -> sendProcessor.onNext(Frame.RequestN.from(streamId, l))) .doFinally(signalType -> channelProcessors.remove(streamId)); // not chained, as the payload should be enqueued in the Unicast processor before this method // returns // and any later payload can be processed frames.onNext(payload); if (responderRSocket != null) { handleStream(streamId, requestChannel(payload, payloads), initialRequestN); } else { handleStream(streamId, requestChannel(payloads), initialRequestN); } }
private Mono<Void> handleChannel(int streamId, Frame firstFrame) { UnicastProcessor<Payload> frames = UnicastProcessor.create(); addChannelProcessor(streamId, frames); Flux<Payload> payloads = frames .doOnCancel(() -> { if (connection.availability() > 0.0) { connection.sendOne(Frame.Cancel.from(streamId)).subscribe(null, errorConsumer); } }) .doOnError(t -> { if (connection.availability() > 0.0) { connection.sendOne(Frame.Error.from(streamId, t)).subscribe(null, errorConsumer); } }) .doOnRequest(l -> { if (connection.availability() > 0.0) { connection.sendOne(Frame.RequestN.from(streamId, l)).subscribe(null, errorConsumer); } }) .doFinally(signalType -> { removeChannelProcessor(streamId); }); return handleStream(streamId, requestChannel(payloads), firstFrame); }