private Subscribers getSubscribers(ReactiveSubscription it) { return subscriptions.computeIfAbsent(it, key -> new Subscribers()); }
/** * Return the currently active {@link ReactiveSubscription subscriptions}. * * @return {@link Set} of active {@link ReactiveSubscription} */ public Collection<ReactiveSubscription> getActiveSubscriptions() { return subscriptions.entrySet().stream().filter(entry -> entry.getValue().hasRegistration()) .map(entry -> entry.getKey()).collect(Collectors.toList()); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }
private Subscribers getSubscribers(ReactiveSubscription it) { return subscriptions.computeIfAbsent(it, key -> new Subscribers()); }
private Subscribers getSubscribers(ReactiveSubscription it) { return subscriptions.computeIfAbsent(it, key -> new Subscribers()); }
/** * Return the currently active {@link ReactiveSubscription subscriptions}. * * @return {@link Set} of active {@link ReactiveSubscription} */ public Collection<ReactiveSubscription> getActiveSubscriptions() { return subscriptions.entrySet().stream().filter(entry -> entry.getValue().hasRegistration()) .map(entry -> entry.getKey()).collect(Collectors.toList()); }
/** * Return the currently active {@link ReactiveSubscription subscriptions}. * * @return {@link Set} of active {@link ReactiveSubscription} */ public Collection<ReactiveSubscription> getActiveSubscriptions() { return subscriptions.entrySet().stream().filter(entry -> entry.getValue().hasRegistration()) .map(entry -> entry.getKey()).collect(Collectors.toList()); }
private <C, B> Flux<Message<C, B>> doReceive(SerializationPair<C> channelSerializer, SerializationPair<B> messageSerializer, Mono<ReactiveSubscription> subscription, ByteBuffer[] patterns, ByteBuffer[] channels) { Flux<Message<ByteBuffer, ByteBuffer>> messageStream = subscription.flatMapMany(it -> { Mono<Void> subscribe = subscribe(patterns, channels, it); MonoProcessor<ChannelMessage<ByteBuffer, ByteBuffer>> terminalProcessor = MonoProcessor.create(); return it.receive().mergeWith(subscribe.then(Mono.defer(() -> { getSubscribers(it).registered(); return Mono.empty(); }))).doOnCancel(() -> { Subscribers subscribers = getSubscribers(it); if (subscribers.unregister()) { subscriptions.remove(it); it.unsubscribe().subscribe(v -> terminalProcessor.onComplete(), terminalProcessor::onError); } }).mergeWith(terminalProcessor); }); return messageStream .map(message -> readMessage(channelSerializer.getReader(), messageSerializer.getReader(), message)); }