From de937ace093effd36ccbb3e6d35d3e5935965c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Wed, 21 Jul 2021 19:05:11 +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/Abstracts/Server.php | 14 ++++++++++++++ Server/HTTPServerListener.php | 15 +++++++++++---- Server/TCPServerListener.php | 13 +++++++++++++ Server/UDPServerListener.php | 4 ++++ Server/WebSocketServerListener.php | 12 ++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Server/Abstracts/Server.php b/Server/Abstracts/Server.php index a18a3929..eed98bbe 100644 --- a/Server/Abstracts/Server.php +++ b/Server/Abstracts/Server.php @@ -6,6 +6,7 @@ namespace Server\Abstracts; use Closure; use Exception; +use Snowflake\Event; use Snowflake\Snowflake; @@ -20,6 +21,19 @@ abstract class Server protected array $_events = []; + protected Event $_event; + + + /** + * Server constructor. + * @throws Exception + */ + public function __construct() + { + $this->_event = Snowflake::getApp('event'); + } + + /** * @param string $name * @param array|null $events diff --git a/Server/HTTPServerListener.php b/Server/HTTPServerListener.php index 15d7a252..9b315f0d 100644 --- a/Server/HTTPServerListener.php +++ b/Server/HTTPServerListener.php @@ -32,9 +32,6 @@ class HTTPServerListener extends Abstracts\Server private Router $router; - private Event $_event; - - /** * HTTPServerListener constructor. * @throws Exception @@ -42,7 +39,7 @@ class HTTPServerListener extends Abstracts\Server public function __construct() { $this->router = Snowflake::getApp('router'); - $this->_event = Snowflake::getApp('event'); + parent::__construct(); } /** @@ -83,10 +80,13 @@ class HTTPServerListener extends Abstracts\Server /** * @param Server $server * @param int $fd + * @throws Exception */ public function onConnect(Server $server, int $fd) { $this->runEvent(Constant::CONNECT, null, [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } @@ -104,6 +104,7 @@ class HTTPServerListener extends Abstracts\Server } $this->router->dispatch(); } catch (ExitException | Error | Throwable $exception) { + $response->setHeader('Content-Type', 'text/html; charset=utf-8'); $response->status($exception->getCode() == 0 ? 500 : $exception->getCode()); $response->end($exception->getMessage()); } finally { @@ -115,20 +116,26 @@ class HTTPServerListener extends Abstracts\Server /** * @param Server $server * @param int $fd + * @throws Exception */ public function onDisconnect(Server $server, int $fd) { $this->runEvent(Constant::DISCONNECT, null, [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } /** * @param Server $server * @param int $fd + * @throws Exception */ public function onClose(Server $server, int $fd) { $this->runEvent(Constant::CLOSE, null, [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } } diff --git a/Server/TCPServerListener.php b/Server/TCPServerListener.php index ef65199e..9d9d1925 100644 --- a/Server/TCPServerListener.php +++ b/Server/TCPServerListener.php @@ -4,6 +4,7 @@ namespace Server; use Exception; use ReflectionException; +use Snowflake\Event; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; use Swoole\Server; @@ -62,20 +63,26 @@ class TCPServerListener extends Abstracts\Server * @param Server $server * @param int $fd * @param int|null $reactor_id + * @throws Exception */ public function onDisconnect(Server $server, int $fd, ?int $reactor_id = null) { $this->runEvent(Constant::HANDSHAKE, null, [$server, $fd, $reactor_id]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } /** * @param Server $server * @param int $fd + * @throws Exception */ public function onConnect(Server $server, int $fd) { $this->runEvent(Constant::CONNECT, null, [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } @@ -84,20 +91,26 @@ class TCPServerListener extends Abstracts\Server * @param int $fd * @param int $reactor_id * @param string $data + * @throws Exception */ public function onReceive(Server $server, int $fd, int $reactor_id, string $data) { $this->runEvent(Constant::RECEIVE, null, [$server, $fd, $reactor_id, $data]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } /** * @param Server $server * @param int $fd + * @throws Exception */ public function onClose(Server $server, int $fd) { $this->runEvent(Constant::CLOSE, null, [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } } diff --git a/Server/UDPServerListener.php b/Server/UDPServerListener.php index a3680e3e..a910b425 100644 --- a/Server/UDPServerListener.php +++ b/Server/UDPServerListener.php @@ -4,6 +4,7 @@ namespace Server; use Exception; use ReflectionException; +use Snowflake\Event; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; use Swoole\Server; @@ -56,10 +57,13 @@ class UDPServerListener extends Abstracts\Server * @param Server $server * @param string $data * @param array $clientInfo + * @throws Exception */ public function onPacket(Server $server, string $data, array $clientInfo) { $this->runEvent(Constant::MESSAGE, null, [$server, $data, $clientInfo]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } } diff --git a/Server/WebSocketServerListener.php b/Server/WebSocketServerListener.php index cde35f15..8784a338 100644 --- a/Server/WebSocketServerListener.php +++ b/Server/WebSocketServerListener.php @@ -4,6 +4,7 @@ namespace Server; use Exception; use ReflectionException; +use Snowflake\Event; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; use Swoole\Http\Request; @@ -86,6 +87,8 @@ class WebSocketServerListener extends Abstracts\Server $response->setHeader($key, $val); } $this->runEvent(Constant::HANDSHAKE, fn() => $this->disconnect($request, $response), [$request, $response]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } @@ -103,30 +106,39 @@ class WebSocketServerListener extends Abstracts\Server /** * @param Server $server * @param int $fd + * @throws Exception */ public function onConnect(Server $server, int $fd) { $this->runEvent(Constant::CONNECT, fn() => $server->confirm($fd), [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } /** * @param \Swoole\WebSocket\Server $server * @param Frame $frame + * @throws Exception */ public function onMessage(\Swoole\WebSocket\Server $server, Frame $frame) { $this->runEvent(Constant::MESSAGE, fn() => $server->push($frame->fd, '.'), [$server, $frame]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } /** * @param Server $server * @param int $fd + * @throws Exception */ public function onClose(Server $server, int $fd) { $this->runEvent(Constant::CLOSE, fn() => $server->confirm($fd), [$server, $fd]); + + $this->_event->dispatch(Event::SYSTEM_RESOURCE_RELEASES); } }