protected function doStart(Console $console) : \Generator
{
// Shutdown the whole server in case we needed to stop during startup
register_shutdown_function(function () use($console) {
if (!$this->server) {
// ensure a clean reactor for clean shutdown
$reactor = \Amp\reactor();
$filesystem = \Amp\File\filesystem();
\Amp\reactor(\Amp\driver());
\Amp\File\filesystem(\Amp\File\driver());
\Amp\wait((new CommandClient((string) $console->getArg("config")))->stop());
\Amp\File\filesystem($filesystem);
\Amp\reactor($reactor);
}
});
$server = (yield from $this->bootstrapper->boot($this->logger, $console));
(yield $server->start());
$this->server = $server;
\Amp\onReadable($this->ipcSock, function ($watcherId) {
\Amp\cancel($watcherId);
yield from $this->stop();
});
}