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); } }