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

com.github.davidmoten.rx.internal.operators.TransformerLimitSubscribers Maven / Gradle / Ivy

package com.github.davidmoten.rx.internal.operators;

import java.util.concurrent.atomic.AtomicInteger;

import com.github.davidmoten.rx.exceptions.TooManySubscribersException;

import rx.Observable;
import rx.Observable.Transformer;
import rx.functions.Action0;

public final class TransformerLimitSubscribers implements Transformer {

    private final AtomicInteger subscriberCount;
    private final int maxSubscribers;

    public TransformerLimitSubscribers(AtomicInteger subscriberCount, int maxSubscribers) {
        this.subscriberCount = subscriberCount;
        this.maxSubscribers = maxSubscribers;
    }

    @Override
    public Observable call(Observable o) {
        return o.doOnSubscribe(onSubscribe()).doOnUnsubscribe(onUnsubscribe());
    }

    private Action0 onSubscribe() {
        return new Action0() {

            @Override
            public void call() {
                if (subscriberCount.incrementAndGet() > maxSubscribers)
                    throw new TooManySubscribersException();
            }
        };
    }

    private Action0 onUnsubscribe() {
        return new Action0() {

            @Override
            public void call() {
                subscriberCount.decrementAndGet();
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy