From da6000b4daea4eeaa18fb02c7ad36d86eca0f4c6 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 14 Aug 2022 18:24:59 +0800 Subject: [PATCH] fix container and coroutine --- composer.json | 5 ++- phpstan.neon | 1 + src/Globals/global_functions.php | 31 +++++++++++++++++++ .../Container/ContainerServicesProvider.php | 4 +-- src/ZM/Event/Listener/HttpEventListener.php | 1 + src/ZM/Utils/ZMUtil.php | 5 +-- 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index e533ab30..6e74c515 100644 --- a/composer.json +++ b/composer.json @@ -17,17 +17,16 @@ "ext-json": "*", "doctrine/dbal": "^2.13.1", "dragonmantank/cron-expression": "^3.3", - "jasny/phpdoc-parser": "^1.0", "jelix/version": "^2.0", "koriym/attributes": "^1.0", - "onebot/libonebot": "dev-develop", "psr/container": "^2.0", "symfony/console": "~6.0 || ~5.0 || ~4.0", "symfony/polyfill-ctype": "^1.19", "symfony/polyfill-mbstring": "^1.19", "symfony/polyfill-php80": "^1.16", "symfony/routing": "~6.0 || ~5.0 || ~4.0", - "zhamao/logger": "dev-master" + "zhamao/logger": "dev-master", + "onebot/libonebot": "dev-develop" }, "require-dev": { "brainmaestro/composer-git-hooks": "^2.8", diff --git a/phpstan.neon b/phpstan.neon index dcff31ac..626496d2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -8,6 +8,7 @@ parameters: - '#PHPDoc tag @throws with type Psr\\Container\\ContainerExceptionInterface is not subtype of Throwable#' - '#Unsafe usage of new static#' - '#Call to method initTableList\(\) of deprecated class ZM\\DB\\DB#' + - '#class Fiber#' dynamicConstantNames: - SWOOLE_VERSION - ZM_TEST_LOG_DEBUG diff --git a/src/Globals/global_functions.php b/src/Globals/global_functions.php index c3b0503e..30265618 100644 --- a/src/Globals/global_functions.php +++ b/src/Globals/global_functions.php @@ -2,6 +2,9 @@ declare(strict_types=1); +use OneBot\Driver\Coroutine\Adaptive; +use OneBot\Driver\Coroutine\CoroutineInterface; +use OneBot\Driver\Process\ExecutionResult; use OneBot\V12\Object\MessageSegment; use Psr\Log\LoggerInterface; use ZM\Container\Container; @@ -28,6 +31,34 @@ function zm_dir(string $dir): string return str_replace('/', DIRECTORY_SEPARATOR, $dir); } +/** + * 执行shell指令 + * + * @param string $cmd 命令行 + */ +function zm_exec(string $cmd): ExecutionResult +{ + return Adaptive::exec($cmd); +} + +/** + * sleep 指定时间,单位为秒(最小单位为1毫秒,即0.001) + * + * @param float|int $time + */ +function zm_sleep($time) +{ + Adaptive::sleep($time); +} + +/** + * 获取协程接口 + */ +function coroutine(): ?CoroutineInterface +{ + return Adaptive::getCoroutine(); +} + /** * 获取内部错误码 * diff --git a/src/ZM/Container/ContainerServicesProvider.php b/src/ZM/Container/ContainerServicesProvider.php index 3b837815..26a79e85 100644 --- a/src/ZM/Container/ContainerServicesProvider.php +++ b/src/ZM/Container/ContainerServicesProvider.php @@ -90,9 +90,9 @@ class ContainerServicesProvider { // $context = Context::$context[zm_cid()]; $container->instance(HttpRequestEvent::class, $event); - $container->alias('http.request.event', HttpRequestEvent::class); + $container->alias(HttpRequestEvent::class, 'http.request.event'); $container->instance(ServerRequestInterface::class, $event->getRequest()); - $container->alias('http.request', ServerRequestInterface::class); + $container->alias(ServerRequestInterface::class, 'http.request'); // $container->instance(Request::class, $context['request']); // $container->instance(Response::class, $context['response']); $container->bind(ContextInterface::class, Context::class); diff --git a/src/ZM/Event/Listener/HttpEventListener.php b/src/ZM/Event/Listener/HttpEventListener.php index fd31571a..20a21745 100644 --- a/src/ZM/Event/Listener/HttpEventListener.php +++ b/src/ZM/Event/Listener/HttpEventListener.php @@ -32,6 +32,7 @@ class HttpEventListener { // 注册容器 resolve(ContainerServicesProvider::class)->registerServices('request', $event); + // TODO: 这里有个bug,如果是用的Workerman+Fiber协程的话,有个前置协程挂起,这里获取到的Event是被挂起的Event对象,触发两次事件才能归正 // 跑一遍 BindEvent 绑定了 HttpRequestEvent 的注解 $handler = new AnnotationHandler(BindEvent::class); $handler->setRuleCallback(function (BindEvent $anno) { diff --git a/src/ZM/Utils/ZMUtil.php b/src/ZM/Utils/ZMUtil.php index b27c7be4..8aa3b892 100644 --- a/src/ZM/Utils/ZMUtil.php +++ b/src/ZM/Utils/ZMUtil.php @@ -8,9 +8,10 @@ class ZMUtil { /** * 获取 composer.json 并转为数组进行读取使用 + * @param null|string $path 路径 */ - public static function getComposerMetadata(): ?array + public static function getComposerMetadata(?string $path = null): ?array { - return json_decode(file_get_contents(SOURCE_ROOT_DIR . '/composer.json'), true); + return json_decode(file_get_contents(($path ?? SOURCE_ROOT_DIR) . '/composer.json'), true); } }