Files
kiri-core/Console/Application.php
T
2020-09-03 00:53:19 +08:00

90 lines
1.5 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: whwyy
* Date: 2018/10/7 0007
* Time: 2:16
*/
namespace Console;
use Snowflake\Abstracts\Component;
use Swoole\Coroutine\Channel;
use Swoole\Runtime;
use Swoole\Timer;
use Snowflake\Snowflake;
/**
* Class Application
* @package Console
*/
class Application extends Component
{
/**
* @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)) {
$class = Snowflake::createObject($class);
}
$this->console->signCommand($class);
}
/**
* @param null $kernel
* @return string|void
* @throws \Exception
*/
public function run($kernel = null)
{
try {
$kernel = make($kernel, Kernel::class);
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;
}
}
}