Fix backpressure problem with reactor
This commit is contained in:
parent
4c7a351be4
commit
a87149f626
|
@ -1,9 +1,15 @@
|
||||||
package it.tdlight.tdlibsession.td;
|
package it.tdlight.tdlibsession.td;
|
||||||
|
|
||||||
|
import it.tdlight.common.ReactiveItem;
|
||||||
import it.tdlight.common.ReactiveTelegramClient;
|
import it.tdlight.common.ReactiveTelegramClient;
|
||||||
import it.tdlight.jni.TdApi;
|
import it.tdlight.jni.TdApi;
|
||||||
import it.tdlight.utils.MonoUtils;
|
import it.tdlight.utils.MonoUtils;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.reactivestreams.Subscriber;
|
||||||
|
import org.reactivestreams.Subscription;
|
||||||
|
import reactor.core.CoreSubscriber;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.FluxSink.OverflowStrategy;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
public class WrappedReactorTelegramClient implements ReactorTelegramClient {
|
public class WrappedReactorTelegramClient implements ReactorTelegramClient {
|
||||||
|
@ -23,7 +29,28 @@ public class WrappedReactorTelegramClient implements ReactorTelegramClient {
|
||||||
@Override
|
@Override
|
||||||
public Flux<TdApi.Object> receive() {
|
public Flux<TdApi.Object> receive() {
|
||||||
return Flux
|
return Flux
|
||||||
.from(reactiveTelegramClient)
|
.<ReactiveItem>create(sink -> reactiveTelegramClient.subscribe(new CoreSubscriber<>() {
|
||||||
|
@Override
|
||||||
|
public void onSubscribe(@NotNull Subscription s) {
|
||||||
|
sink.onCancel(s::cancel);
|
||||||
|
sink.onRequest(s::request);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNext(ReactiveItem reactiveItem) {
|
||||||
|
sink.next(reactiveItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable t) {
|
||||||
|
sink.error(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
sink.complete();
|
||||||
|
}
|
||||||
|
}), OverflowStrategy.BUFFER)
|
||||||
.handle((item, sink) -> {
|
.handle((item, sink) -> {
|
||||||
if (item.isUpdate()) {
|
if (item.isUpdate()) {
|
||||||
sink.next(item.getUpdate());
|
sink.next(item.getUpdate());
|
||||||
|
|
Loading…
Reference in New Issue