From 05edfdd247910548ec62933ba9156c7ffc1a0243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Wed, 31 Mar 2021 16:52:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Events/OnClose.php | 58 +++++-------------------------- HttpServer/Events/OnHandshake.php | 7 +++- 2 files changed, 15 insertions(+), 50 deletions(-) diff --git a/HttpServer/Events/OnClose.php b/HttpServer/Events/OnClose.php index 0366398f..44bcb6c6 100644 --- a/HttpServer/Events/OnClose.php +++ b/HttpServer/Events/OnClose.php @@ -33,9 +33,15 @@ class OnClose extends Callback public function onHandler(Server $server, int $fd) { try { - $this->execute($server, $fd); + $clientInfo = $server->getClientInfo($fd); + $event = Snowflake::app()->getEvent(); + + if (!$event->exists(($name = $this->getName($clientInfo)))) { + return; + } + $event->trigger($name, [$fd, $server]); } catch (\Throwable $exception) { - $this->addError($exception,'throwable'); + $this->addError($exception, 'throwable'); } finally { fire(Event::SYSTEM_RESOURCE_RELEASES); logger()->insert(); @@ -43,59 +49,13 @@ class OnClose extends Callback } - /** - * @param Server $server - * @param int $fd - * @throws ComponentException - * @throws Exception - */ - private function execute(Server $server, int $fd): void - { - if (!$this->isWebsocket($server, $fd)) { - $client = $server->getClientInfo($fd); - fire($this->name($client['server_port']), [$server, $fd]); - } else { - $this->loadNode($server, $fd); - } - } - - /** * @param $server_port * @return string */ - private function name($server_port): string + private function getName($server_port): string { return 'listen ' . $server_port . ' ' . Event::SERVER_CLIENT_CLOSE; } - - /** - * @param $server - * @param $fd - * @return bool - */ - private function isWebsocket($server, $fd): bool - { - return $server instanceof WebsocketServer && $server->isEstablished($fd); - } - - - /** - * @param $server - * @param $fd - * @return mixed - * @throws ComponentException - * @throws ConfigException - * @throws NotFindClassException - * @throws Exception - */ - private function loadNode($server, $fd): mixed - { - $query = Request::socketQuery((object)['fd' => $fd], Socket::CLOSE); - if (($node = router()->find_path($query)) !== null) { - return $node->dispatch($server, $fd); - } - return null; - } } diff --git a/HttpServer/Events/OnHandshake.php b/HttpServer/Events/OnHandshake.php index 0f844911..a60eedfe 100644 --- a/HttpServer/Events/OnHandshake.php +++ b/HttpServer/Events/OnHandshake.php @@ -7,9 +7,11 @@ namespace HttpServer\Events; use Annotation\Route\Socket; use Exception; use HttpServer\Abstracts\Callback; +use HttpServer\Http\HttpHeaders; use HttpServer\Http\HttpParams; use HttpServer\Http\Request; use HttpServer\Http\Response; +use Snowflake\Core\ArrayAccess; use Snowflake\Event; use Snowflake\Snowflake; use Swoole\Http\Request as SRequest; @@ -98,7 +100,7 @@ class OnHandshake extends Callback $eventName = 'listen ' . $clientInfo['server_port'] . ' ' . Event::SERVER_HANDSHAKE; $event->trigger($eventName, [$request, $response]); } catch (\Throwable $exception) { - $this->addError($exception,'throwable'); + $this->addError($exception, 'throwable'); $this->disconnect($response, 500); } finally { fire(Event::SYSTEM_RESOURCE_CLEAN); @@ -124,6 +126,9 @@ class OnHandshake extends Callback /** @var Request $sRequest */ $sRequest = Request::create($request); $sRequest->uri = '/' . Socket::HANDSHAKE . '::event'; + + $sRequest->headers = new HttpHeaders(ArrayAccess::merge($request->server, $request->header)); + $sRequest->headers->replace('request_method', 'sw::socket'); $sRequest->headers->replace('request_uri', $sRequest->uri);