public function progressiveCall(string $uri, array $args = [], array $argskw = [], array $options = null): Observable
    {
        $options['receive_progress'] = true;

        return Observable::defer(function () use ($uri, $args, $argskw, $options) {
            $completed = new Subject();

            return $this->session
                ->takeUntil($completed)
                ->flatMapLatest(function ($res) use ($completed, $uri, $args, $argskw, $options) {
                    [$messages, $webSocket] = $res;
                    return (new CallObservable($uri, $messages, $webSocket, $args, $argskw, $options))
                        ->doOnCompleted(function () use ($completed) {
                            $completed->onNext(0);
                        });
                });
        });
    }