Kraken\Runtime\RuntimeModel::destroy PHP Method

destroy() public method

public destroy ( )
    public function destroy()
    {
        $state = $this->getState();
        if ($state === Runtime::STATE_DESTROYED) {
            return Promise::doResolve('Runtime has been already destroyed.');
        }
        $controller = $this;
        return $controller->stop()->then(function () {
            return Promise::doResolve()->then(function () {
                return $this->getRuntimeManager()->getRuntimes();
            })->then(function ($runtimes) {
                return $this->getRuntimeManager()->destroyRuntimes($runtimes, Runtime::DESTROY_FORCE);
            });
        })->then(function () use($controller) {
            $promise = new Promise();
            $emitter = $controller->getEventEmitter();
            $emitter->emit('beforeDestroy');
            $emitter->emit('destroy');
            $controller->getLoop()->onTick(function () use($controller, $promise) {
                $controller->setState(Runtime::STATE_DESTROYED);
                $controller->setLoopState(self::LOOP_STATE_STOPPED);
                $controller->stopLoop();
                $emitter = $controller->getEventEmitter();
                $emitter->emit('afterDestroy');
                $promise->resolve();
            });
            return $promise->then(function () {
                return 'Runtime has been destroyed.';
            });
        });
    }