Files
kiri-core/Console/Application.php
T

90 lines
1.6 KiB
PHP
Raw Normal View History

2020-08-31 01:27:08 +08:00
<?php
/**
* Created by PhpStorm.
* User: whwyy
* Date: 2018/10/7 0007
* Time: 2:16
*/
2020-09-03 00:15:57 +08:00
namespace Console;
2020-08-31 01:27:08 +08:00
2020-08-31 12:38:32 +08:00
use Snowflake\Abstracts\BaseApplication;
2020-08-31 01:27:08 +08:00
use Swoole\Coroutine\Channel;
use Swoole\Runtime;
use Swoole\Timer;
2020-08-31 12:38:32 +08:00
use Snowflake\Snowflake;
2020-08-31 01:27:08 +08:00
/**
* Class Application
2020-09-03 00:15:57 +08:00
* @package Console
2020-08-31 01:27:08 +08:00
*/
class Application extends BaseApplication
{
/**
* @var string
*/
public $id = 'uniqueId';
private $console;
/** @var Channel */
private $channel;
/**
* Application constructor.
* @param array $config
* @throws
*/
public function __construct(array $config = [])
{
parent::__construct($config);
$this->channel = new Channel(1);
$this->console = new Console($config);
}
/**
* @param $class
* @throws
*/
public function register($class)
{
if (is_string($class) || is_callable($class, true)) {
2020-08-31 12:38:32 +08:00
$class = Snowflake::createObject($class);
2020-08-31 01:27:08 +08:00
}
$this->console->signCommand($class);
}
/**
* @param null $kernel
* @return string|void
* @throws \Exception
*/
public function run($kernel = null)
{
try {
2020-08-31 12:38:32 +08:00
$kernel = make($kernel, Kernel::class);
2020-08-31 01:27:08 +08:00
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
$this->console->setParameters();
$this->console->batch($kernel);
$class = $this->console->search();
$params = response()->send($this->console->execCommand($class));
} catch (\Exception $exception) {
$params = response()->send(implode("\n", [
'Msg: ' . $exception->getMessage(),
'Line: ' . $exception->getLine(),
'File: ' . $exception->getFile()
]));
} finally {
Timer::clearAll();
return $params;
}
}
}