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 { defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES)); $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']); } if ($server->exist($fd)) { return $server->send($fd, $dispatch); } return $dispatch; } catch (\Throwable $exception) { $this->addError($exception, 'receive'); $error = ['state' => 500, 'message' => $exception->getMessage()]; if ($server->exist($fd)) { return $server->send($fd, Json::encode($error)); } return Json::encode($error); } } }