@Override protected RSocketServer newRSocket() { return new RSocketServer( connection, acceptingSocket, DefaultPayload::create, throwable -> errors.add(throwable)); }
private void cleanup() { if (keepAliveHandler != null) { keepAliveHandler.dispose(); } cleanUpSendingSubscriptions(); cleanUpChannelProcessors(); requestHandler.dispose(); sendProcessor.dispose(); }
switch (frame.getType()) { case REQUEST_FNF: handleFireAndForget(streamId, fireAndForget(frameDecoder.apply(frame))); break; case REQUEST_RESPONSE: handleRequestResponse(streamId, requestResponse(frameDecoder.apply(frame))); break; case CANCEL: handleCancelFrame(streamId); break; case KEEPALIVE: handleKeepAliveFrame(frame); break; case REQUEST_N: handleRequestN(streamId, frame); break; case REQUEST_STREAM: handleStream(streamId, requestStream(frameDecoder.apply(frame)), initialRequestN(frame)); break; case REQUEST_CHANNEL: handleChannel(streamId, frameDecoder.apply(frame), initialRequestN(frame)); break; case METADATA_PUSH: metadataPush(frameDecoder.apply(frame)); break; case PAYLOAD: handleError(streamId, new IllegalStateException("Setup frame received post setup.")); break;
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)); }
.doFinally( s -> { cleanup(); receiveDisposable.dispose(); })
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); }); }
.doFinally( s -> { cleanup(); receiveDisposable.dispose(); })
switch (frame.getType()) { case REQUEST_FNF: handleFireAndForget(streamId, fireAndForget(frameDecoder.apply(frame))); break; case REQUEST_RESPONSE: handleRequestResponse(streamId, requestResponse(frameDecoder.apply(frame))); break; case CANCEL: handleCancelFrame(streamId); break; case KEEPALIVE: handleKeepAliveFrame(frame); break; case REQUEST_N: handleRequestN(streamId, frame); break; case REQUEST_STREAM: handleStream(streamId, requestStream(frameDecoder.apply(frame)), initialRequestN(frame)); break; case REQUEST_CHANNEL: handleChannel(streamId, frameDecoder.apply(frame), initialRequestN(frame)); break; case METADATA_PUSH: metadataPush(frameDecoder.apply(frame)); break; case PAYLOAD: handleError(streamId, new IllegalStateException("Setup frame received post setup.")); break;
new RSocketServer( multiplexer.asServerConnection(), wrappedRSocketServer,
private void cleanup() { if (keepAliveHandler != null) { keepAliveHandler.dispose(); } cleanUpSendingSubscriptions(); cleanUpChannelProcessors(); requestHandler.dispose(); sendProcessor.dispose(); }
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)); }
static Supplier<TestData> responder(int tickPeriod, int timeout) { return () -> { TestDuplexConnection connection = new TestDuplexConnection(); AbstractRSocket handler = new AbstractRSocket() {}; Errors errors = new Errors(); RSocketServer rSocket = new RSocketServer( connection, handler, DefaultPayload::create, errors, tickPeriod, timeout); return new TestData(rSocket, errors, connection); }; }
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); }); }
new RSocketServer( serverConnection, requestAcceptor,
new RSocketServer( multiplexer.asClientConnection(), wrappedRSocketServer,
new RSocketServer( multiplexer.asServerConnection(), wrappedRSocketServer,
new RSocketServer( multiplexer.asClientConnection(), wrappedRSocketServer,