This commit is contained in:
as2252258@163.com
2021-04-09 03:00:30 +08:00
parent f34adc9bba
commit b3fb617815
2 changed files with 47 additions and 29 deletions
+22 -28
View File
@@ -40,25 +40,7 @@ class OnWorkerStart extends Callback
$annotation = Snowflake::app()->getAnnotation();
$annotation->setLoader(unserialize($runtime));
putenv('state=start');
putenv('worker=' . $this->server->worker_id);
$pipeLine = new Pipeline();
$pipeLine->if($isWorker, function ($annotation, $server) {
$annotation->runtime(CONTROLLER_PATH);
$annotation->runtime(APP_PATH, CONTROLLER_PATH);
name($server->worker_pid, 'Worker.' . $server->worker_id);
})
->else(function ($annotation, $server) {
$annotation->runtime(MODEL_PATH);
name($server->worker_pid, 'Task.' . $server->worker_id);
})
->catch(function (\Throwable $throwable) {
$this->addError($throwable->getMessage());
})
->exec($annotation, $this->server);
return $annotation;
}
@@ -71,15 +53,27 @@ class OnWorkerStart extends Callback
*/
public function onHandler(Server $server, int $worker_id): void
{
$this->server = $server;
$this->injectLoader($this->isWorker($worker_id));
if ($worker_id < $server->setting['worker_num']) {
$this->onWorker($server, $worker_id);
} else {
$this->onTask($server, $worker_id);
}
$annotation = $this->injectLoader();
(new Pipeline())
->if($this->isWorker($worker_id), function ($annotation, $server, $worker_id) {
$annotation->runtime(CONTROLLER_PATH);
$annotation->runtime(APP_PATH, CONTROLLER_PATH);
$this->onWorker($server, $server->worker_id);
name($server->worker_pid, 'Worker.' . $worker_id);
})
->else(function ($annotation, $server, $worker_id) {
$annotation->runtime(MODEL_PATH);
$this->onTask($server, $server->worker_id);
name($server->worker_pid, 'Task.' . $worker_id);
})
->catch(function (\Throwable $throwable) {
$this->addError($throwable->getMessage());
})
->before(function ($annotation, $server, $worker_id) {
putenv('state=start');
putenv('worker=' . $worker_id);
})
->exec($annotation, $server, $worker_id);
}
+25 -1
View File
@@ -10,6 +10,8 @@ class Pipeline
private \Closure $_if;
private \Closure $_else;
private \Closure $_catch;
private \Closure $_after;
private \Closure $_before;
private bool $condition;
@@ -48,6 +50,26 @@ class Pipeline
return $this;
}
/**
* @param \Closure $handler
* @return $this
*/
public function after(\Closure $handler): static
{
$this->_after = $handler;
return $this;
}
/**
* @param \Closure $handler
* @return $this
*/
public function before(\Closure $handler): static
{
$this->_before = $handler;
return $this;
}
/**
* @param $argv
@@ -56,16 +78,18 @@ class Pipeline
public function exec(...$argv)
{
try {
call_user_func($this->_before, ...$argv);
if ($this->condition !== true) {
call_user_func($this->_else, ...$argv);
} else {
call_user_func($this->_if, ...$argv);
}
var_dump(__METHOD__);
return $argv;
} catch (\Throwable $exception) {
call_user_func($this->_catch, $exception);
return $argv;
} finally {
call_user_func($this->_after, ...$argv);
}
}