This commit is contained in:
2021-04-12 16:38:40 +08:00
parent 779ec7e8d0
commit c316ef0202
8 changed files with 195 additions and 91 deletions
+8
View File
@@ -95,6 +95,14 @@ class Gii
$task = new GiiMiddleware(); $task = new GiiMiddleware();
$task->setInput($this->input); $task->setInput($this->input);
return $task->generate(); return $task->generate();
case 'rpc-client':
$task = new GiiRpcClient();
$task->setInput($this->input);
return $task->generate();
case 'rpc-service':
$task = new GiiRpcService();
$task->setInput($this->input);
return $task->generate();
default: default:
return $this->getModel($make, $input); return $this->getModel($make, $input);
} }
-87
View File
@@ -1,87 +0,0 @@
<?php
namespace Gii;
use Annotation\Inject;
use Snowflake\Abstracts\Config;
use Snowflake\Core\Json;
use Snowflake\Exception\ComponentException;
use Snowflake\Exception\ConfigException;
use Snowflake\Exception\NotFindClassException;
use Snowflake\Snowflake;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Class MakeGiiProviders
* @package Gii
*/
class GiiConsole extends Command
{
#[Inject(Gii::class)]
public ?Gii $gii = null;
public function configure()
{
$this->setName('sw:gii')
->setDescription('create default file.')
->setHelp('make=model|controller|task|interceptor|limits|middleware name=xxxx');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @throws \ReflectionException
* @throws NotFindClassException
*/
protected function initialize(InputInterface $input, OutputInterface $output)
{
$this->gii = Snowflake::createObject(Gii::class);
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
* @throws ComponentException
* @throws ConfigException
*/
public function execute(InputInterface $input, OutputInterface $output): int
{
$output->writeln('start generate. Please waite...');
$connections = Snowflake::app()->get('db');
if ($input->getArgument('databases')) {
$array = $this->gii->run($connections->get($input->getArgument('databases')), $input);
} else {
$array = $this->batchCreate($input, $this->gii, $connections);
}
$output->writeln('create file [' . Json::encode($array) . ']');
return 0;
}
/**
* @param InputInterface $input
* @param $gii
* @param $connections
* @return array
* @throws ConfigException
*/
private function batchCreate(InputInterface $input, $gii, $connections): array
{
$array = [];
foreach (Config::get('databases') as $key => $connection) {
$array[$key] = $gii->run($connections->get($key), $input);
}
return $array;
}
}
+1 -1
View File
@@ -88,7 +88,7 @@ class ' . $managerName . 'Interceptor implements Interceptor
if (file_exists($file)) { if (file_exists($file)) {
unlink($file); throw new Exception('File exists.');
} }
Snowflake::writeFile($file, $html); Snowflake::writeFile($file, $html);
+1 -1
View File
@@ -65,7 +65,7 @@ class ' . $managerName . 'Limits implements Limits
$file = APP_PATH . 'app/Http/Limits/' . $managerName . 'Limits.php'; $file = APP_PATH . 'app/Http/Limits/' . $managerName . 'Limits.php';
if (file_exists($file)) { if (file_exists($file)) {
unlink($file); throw new Exception('File exists.');
} }
Snowflake::writeFile($file, $html); Snowflake::writeFile($file, $html);
+1 -1
View File
@@ -62,7 +62,7 @@ class ' . $managerName . 'Middleware implements Middleware
$file = APP_PATH . 'app/Http/Middleware/' . $managerName . 'Middleware.php'; $file = APP_PATH . 'app/Http/Middleware/' . $managerName . 'Middleware.php';
if (file_exists($file)) { if (file_exists($file)) {
unlink($file); throw new Exception('File exists.');
} }
Snowflake::writeFile($file, $html); Snowflake::writeFile($file, $html);
+100
View File
@@ -0,0 +1,100 @@
<?php
namespace Gii;
use Exception;
use Snowflake\Snowflake;
/**
* Class GiiRpcClient
* @package Gii
*/
class GiiRpcClient extends GiiBase
{
/**
* @return array
* @throws Exception
*/
public function generate(): array
{
$managerName = $this->input->get('name', null);
if (empty($managerName)) {
throw new Exception('文件名称不能为空~');
}
$service = $this->input->get('service', strtolower($managerName));
$port = $this->input->get('port', 443);
$mode = $this->input->get('mode', 'SWOOLE_SOCK_TCP');
$html = '<?php
namespace App\Client\Rpc;
use Annotation\Rpc\Consumer;
use Annotation\Rpc\RpcClient;
use Annotation\Target;
use Exception;
use Rpc\Client;
use Snowflake\Core\Json;
use Snowflake\Snowflake;
';
$managerName = ucfirst($managerName);
$html .= '
/**
* Class ' . $managerName . 'Consumer
* @package App\Client\Rpc
*/
#[Target]
#[RpcClient(cmd: \'' . $service . '\', port: ' . $port . ', timeout: 1, mode: ' . $mode . ')]
class ' . $managerName . 'Consumer extends \Rpc\Consumer
{
public array $node = [\'host\' => \'127.0.0.1\', \'port\' => 5377];
/**
* @return Client
* @throws Exception
*/
public function initClient(): Client
{
// TODO: Implement initClient() method.
return $this->client = $this->rpc->getClient(\'' . $service . '\');
}
/**
* @param Users $users
* @param string $event
* @param array $params
* @throws Exception
*/
#[Consumer(\'default\')]
public function push(Users $users, string $event, array $params)
{
}
}';
if (!is_dir(APP_PATH . 'app/Client/Rpc/')) {
mkdir(APP_PATH . 'app/Client/Rpc/', 0777, true);
}
$file = APP_PATH . 'app/Client/Rpc/' . $managerName . 'Middleware.php';
if (file_exists($file)) {
throw new Exception('File exists.');
}
Snowflake::writeFile($file, $html);
return [$managerName . 'Middleware.php'];
}
}
+83
View File
@@ -0,0 +1,83 @@
<?php
namespace Gii;
use Exception;
use Snowflake\Snowflake;
/**
* Class GiiRpcClient
* @package Gii
*/
class GiiRpcService extends GiiBase
{
/**
* @return array
* @throws Exception
*/
public function generate(): array
{
$managerName = $this->input->get('name', null);
if (empty($managerName)) {
throw new Exception('文件名称不能为空~');
}
$service = $this->input->get('service', strtolower($managerName));
$port = $this->input->get('port', 443);
$html = '<?php
namespace App\Http\Rpc;
use Annotation\Route\RpcProducer;
use Annotation\Target;
use Exception;
use HttpServer\Controller;
use HttpServer\Exception\RequestException;
use Snowflake\Core\Json;
';
$managerName = ucfirst($managerName);
$html .= '
/**
* Class ' . $managerName . 'Consumer
* @package App\Client\Rpc
*/
#[Target]
class ' . $managerName . 'Producer extends Controller
{
/**
* @param Users $users
* @param string $event
* @param array $params
* @throws Exception
*/
#[RpcProducer(cmd: \'default\', port: ' . $port . ')]
public function actionIndex()
{
}
}';
if (!is_dir(APP_PATH . 'app/Http/Rpc/')) {
mkdir(APP_PATH . 'app/Http/Rpc/', 0777, true);
}
$file = APP_PATH . 'app/Http/Rpc/' . $managerName . 'Producer.php';
if (file_exists($file)) {
throw new Exception('File exists.');
}
Snowflake::writeFile($file, $html);
return [$managerName . 'Producer.php'];
}
}
+1 -1
View File
@@ -80,7 +80,7 @@ class ' . $managerName . ' implements Task
$file = APP_PATH . 'app/Async/' . $managerName . '.php'; $file = APP_PATH . 'app/Async/' . $managerName . '.php';
if (file_exists($file)) { if (file_exists($file)) {
unlink($file); throw new Exception('File exists.');
} }
Snowflake::writeFile($file, $html); Snowflake::writeFile($file, $html);