update to 3.0.0-alpha2 (build 610): refactor driver

This commit is contained in:
crazywhalecc
2022-08-01 16:31:54 +08:00
committed by Jerry Ma
parent f2a12634a4
commit 41b058aeaf
186 changed files with 1922 additions and 15444 deletions

View File

@@ -4,24 +4,24 @@ declare(strict_types=1);
namespace ZM\Command\Server;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use ZM\Exception\ConfigException;
use ZM\Exception\InitException;
use ZM\Exception\ZMKnownException;
use ZM\Framework;
use ZM\Utils\Manager\ProcessManager;
use ZM\Process\ProcessStateManager;
class ServerStartCommand extends ServerCommand
{
protected static $defaultName = 'server';
public static function exportDefinition(): InputDefinition
public static function exportOptionArray(): array
{
$cmd = new self();
$cmd->configure();
return $cmd->getDefinition();
return array_map(function ($x) { return $x->getDefault(); }, $cmd->getDefinition()->getOptions());
}
protected function configure()
@@ -29,7 +29,10 @@ class ServerStartCommand extends ServerCommand
$this->setAliases(['server:start']);
$this->setDefinition([
new InputOption('debug-mode', 'D', null, '开启调试模式 (这将关闭协程化)'),
new InputOption('config-dir', null, InputOption::VALUE_REQUIRED, '指定其他配置文件目录'),
new InputOption('driver', null, InputOption::VALUE_REQUIRED, '指定驱动类型'),
new InputOption('log-debug', null, null, '调整消息等级到debug (log-level=4)'),
new InputOption('log-level', null, InputOption::VALUE_REQUIRED, '调整消息等级到debug (log-level=4)'),
new InputOption('log-verbose', null, null, '调整消息等级到verbose (log-level=3)'),
new InputOption('log-info', null, null, '调整消息等级到info (log-level=2)'),
new InputOption('log-warning', null, null, '调整消息等级到warning (log-level=1)'),
@@ -59,22 +62,26 @@ class ServerStartCommand extends ServerCommand
/**
* @throws ZMKnownException
* @throws ConfigException
* @throws ConfigException|InitException
* @noinspection PhpComposerExtensionStubsInspection
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
if (($opt = $input->getOption('env')) !== null) {
// 这段用于config的环境解析但显然不是很好的方式应该改成一个独立的方法不应该在这里检查但暂时搁置TODO
/* if (($opt = $input->getOption('env')) !== null) {
if (!in_array($opt, ['production', 'staging', 'development', ''])) {
$output->writeln('<error> "--env" option only accept production, development, staging and [empty] ! </error>');
return 1;
}
}
$state = ProcessManager::getProcessState(ZM_PROCESS_MASTER);
if (!$input->getOption('no-state-check')) {
if (is_array($state) && posix_getsid($state['pid'] ?? -1) !== false) {
$output->writeln("<error>检测到已经在 pid: {$state['pid']} 进程启动了框架!</error>");
$output->writeln('<error>不可以同时启动两个框架!</error>');
return 1;
}*/
if (\OneBot\Driver\Process\ProcessManager::isSupportedMultiProcess()) {
$state = ProcessStateManager::getProcessState(ZM_PROCESS_MASTER);
if (!$input->getOption('no-state-check')) {
if (is_array($state) && posix_getsid($state['pid'] ?? -1) !== false) {
$output->writeln("<error>检测到已经在 pid: {$state['pid']} 进程启动了框架!</error>");
$output->writeln('<error>不可以同时启动两个框架!</error>');
return 1;
}
}
}
(new Framework($input->getOptions()))->start();