diff --git a/http-server/Events/OnClose.php b/http-server/Events/OnClose.php index 7edc5449..07e6f300 100644 --- a/http-server/Events/OnClose.php +++ b/http-server/Events/OnClose.php @@ -31,23 +31,10 @@ class OnClose extends Callback public function onHandler(Server $server, int $fd) { try { - if ($server instanceof WServer) { - if (!$server->isEstablished($fd)) { - return; - } - $manager = Snowflake::get()->annotation->get('websocket'); - $name = $manager->getName(AWebsocket::CLOSE); - } else if ($server instanceof HServer) { - $manager = Snowflake::get()->annotation->get('http'); - $name = $manager->getName(Annotation::CLOSE); - } else { - $manager = Snowflake::get()->annotation->get('tcp'); - $name = $manager->getName(Tcp::CLOSE); + [$manager, $name] = $this->resovle($server, $fd); + if ($manager !== null && !$manager->has($name)) { + $manager->runWith($name, [$fd]); } - if (!$manager->has($name)) { - return; - } - $manager->runWith($name, [$fd]); } catch (\Throwable $exception) { $this->addError($exception->getMessage()); } finally { @@ -60,4 +47,29 @@ class OnClose extends Callback } + /** + * @param $server + * @param $fd + * @return array|null + * @throws Exception + */ + public function resovle($server, $fd) + { + if ($server instanceof WServer) { + if (!$server->isEstablished($fd)) { + return [null, null]; + } + $manager = Snowflake::get()->annotation->get('websocket'); + $name = $manager->getName(AWebsocket::CLOSE); + } else if ($server instanceof HServer) { + $manager = Snowflake::get()->annotation->get('http'); + $name = $manager->getName(Annotation::CLOSE); + } else { + $manager = Snowflake::get()->annotation->get('tcp'); + $name = $manager->getName(Tcp::CLOSE); + } + return [$manager, $name]; + } + + }