/**
  * @param InputInterface $input
  * @param OutputInterface $output
  * @return int
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     if (!$this->checkPidFile()) {
         $output->write('Error: server is already running, exiting');
         return 1;
     }
     /** @var CoreBuilder $builder */
     $builder = new CoreBuilder($this->config, $this->argParser);
     if (!$this->checkSlackConnection()) {
         $output->writeln('Cannot connect to Slack, exiting.');
         $output->writeln(sprintf('Slack reports: <error>%s</error>', Ar::get($this->testResponse, 'error')));
         return 1;
     }
     /** @var \CapMousse\ReactRestify\Server $server */
     $server = $builder->buildServer();
     $this->runServer($server);
 }
 /**
  * Configures console application
  */
 public function bootstrap()
 {
     $coreBuilder = new CoreBuilder();
     $this->container = $coreBuilder->buildContainer($this->argParser, $this->config);
     $coreBuilder->buildLogger($this->container);
     Registry::set('container', $this->container);
     $this->app = new ConsoleApp('CMS Slack Bot', '@package_version@');
     $this->app->add(new commands\ServerStartCommand($this->container['config'], $this->container['argv_parser']));
     $this->app->add(new commands\ServerStopCommand($this->container['config']));
     $this->app->add(new commands\ServerStatusCommand($this->container['config']));
     $this->app->add(new commands\PlaybookRunCommand($this->container['curl_request'], $this->container['variables_placer'], $this->container['file_loader']));
     $this->app->add(new commands\RtmStartCommand($this->config, $this->container['curl_request']));
     $this->app->add(new commands\RtmStopCommand($this->container['config']));
     $this->app->add(new commands\CronWorkerCommand($this->container['curl_request'], $this->container['cron_expression'], $this->container['file_loader']));
     $this->app->add(new commands\ApiStubStartCommand());
     $this->app->add(new commands\RtmStubStartCommand());
 }