execute($server, $fd); } /** * @param Server $server * @param int $fd * @throws ComponentException * @throws Exception */ private function execute(Server $server, int $fd): void { try { $router = Snowflake::app()->getRouter(); if (!($server instanceof WServer) || !$server->isEstablished($fd)) { return; } $node = $router->search('/' . Socket::CLOSE . '::event', 'sw::socket'); if ($node instanceof Node) { $node->dispatch($server, $fd); } } catch (\Throwable $exception) { $this->addError($exception); } finally { $logger = Snowflake::app()->getLogger(); $logger->insert(); } } /** * @param $server * @param $fd * @return array|null * @throws Exception */ public function resolve($server, $fd): ?array { if ($server instanceof WServer) { if (!$server->isEstablished($fd)) { return [null, null]; } $router = Snowflake::app()->getRouter(); $node = $router->search(Socket::HANDSHAKE . '::' . null, 'sw::socket'); if ($node === null) { return [null, null]; } return $node->dispatch(); } else if ($server instanceof HServer) { $manager = Snowflake::app()->annotation->http; $name = $manager->getName(Http::CLOSE); } else { $manager = Snowflake::app()->annotation->tcp; $name = $manager->getName(Tcp::CLOSE); } return [$manager, $name]; } }