config = $config; $this->loop = $loop??Loop::get(); } public function start(): void { $this->server = new Server($this->config, []); $socket = new SocketServer("tcp://0.0.0.0:9000"); $this->server->listen($socket); } public function stop(): void { $this->loop->stop(); } public function abort(int $exitcode, ?string $message=null): void { $bt = debug_backtrace(limit:2); $bt = end($bt); fprintf(STDERR, "Abort: %s\n at %s:%d\n in %s\n", $message??"Unknown reason", $bt['file'], $bt['line'], ($bt['class']??null).($bt['type']??null).$bt['function']); $this->loop->stop(); register_shutdown_function(function () use ($exitcode) { exit($exitcode); }); } }