router = Snowflake::app()->getRouter(); } /** * @param Server $server * @param int $fd * @param int $reID * @param string $data * @return mixed * @throws Exception */ public function onHandler(Server $server, int $fd, int $reID, string $data): mixed { try { \Swoole\Coroutine\defer(function (){ $event = Snowflake::app()->getEvent(); $event->trigger(Event::SYSTEM_RESOURCE_RELEASES); \logger()->insert(); }); $request = $this->_request($fd, $data, $reID); if (($node = $this->router->find_path($request)) === null) { return $server->send($fd, Json::encode(['state' => 404])); } $dispatch = $node->dispatch(); if (!is_string($dispatch)) $dispatch = Json::encode($dispatch); if (empty($dispatch)) { $dispatch = Json::encode(['state' => 0, 'message' => 'ok']); } return $server->send($fd, $dispatch); } catch (\Throwable $exception) { $this->addError($exception, 'receive'); $error = ['state' => 500, 'message' => $exception->getMessage()]; return $server->send($fd, Json::encode($error)); } } /** * @param $fd * @param $data * @param $reID * @return Request * @throws ReflectionException * @throws NotFindClassException */ private function _request($fd, $data, $reID): Request { return Request::createListenRequest($fd, $data, $reID); } }