From a28641ce7e3e00789cb11b8e3b07fe501f9269a0 Mon Sep 17 00:00:00 2001 From: "as2252258@163.com" Date: Sun, 28 Feb 2021 14:28:51 +0800 Subject: [PATCH] modify --- HttpServer/Events/OnTask.php | 216 ++++++++++++++++++----------------- 1 file changed, 113 insertions(+), 103 deletions(-) diff --git a/HttpServer/Events/OnTask.php b/HttpServer/Events/OnTask.php index 4c30bcd9..0152c704 100644 --- a/HttpServer/Events/OnTask.php +++ b/HttpServer/Events/OnTask.php @@ -23,95 +23,105 @@ use Exception; class OnTask extends Callback { - /** - * @throws Exception - */ - public function onHandler() - { - $parameter = func_get_args(); - if (func_num_args() < 4) { - $this->onContinueTask(...$parameter); - } else { - $this->onTask(...$parameter); - } - } + /** + * @throws Exception + */ + public function onHandler() + { + $parameter = func_get_args(); + if (func_num_args() < 4) { + $this->onContinueTask(...$parameter); + } else { + $this->onTask(...$parameter); + } + } - /** - * @param Server $server - * @param int $task_id - * @param int $from_id - * @param string $data - * - * @return mixed - * @throws Exception 异步任务 - */ - public function onTask(Server $server, int $task_id, int $from_id, string $data): mixed - { - $time = microtime(TRUE); - if (empty($data)) { - return $server->finish('null data'); - } + /** + * @param Server $server + * @param int $task_id + * @param int $from_id + * @param string $data + * + * @return mixed + * @throws Exception 异步任务 + */ + public function onTask(Server $server, int $task_id, int $from_id, string $data): mixed + { + $app = Snowflake::app()->increment(); + Coroutine\defer(function () use ($app) { + $app->decrement(); + }); - $finish = $this->runTaskHandler($data); - if (!$finish) { - $finish = []; - } - $finish['runTime'] = [ - 'startTime' => $time, - 'runTime' => microtime(TRUE) - $time, - 'endTime' => microtime(TRUE), - ]; - return $server->finish(json_encode($finish)); - } + $time = microtime(TRUE); + if (empty($data)) { + return $server->finish('null data'); + } - /** - * @param Server $server - * @param Server\Task $task - * @return mixed - * @throws Exception 异步任务 - */ - public function onContinueTask(Server $server, Server\Task $task): mixed - { - $time = microtime(TRUE); - if (empty($task->data)) { - return $task->finish('null data'); - } + $finish = $this->runTaskHandler($data); + if (!$finish) { + $finish = []; + } + $finish['runTime'] = [ + 'startTime' => $time, + 'runTime' => microtime(TRUE) - $time, + 'endTime' => microtime(TRUE), + ]; + return $server->finish(json_encode($finish)); + } + + /** + * @param Server $server + * @param Server\Task $task + * @return mixed + * @throws Exception 异步任务 + */ + public function onContinueTask(Server $server, Server\Task $task): mixed + { + $app = Snowflake::app()->increment(); + Coroutine\defer(function () use ($app) { + $app->decrement(); + }); + + $time = microtime(TRUE); + if (empty($task->data)) { + return $task->finish('null data'); + } $finish = $this->runTaskHandler($task->data); if (!$finish) { - $finish = []; - } - $finish['runTime'] = [ - 'startTime' => $time, - 'runTime' => microtime(TRUE) - $time, - 'endTime' => microtime(TRUE), - ]; - return $task->finish(json_encode($finish)); - } + $finish = []; + } + $finish['runTime'] = [ + 'startTime' => $time, + 'runTime' => microtime(TRUE) - $time, + 'endTime' => microtime(TRUE), + ]; + return $task->finish(json_encode($finish)); + } - /** - * @param $data - * @return array|null - * @throws Exception - */ - private function runTaskHandler($data): ?array - { + /** + * @param $data + * @return array|null + * @throws Exception + */ + private function runTaskHandler($data): ?array + { try { - $serialize = $this->before($data); - $params = $serialize->getParams(); - if (is_object($params)) { - $params = get_object_vars($params); - } - $finish['class'] = get_class($serialize); - $finish['params'] = $params; - $finish['status'] = 'success'; - $finish['info'] = $serialize->onHandler(); - } catch (\Throwable $exception) { - $finish['status'] = 'error'; - $finish['info'] = $this->format($exception); - $this->error($exception, 'Task'); - } + $serialize = $this->before($data); + $params = $serialize->getParams(); + if (is_object($params)) { + $params = get_object_vars($params); + } + $finish['class'] = get_class($serialize); + $finish['params'] = $params; + $finish['status'] = 'success'; + $finish['info'] = $serialize->onHandler(); + } catch (\Throwable $exception) { + $finish['status'] = 'error'; + $finish['info'] = $this->format($exception); + $this->error($exception, 'Task'); + } $event = Snowflake::app()->getEvent(); $event->trigger(Event::SYSTEM_RESOURCE_CLEAN); @@ -119,31 +129,31 @@ class OnTask extends Callback Timer::clearAll(); return $finish; - } + } - /** - * @param $data - * @return ITask|null - */ - protected function before($data): ?Task - { - if (empty($serialize = unserialize($data))) { - return null; - } - if (!($serialize instanceof ITask)) { - return null; - } - return $serialize; - } + /** + * @param $data + * @return ITask|null + */ + protected function before($data): ?Task + { + if (empty($serialize = unserialize($data))) { + return null; + } + if (!($serialize instanceof ITask)) { + return null; + } + return $serialize; + } - /** - * @param $exception - * @return string - */ - private function format($exception): string - { - return $exception->getMessage() . " on line " . $exception->getLine() . " at file " . $exception->getFile(); - } + /** + * @param $exception + * @return string + */ + private function format($exception): string + { + return $exception->getMessage() . " on line " . $exception->getLine() . " at file " . $exception->getFile(); + } }