All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mutiny.zero.operators.ProcessorBase Maven / Gradle / Ivy

Go to download

Mutiny Zero is a minimal API for creating reactive-streams compliant publishers

There is a newer version: 1.1.1
Show newest version
package mutiny.zero.operators;

import java.util.concurrent.Flow;
import java.util.concurrent.atomic.AtomicBoolean;

abstract class ProcessorBase implements Flow.Processor, Flow.Subscription {

    private Flow.Subscriber downstream;
    private Flow.Subscription upstreamSubscription;

    private final AtomicBoolean cancelled = new AtomicBoolean();

    protected boolean cancelled() {
        return cancelled.get();
    }

    protected Flow.Subscriber downstream() {
        return downstream;
    }

    // ---- Publisher

    @Override
    public void subscribe(Flow.Subscriber subscriber) {
        downstream = subscriber;
    }

    // ---- Subscriber

    @Override
    public void onSubscribe(Flow.Subscription subscription) {
        this.upstreamSubscription = subscription;
        downstream.onSubscribe(this);
    }

    @Override
    public void onError(Throwable throwable) {
        if (!cancelled()) {
            cancel();
            downstream.onError(throwable);
        }
    }

    @Override
    public void onComplete() {
        if (!cancelled()) {
            downstream.onComplete();
        }
    }

    // ---- Subscription

    @Override
    public void request(long n) {
        if (!cancelled()) {
            upstreamSubscription.request(n);
        }
    }

    @Override
    public void cancel() {
        if (cancelled.compareAndSet(false, true)) {
            upstreamSubscription.cancel();
            upstreamSubscription = null;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy