diff --git a/HttpServer/Events/OnTask.php b/HttpServer/Events/OnTask.php index 1f2b6b1a..578e1f63 100644 --- a/HttpServer/Events/OnTask.php +++ b/HttpServer/Events/OnTask.php @@ -10,6 +10,8 @@ use HttpServer\IInterface\Task; use HttpServer\IInterface\Task as ITask; use Snowflake\Event; use Snowflake\Snowflake; +use Swoole\Coroutine; +use Swoole\Process; use Swoole\Server; use Swoole\Timer; use Exception; @@ -50,6 +52,9 @@ class OnTask extends Callback if (empty($data)) { return $server->finish('null data'); } + + Process::signal(SIGTERM | SIGKILL | SIGUSR1, [$this, 'onSignal']); + $finish = $this->runTaskHandler($data); if (!$finish) { $finish = []; @@ -74,7 +79,23 @@ class OnTask extends Callback if (empty($task->data)) { return $task->finish('null data'); } + + Coroutine::getContext()['isComplete'] = false; + go(function () { + $sigkill = Coroutine::waitSignal(SIGTERM | SIGKILL | SIGUSR1, -1); + if ($sigkill === false) { + return; + } + while (true) { + $content = Coroutine::getContext(Coroutine::getPcid())['isComplete']; + if ($content === true) { + break; + } + } + }); + $finish = $this->runTaskHandler($task->data); + Coroutine::getContext()['isComplete'] = true; if (!$finish) { $finish = []; } @@ -86,6 +107,12 @@ class OnTask extends Callback return $task->finish(json_encode($finish)); } + + public function onSignal() + { + + } + /** * @param $data * @return array|null