Rx\Operator\RepeatWhenOperator::__invoke PHP Method

__invoke() public method

public __invoke ( Rx\ObservableInterface $observable, Rx\ObserverInterface $observer, Rx\SchedulerInterface $scheduler = null )
$observable Rx\ObservableInterface
$observer Rx\ObserverInterface
$scheduler Rx\SchedulerInterface
    public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
    {
        $outerDisposable = new SerialDisposable();
        $this->disposable->add($outerDisposable);
        $subscribe = function () use($outerDisposable, $observable, $observer, $scheduler, &$subscribe) {
            $this->sourceComplete = false;
            $outerSubscription = $observable->subscribe(new CallbackObserver([$observer, "onNext"], [$observer, "onError"], function () use($observer, &$subscribe, $outerDisposable) {
                $this->sourceComplete = true;
                if (!$this->repeat) {
                    $observer->onCompleted();
                    return;
                }
                $outerDisposable->setDisposable(new EmptyDisposable());
                $this->completions->onNext(++$this->count);
            }), $scheduler);
            $outerDisposable->setDisposable($outerSubscription);
        };
        $notifierDisposable = $this->notifier->subscribe(new CallbackObserver(function () use(&$subscribe, $scheduler) {
            $subscribe();
        }, function ($ex) use($observer) {
            $this->repeat = false;
            $observer->onError($ex);
        }, function () use($observer) {
            $this->repeat = false;
            if ($this->sourceComplete) {
                $observer->onCompleted();
            }
        }), $scheduler);
        $this->disposable->add($notifierDisposable);
        try {
            $handled = call_user_func($this->notificationHandler, $this->completions->asObservable());
            $handledDisposable = $handled->subscribe($this->notifier, $scheduler);
            $this->disposable->add($handledDisposable);
        } catch (\Exception $e) {
            $observer->onError($e);
            return new EmptyDisposable();
        }
        $subscribe();
        return $this->disposable;
    }
RepeatWhenOperator