@Override public NettyOutbound sendObject(Publisher<?> dataStream) { return then(FutureMono.deferFuture(() -> ch.channel() .writeAndFlush(dataStream))); }
@Override public NettyOutbound sendObject(Publisher<?> dataStream) { return then(FutureMono.deferFuture(() -> ch.channel() .writeAndFlush(dataStream))); }
@Override public Mono<Void> send() { if (markSentHeaderAndBody()) { HttpMessage response = newFullEmptyBodyMessage(); return FutureMono.deferFuture(() -> channel().writeAndFlush(response)); } else { return Mono.empty(); } }
final Mono<Void> send() { if (markSentHeaderAndBody()) { HttpMessage request = newFullEmptyBodyMessage(); return FutureMono.deferFuture(() -> channel().writeAndFlush(request)); } else { return Mono.empty(); } }
final Mono<Void> send() { if (markSentHeaderAndBody()) { HttpMessage request = newFullEmptyBodyMessage(); return FutureMono.deferFuture(() -> channel().writeAndFlush(request)); } else { return Mono.empty(); } }
@Override public Mono<Void> send() { if (markSentHeaderAndBody()) { HttpMessage response = newFullEmptyBodyMessage(); return FutureMono.deferFuture(() -> channel().writeAndFlush(response)); } else { return Mono.empty(); } }
@Override public NettyOutbound sendObject(Object message) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(message)); return then(FutureMono.deferFuture(() -> connection.channel() .writeAndFlush(message))); }
@Override public NettyOutbound sendObject(Object message) { ch.onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(message)); return then(FutureMono.deferFuture(() -> ch.channel() .writeAndFlush(message))); }
@Override public NettyOutbound sendObject(Object message) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(message)); return then(FutureMono.deferFuture(() -> connection.channel() .writeAndFlush(message))); }
@Override public NettyOutbound sendObject(Object message) { ch.onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(message)); return then(FutureMono.deferFuture(() -> ch.channel() .writeAndFlush(message))); }
Mono<Void> sendClose(CloseWebSocketFrame frame) { if (CLOSE_SENT.get(this) == 0) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame)); return FutureMono.deferFuture(() -> { if (CLOSE_SENT.getAndSet(this, 1) == 0) { discard(); channel().pipeline().remove(NettyPipeline.ReactiveBridge); return channel().writeAndFlush(frame) .addListener(ChannelFutureListener.CLOSE); } frame.release(); return channel().newSucceededFuture(); }); } frame.release(); return Mono.empty(); }
Mono<Void> sendClose(CloseWebSocketFrame frame) { if (CLOSE_SENT.get(this) == 0) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame)); return FutureMono.deferFuture(() -> { if (CLOSE_SENT.getAndSet(this, 1) == 0) { discard(); channel().pipeline().remove(NettyPipeline.ReactiveBridge); return channel().writeAndFlush(frame) .addListener(ChannelFutureListener.CLOSE); } frame.release(); return channel().newSucceededFuture(); }); } frame.release(); return Mono.empty(); }
Mono<Void> sendClose(CloseWebSocketFrame frame) { if (CLOSE_SENT.get(this) == 0) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame)); return FutureMono.deferFuture(() -> { if (CLOSE_SENT.getAndSet(this, 1) == 0) { discard(); channel().pipeline().remove(NettyPipeline.ReactiveBridge); return channel().writeAndFlush(frame) .addListener(ChannelFutureListener.CLOSE); } frame.release(); return channel().newSucceededFuture(); }); } frame.release(); return Mono.empty(); }
Mono<Void> sendClose(CloseWebSocketFrame frame) { if (CLOSE_SENT.get(this) == 0) { onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame)); return FutureMono.deferFuture(() -> { if (CLOSE_SENT.getAndSet(this, 1) == 0) { discard(); channel().pipeline().remove(NettyPipeline.ReactiveBridge); return channel().writeAndFlush(frame) .addListener(ChannelFutureListener.CLOSE); } frame.release(); return channel().newSucceededFuture(); }); } frame.release(); return Mono.empty(); }
@Override public Flux<?> receiveObject() { // Handle the 'Expect: 100-continue' header if necessary. // TODO: Respond with 413 Request Entity Too Large // and discard the traffic or close the connection. // No need to notify the upstream handlers - just log. // If decoding a response, just throw an error. if (HttpUtil.is100ContinueExpected(nettyRequest)) { return FutureMono.deferFuture(() -> { if(!hasSentHeaders()) { return channel().writeAndFlush(CONTINUE); } return channel().newSucceededFuture(); }) .thenMany(super.receiveObject()); } else { return super.receiveObject(); } }
@Override public Flux<?> receiveObject() { // Handle the 'Expect: 100-continue' header if necessary. // TODO: Respond with 413 Request Entity Too Large // and discard the traffic or close the connection. // No need to notify the upstream handlers - just log. // If decoding a response, just throw an error. if (HttpUtil.is100ContinueExpected(nettyRequest)) { return FutureMono.deferFuture(() -> { if(!hasSentHeaders()) { return channel().writeAndFlush(CONTINUE); } return channel().newSucceededFuture(); }) .thenMany(super.receiveObject()); } else { return super.receiveObject(); } }
private void doTestPrefetchSize(int writeBufferLowWaterMark, int writeBufferHighWaterMark) { ChannelOperationsHandler handler = new ChannelOperationsHandler(null, null); EmbeddedChannel channel = new EmbeddedChannel(handler); channel.config() .setWriteBufferLowWaterMark(writeBufferLowWaterMark) .setWriteBufferHighWaterMark(writeBufferHighWaterMark); assertThat(handler.prefetch == (handler.inner.requested - handler.inner.produced)).isTrue(); StepVerifier.create(FutureMono.deferFuture(() -> channel.writeAndFlush(Flux.range(0, 70)))) .expectComplete() .verify(Duration.ofSeconds(30)); assertThat(handler.prefetch == (handler.inner.requested - handler.inner.produced)).isTrue(); }
@Override public Mono<Void> then() { if (hasSentHeaders()) { return Mono.empty(); } return FutureMono.deferFuture(() -> { if (markSentHeaders()) { HttpMessage msg; if (HttpUtil.isContentLengthSet(outboundHttpMessage())) { outboundHttpMessage().headers() .remove(HttpHeaderNames.TRANSFER_ENCODING); if (HttpUtil.getContentLength(outboundHttpMessage(), 0) == 0) { markSentBody(); msg = newFullEmptyBodyMessage(); } else { msg = outboundHttpMessage(); } } else { msg = outboundHttpMessage(); } preSendHeadersAndStatus(); return channel().writeAndFlush(msg); } else { return channel().newSucceededFuture(); } }); }
@Override public Mono<Void> then() { if (hasSentHeaders()) { return Mono.empty(); } return FutureMono.deferFuture(() -> { if (markSentHeaders()) { HttpMessage msg; if (HttpUtil.isContentLengthSet(outboundHttpMessage())) { outboundHttpMessage().headers() .remove(HttpHeaderNames.TRANSFER_ENCODING); if (HttpUtil.getContentLength(outboundHttpMessage(), 0) == 0) { markSentBody(); msg = newFullEmptyBodyMessage(); } else { msg = outboundHttpMessage(); } } else { msg = outboundHttpMessage(); } preSendHeadersAndStatus(); return channel().writeAndFlush(msg); } else { return channel().newSucceededFuture(); } }); }