Skip to content

Commit a7a60ba

Browse files
committed
reduces maintenance complexity
this PR 1. removes set of unused classes 2. eliminate usage of custom publishers implementation if favor of better maintainability but sacrificing performance (1.1 will revise that) Signed-off-by: Oleh Dokuka <[email protected]>
1 parent d3dc85f commit a7a60ba

21 files changed

+39
-4636
lines changed

rsocket-core/src/main/java/io/rsocket/core/RSocketRequester.java

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,18 @@
4545
import io.rsocket.frame.decoder.PayloadDecoder;
4646
import io.rsocket.internal.SynchronizedIntObjectHashMap;
4747
import io.rsocket.internal.UnboundedProcessor;
48-
import io.rsocket.internal.UnicastMonoEmpty;
49-
import io.rsocket.internal.UnicastMonoProcessor;
5048
import io.rsocket.keepalive.KeepAliveFramesAcceptor;
5149
import io.rsocket.keepalive.KeepAliveHandler;
5250
import io.rsocket.keepalive.KeepAliveSupport;
5351
import io.rsocket.lease.RequesterLeaseHandler;
54-
import io.rsocket.util.MonoLifecycleHandler;
5552
import java.nio.channels.ClosedChannelException;
53+
import java.util.Queue;
5654
import java.util.concurrent.CancellationException;
5755
import java.util.concurrent.atomic.AtomicInteger;
5856
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
5957
import java.util.function.Consumer;
6058
import java.util.function.LongConsumer;
6159
import java.util.function.Supplier;
62-
import javax.annotation.Nonnull;
6360
import javax.annotation.Nullable;
6461
import org.reactivestreams.Processor;
6562
import org.reactivestreams.Publisher;
@@ -92,6 +89,8 @@ class RSocketRequester implements RSocket {
9289
}
9390
};
9491

92+
private static final Queue<Void> EMPTY_QUEUE = Queues.<Void>empty().get();
93+
9594
static {
9695
CLOSED_CHANNEL_EXCEPTION.setStackTrace(new StackTraceElement[0]);
9796
}
@@ -212,14 +211,16 @@ private Mono<Void> handleFireAndForget(Payload payload) {
212211

213212
final int streamId = streamIdSupplier.nextStreamId(receivers);
214213

215-
return UnicastMonoEmpty.newInstance(
216-
() -> {
217-
ByteBuf requestFrame =
218-
RequestFireAndForgetFrameFlyweight.encodeReleasingPayload(
219-
allocator, streamId, payload);
214+
return UnicastProcessor.create(EMPTY_QUEUE)
215+
.doOnSubscribe(
216+
(__) -> {
217+
ByteBuf requestFrame =
218+
RequestFireAndForgetFrameFlyweight.encodeReleasingPayload(
219+
allocator, streamId, payload);
220220

221-
sendProcessor.onNext(requestFrame);
222-
});
221+
sendProcessor.onNext(requestFrame);
222+
})
223+
.then();
223224
}
224225

225226
private Mono<Payload> handleRequestResponse(final Payload payload) {
@@ -236,34 +237,28 @@ private Mono<Payload> handleRequestResponse(final Payload payload) {
236237

237238
int streamId = streamIdSupplier.nextStreamId(receivers);
238239
final UnboundedProcessor<ByteBuf> sendProcessor = this.sendProcessor;
239-
240-
UnicastMonoProcessor<Payload> receiver =
241-
UnicastMonoProcessor.create(
242-
new MonoLifecycleHandler<Payload>() {
243-
@Override
244-
public void doOnSubscribe() {
245-
final ByteBuf requestFrame =
246-
RequestResponseFrameFlyweight.encodeReleasingPayload(
247-
allocator, streamId, payload);
248-
249-
sendProcessor.onNext(requestFrame);
250-
}
251-
252-
@Override
253-
public void doOnTerminal(
254-
@Nonnull SignalType signalType,
255-
@Nullable Payload element,
256-
@Nullable Throwable e) {
257-
if (signalType == SignalType.CANCEL) {
258-
sendProcessor.onNext(CancelFrameFlyweight.encode(allocator, streamId));
259-
}
260-
removeStreamReceiver(streamId);
261-
}
262-
});
240+
final UnicastProcessor<Payload> receiver = UnicastProcessor.create(Queues.<Payload>one().get());
263241

264242
receivers.put(streamId, receiver);
265243

266-
return receiver.doOnDiscard(ReferenceCounted.class, DROPPED_ELEMENTS_CONSUMER);
244+
return receiver
245+
.as(Mono::fromDirect)
246+
.doOnSubscribe(
247+
(__) -> {
248+
ByteBuf requestFrame =
249+
RequestResponseFrameFlyweight.encodeReleasingPayload(
250+
allocator, streamId, payload);
251+
252+
sendProcessor.onNext(requestFrame);
253+
})
254+
.doFinally(
255+
signalType -> {
256+
if (signalType == SignalType.CANCEL) {
257+
sendProcessor.onNext(CancelFrameFlyweight.encode(allocator, streamId));
258+
}
259+
removeStreamReceiver(streamId);
260+
})
261+
.doOnDiscard(ReferenceCounted.class, DROPPED_ELEMENTS_CONSUMER);
267262
}
268263

269264
private Flux<Payload> handleRequestStream(final Payload payload) {
@@ -522,13 +517,15 @@ private Mono<Void> handleMetadataPush(Payload payload) {
522517
return Mono.error(new IllegalArgumentException(INVALID_PAYLOAD_ERROR_MESSAGE));
523518
}
524519

525-
return UnicastMonoEmpty.newInstance(
526-
() -> {
527-
ByteBuf metadataPushFrame =
528-
MetadataPushFrameFlyweight.encodeReleasingPayload(allocator, payload);
520+
return UnicastProcessor.create(EMPTY_QUEUE)
521+
.doOnSubscribe(
522+
(__) -> {
523+
ByteBuf metadataPushFrame =
524+
MetadataPushFrameFlyweight.encodeReleasingPayload(allocator, payload);
529525

530-
sendProcessor.onNextPrioritized(metadataPushFrame);
531-
});
526+
sendProcessor.onNextPrioritized(metadataPushFrame);
527+
})
528+
.then();
532529
}
533530

534531
@Nullable

0 commit comments

Comments
 (0)