zhamao-framework/src/ZM/ConsoleApplication.php

125 lines
4.5 KiB
PHP
Raw Normal View History

2020-08-31 10:11:06 +08:00
<?php
namespace ZM;
use Exception;
2021-06-16 00:17:30 +08:00
use Phar;
use ZM\Command\BuildCommand;
use ZM\Command\CheckConfigCommand;
2021-06-16 00:17:30 +08:00
use ZM\Command\Daemon\DaemonReloadCommand;
use ZM\Command\Daemon\DaemonStatusCommand;
use ZM\Command\Daemon\DaemonStopCommand;
2021-07-04 15:45:30 +08:00
use ZM\Command\Generate\SystemdGenerateCommand;
2020-08-31 10:11:06 +08:00
use ZM\Command\InitCommand;
2021-06-16 00:17:30 +08:00
use ZM\Command\Module\ModuleListCommand;
use ZM\Command\Module\ModulePackCommand;
use ZM\Command\Module\ModuleUnpackCommand;
2020-09-29 15:07:43 +08:00
use ZM\Command\PureHttpCommand;
2020-08-31 10:11:06 +08:00
use ZM\Command\RunServerCommand;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
2021-07-04 15:45:30 +08:00
use ZM\Exception\InitException;
2020-08-31 10:11:06 +08:00
class ConsoleApplication extends Application
{
2021-07-04 15:45:30 +08:00
private static $obj = null;
2021-11-10 14:07:21 +08:00
const VERSION_ID = 426;
const VERSION = "2.5.8";
2021-07-04 15:45:30 +08:00
/**
* @throws InitException
*/
public function __construct(string $name = 'UNKNOWN') {
2021-07-04 15:45:30 +08:00
if (self::$obj !== null) throw new InitException(zm_internal_errcode("E00069") . "Initializing another Application is not allowed!");
define("ZM_VERSION_ID", self::VERSION_ID);
define("ZM_VERSION", self::VERSION);
2021-07-04 15:45:30 +08:00
self::$obj = $this;
parent::__construct($name, ZM_VERSION);
2020-08-31 10:11:06 +08:00
}
2021-07-04 15:45:30 +08:00
/**
2021-09-01 14:14:00 +08:00
* @param string $with_default_cmd
* @return ConsoleApplication
2021-07-04 15:45:30 +08:00
* @throws InitException
*/
public function initEnv($with_default_cmd = ""): ConsoleApplication {
2021-07-04 15:45:30 +08:00
if (defined("WORKDING_DIR")) throw new InitException();
2021-11-02 16:01:24 +08:00
_zm_env_check();
define("WORKING_DIR", getcwd());
2021-06-16 00:17:30 +08:00
if (Phar::running() !== "") {
echo "* Running in phar mode.\n";
define("SOURCE_ROOT_DIR", Phar::running());
define("LOAD_MODE", is_dir(SOURCE_ROOT_DIR . "/src/ZM") ? 0 : 1);
define("FRAMEWORK_ROOT_DIR", LOAD_MODE == 1 ? (SOURCE_ROOT_DIR . "/vendor/zhamao/framework") : SOURCE_ROOT_DIR);
} else {
define("SOURCE_ROOT_DIR", WORKING_DIR);
define("LOAD_MODE", is_dir(SOURCE_ROOT_DIR . "/src/ZM") ? 0 : 1);
define("FRAMEWORK_ROOT_DIR", realpath(__DIR__ . "/../../"));
}
if (LOAD_MODE == 0) {
2021-06-16 00:17:30 +08:00
$composer = json_decode(file_get_contents(SOURCE_ROOT_DIR . "/composer.json"), true);
if (!isset($composer["autoload"]["psr-4"]["Module\\"])) {
echo "框架源码模式需要在autoload文件中添加Module目录为自动加载是否添加[Y/n] ";
$r = strtolower(trim(fgets(STDIN)));
if ($r === "" || $r === "y") {
$composer["autoload"]["psr-4"]["Module\\"] = "src/Module";
$composer["autoload"]["psr-4"]["Custom\\"] = "src/Custom";
$r = file_put_contents(WORKING_DIR . "/composer.json", json_encode($composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
if ($r !== false) {
echo "成功添加!请运行 composer dump-autoload \n";
exit(0);
} else {
2021-06-16 00:17:30 +08:00
echo zm_internal_errcode("E00006") . "添加失败!请按任意键继续!";
fgets(STDIN);
exit(1);
}
} else {
exit(1);
}
}
2020-09-29 15:07:43 +08:00
}
$this->addCommands([
new DaemonStatusCommand(),
new DaemonReloadCommand(),
new DaemonStopCommand(),
new RunServerCommand(), //运行主服务的指令控制器
new PureHttpCommand(), //纯HTTP服务器指令
2021-07-04 15:45:30 +08:00
new SystemdGenerateCommand()
]);
if (LOAD_MODE === 1) {
$this->add(new CheckConfigCommand());
}
2021-06-16 00:17:30 +08:00
if (Phar::running() === "") {
$this->add(new BuildCommand());
$this->add(new InitCommand());
$this->add(new ModulePackCommand());
$this->add(new ModuleListCommand());
$this->add(new ModuleUnpackCommand());
}
if (!empty($with_default_cmd)) {
$this->setDefaultCommand($with_default_cmd);
}
return $this;
2020-08-31 10:11:06 +08:00
}
/**
* @param InputInterface|null $input
* @param OutputInterface|null $output
* @return int
*/
public function run(InputInterface $input = null, OutputInterface $output = null): int {
2020-08-31 10:11:06 +08:00
try {
return parent::run($input, $output);
} catch (Exception $e) {
2021-06-16 00:17:30 +08:00
die(zm_internal_errcode("E00005") . "{$e->getMessage()} at {$e->getFile()}({$e->getLine()})");
2020-08-31 10:11:06 +08:00
}
}
}