/** * @override * @inheritDoc */ protected function command($params = []) { $runtime = $this->runtime; $promise = new Promise(); $runtime->once('destroy', function () use($promise) { $promise->resolve('Runtime has been destroyed'); }); $runtime->destroy()->then(null, function ($ex) use($promise) { $promise->reject($ex); }, function ($ex) use($promise) { $promise->cancel($ex); }); return $promise; }
/** * @override * @inheritDoc */ 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.'; }); }); }