#!/usr/bin/php <?php $internalUse = $argv[1] ?? null; if ($internalUse !== "--internal-use") exit("Wrong args"); $paramsfile = $argv[2] ?? null; if (!file_exists($paramsfile)) exit("Bad params file"); $argc -= 2; $argv = array_merge( array_slice($argv, 0, 1), array_slice($argv, 3), ); $app_params = unserialize(file_get_contents($paramsfile)); @unlink($paramsfile); require $app_params["vendor"]["autoload"]; use nur\cli\Application; use nur\sery\output\msg; use nur\sery\wip\app\app; use nur\sery\app\launcher; use nur\yaml; class _LaunchApp extends Application { const NAME = "_launch"; const USE_LOGFILE = true; const ACTION_INFOS = 0, ACTION_START = 1, ACTION_STOP = 2; const ARGS = [ "merge" => parent::ARGS, "purpose" => "lancer une tâche de fond", "usage" => "ApplicationClass args...", ["-s", "--start", "name" => "action", "value" => self::ACTION_START, "help" => "démarrer la tâche, c'est la valeur par défaut" ], ["-k", "--stop", "name" => "action", "value" => self::ACTION_STOP, "help" => "arrêter la tâche" ], ["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS, "help" => "afficher des informations sur la tâche" ], ]; protected $action = self::ACTION_START; protected $args; function main() { $appClass = $this->args[0] ?? null; if ($appClass === null) { msg::error("Vous devez spécifier la classe de l'application"); self::die(); } elseif (!class_exists($appClass)) { msg::error("$appClass: Cette classe n'existe pas"); self::die(); } $args = array_slice($this->args, 1); $useRunfile = constant("$appClass::USE_RUNFILE"); if (!$useRunfile) { msg::error("Cette application ne supporte pas l'usage de runfile"); self::die(); } $runfile = app::with($appClass, self::$internal_use_app_params)->getRunfile(); switch ($this->action) { case self::ACTION_START: launcher::_start($args, $runfile); break; case self::ACTION_STOP: launcher::_stop($runfile); break; case self::ACTION_INFOS: yaml::dump($runfile->read()); break; } } } _LaunchApp::internal_use_set_app_params($app_params); _LaunchApp::run();