setName('sw:server') ->setDescription('server start|stop|reload|restart') ->addArgument('action', InputArgument::OPTIONAL, 'run action', 'start') ->addOption('daemon', 'd', InputOption::VALUE_OPTIONAL, 'is run daemonize'); } /** * @param InputInterface $input * @param OutputInterface $output * @return int * @throws ConfigException * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface * @throws ReflectionException * @throws Exception */ public function execute(InputInterface $input, OutputInterface $output): int { return match ($input->getArgument('action')) { 'restart' => $this->restart($input), 'stop' => $this->stop(), 'start' => $this->start($input), default => throw new Exception('I don\'t know what I want to do.') }; } /** * @param InputInterface $input * @return int * @throws ConfigException * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface|ReflectionException */ protected function restart(InputInterface $input): int { $this->stop(); $this->start($input); return 1; } /** * @return int * @throws ConfigException * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ protected function stop(): int { $manager = Kiri::app()->getServer(); $manager->shutdown(); return 1; } /** * @param InputInterface $input * @return int * @throws ConfigException * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface|ReflectionException */ protected function start(InputInterface $input): int { $this->scan_file(); $manager = Kiri::app()->getServer(); $manager->setDaemon((int)!is_null($input->getOption('daemon'))); $manager->start(); return 1; } /** * @return void * @throws ConfigException * @throws ReflectionException */ protected function scan_file(): void { $config = Config::get('reload.scanner', []); if (is_array($config)) foreach ($config as $key => $value) { scan_directory($value, $key); } } }