From 7700c16b56f5a78051b0ff8fe4d5e0e5ee2acf51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Sun, 1 Aug 2021 11:24:52 +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 --- Server/ServerManager.php | 11 ++++++----- Server/WebSocketServerListener.php | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Server/ServerManager.php b/Server/ServerManager.php index 3900bf53..5f5c3bfd 100644 --- a/Server/ServerManager.php +++ b/Server/ServerManager.php @@ -338,8 +338,10 @@ class ServerManager extends Abstracts\Server $this->server->on('handshake', [$reflect, 'onHandshake']); $this->server->on('message', [$reflect, 'onMessage']); $this->server->on('close', [$reflect, 'onClose']); + $this->server->on('disconnect', [$reflect, 'onDisconnect']); $reflect->setEvents(Constant::HANDSHAKE, $settings['events'][Constant::HANDSHAKE] ?? null); + $reflect->setEvents(Constant::DISCONNECT, $settings['events'][Constant::DISCONNECT] ?? null); $reflect->setEvents(Constant::MESSAGE, $settings['events'][Constant::MESSAGE] ?? null); $reflect->setEvents(Constant::CONNECT, $settings['events'][Constant::CONNECT] ?? null); $reflect->setEvents(Constant::CLOSE, $settings['events'][Constant::CLOSE] ?? null); @@ -388,13 +390,12 @@ class ServerManager extends Abstracts\Server */ private function addCloseOrDisconnect($reflect, $settings): void { - if (swoole_version() >= '4.7.0') { - $this->server->on('disconnect', [$reflect, 'onDisconnect']); + if (swoole_version() >= '4.7') { $reflect->setEvents(Constant::DISCONNECT, $settings['events'][Constant::DISCONNECT] ?? null); - } else { - $this->server->on('close', [$reflect, 'onClose']); - $reflect->setEvents(Constant::CLOSE, $settings['events'][Constant::CLOSE] ?? null); + $this->server->on('disconnect', [$reflect, 'onDisconnect']); } + $reflect->setEvents(Constant::CLOSE, $settings['events'][Constant::CLOSE] ?? null); + $this->server->on('close', [$reflect, 'onClose']); } diff --git a/Server/WebSocketServerListener.php b/Server/WebSocketServerListener.php index 63654faa..685dc53b 100644 --- a/Server/WebSocketServerListener.php +++ b/Server/WebSocketServerListener.php @@ -46,6 +46,7 @@ class WebSocketServerListener extends Abstracts\Server $reflect = Snowflake::getDi()->getReflect(static::class)?->newInstance(); $reflect->setEvents(Constant::CONNECT, $settings['events'][Constant::CONNECT] ?? null); $reflect->setEvents(Constant::HANDSHAKE, $settings['events'][Constant::HANDSHAKE] ?? null); + $reflect->setEvents(Constant::DISCONNECT, $settings['events'][Constant::DISCONNECT] ?? null); $reflect->setEvents(Constant::MESSAGE, $settings['events'][Constant::MESSAGE] ?? null); $reflect->setEvents(Constant::CLOSE, $settings['events'][Constant::CLOSE] ?? null); @@ -58,6 +59,7 @@ class WebSocketServerListener extends Abstracts\Server static::$_http->on('connect', [$reflect, 'onConnect']); static::$_http->on('handshake', [$reflect, 'onHandshake']); static::$_http->on('message', [$reflect, 'onMessage']); + static::$_http->on('disconnect', [$reflect, 'onDisconnect']); static::$_http->on('close', [$reflect, 'onClose']); return static::$_http; @@ -145,4 +147,17 @@ class WebSocketServerListener extends Abstracts\Server $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } + + /** + * @param Server $server + * @param int $fd + * @throws Exception + */ + public function onDisconnect(Server $server, int $fd) + { + $this->runEvent(Constant::DISCONNECT, fn() => $server->confirm($fd), [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); + } + }