add timer tick

This commit is contained in:
Jerry
2023-02-10 13:12:20 +08:00
parent f03c0940da
commit df25aebd60
11 changed files with 132 additions and 6 deletions

View File

@@ -208,7 +208,7 @@ class PluginManager
foreach (self::$plugins as $name => $meta) {
// 除了内建插件外,输出 log 告知启动插件
if ($meta->getPluginType() !== ZM_PLUGIN_TYPE_NATIVE) {
logger()->info('Enabling plugin: ' . $name);
logger()->info('正在启用插件 ' . $name);
}
// 先判断依赖关系,如果声明了依赖,但依赖不合规则报错崩溃
foreach ($meta->getDependencies() as $dep_name => $dep_version) {
@@ -257,6 +257,11 @@ class PluginManager
foreach ($entity->getInits() as $init) {
AnnotationMap::addSingleAnnotation($init);
}
// 设置 TimerTick 注解
foreach ($entity->getTimerTicks() as $tick) {
AnnotationMap::addSingleAnnotation($tick);
$parser->parseSpecial($tick);
}
}
// 如果设置了 Autoload file那么将会把 psr-4 的加载路径丢进 parser
foreach ($meta->getAutoloadPsr4() as $namespace => $path) {

View File

@@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace ZM\Plugin\Traits;
use ZM\Annotation\Framework\Tick;
trait TickTrait
{
protected array $ticks = [];
public function addTimerTick(int $ms, callable $callback, int $worker_id = 0): void
{
$tick = new Tick($ms, $worker_id);
if (is_array($callback)) {
$tick->class = $callback[0];
$tick->method = $callback[1];
} elseif ($callback instanceof \Closure) {
$tick->method = $callback;
}
$this->ticks[] = $tick;
}
public function getTimerTicks(): array
{
return $this->ticks;
}
}

View File

@@ -18,4 +18,5 @@ class ZMPlugin
use Traits\PluginLoadTrait;
use Traits\RouteTrait;
use Traits\PluginPackTrait;
use Traits\TickTrait;
}