From 4aaed75c5829a830b248ee4fe713ca5e7694f643 Mon Sep 17 00:00:00 2001 From: inhere Date: Fri, 8 May 2020 20:00:32 +0800 Subject: [PATCH] fix some error for ws server --- src/framework/src/Concern/AbstractSessionManager.php | 4 ++++ src/websocket-server/src/Connection.php | 1 + src/websocket-server/src/Swoole/HandshakeListener.php | 3 ++- src/websocket-server/src/Swoole/MessageListener.php | 5 +++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/framework/src/Concern/AbstractSessionManager.php b/src/framework/src/Concern/AbstractSessionManager.php index a999f43d3..6caa28ca1 100644 --- a/src/framework/src/Concern/AbstractSessionManager.php +++ b/src/framework/src/Concern/AbstractSessionManager.php @@ -84,6 +84,10 @@ public function set(string $sessionId, SessionInterface $session): bool } /** + * Get connection session object by sessionId. + * + * - If not found on current worker, will try find from storage driver. + * * @param string $sessionId The session Id. eg: swoole.fd, http session id * * @return SessionInterface|null diff --git a/src/websocket-server/src/Connection.php b/src/websocket-server/src/Connection.php index 03a096648..38f7991d9 100644 --- a/src/websocket-server/src/Connection.php +++ b/src/websocket-server/src/Connection.php @@ -96,6 +96,7 @@ public static function manager(): ConnectionManager */ public static function current(): self { + /** @see ConnectionManager::current() */ return Swoft::getBean(WsServerBean::MANAGER)->current(); } diff --git a/src/websocket-server/src/Swoole/HandshakeListener.php b/src/websocket-server/src/Swoole/HandshakeListener.php index 33f60043e..33dc2ae87 100644 --- a/src/websocket-server/src/Swoole/HandshakeListener.php +++ b/src/websocket-server/src/Swoole/HandshakeListener.php @@ -78,6 +78,7 @@ public function onHandshake(Request $request, Response $response): bool $psr7Req = Psr7Request::new($request); $psr7Res = Psr7Response::new($response); $wsServer = Swoft::getBean(WsServerBean::SERVER); + /** @var Swoft\WebSocket\Server\ConnectionManager $manager */ $manager = Swoft::getBean(WsServerBean::MANAGER); // Initialize connection session and context @@ -188,7 +189,7 @@ public function onOpen(Psr7Request $request, int $fd): void Swoft::trigger(WsServerEvent::OPEN_AFTER, $fd, $server, $request); } catch (Throwable $e) { Swoft::trigger(WsServerEvent::OPEN_ERROR, $e, $request); - \vdump($e); + /** @var WsErrorDispatcher $errDispatcher */ $errDispatcher = BeanFactory::getSingleton(WsErrorDispatcher::class); $errDispatcher->openError($e, $request); diff --git a/src/websocket-server/src/Swoole/MessageListener.php b/src/websocket-server/src/Swoole/MessageListener.php index 3c139cc69..122450276 100644 --- a/src/websocket-server/src/Swoole/MessageListener.php +++ b/src/websocket-server/src/Swoole/MessageListener.php @@ -80,11 +80,12 @@ public function onMessage(Server $server, Frame $frame): void Session::bindCo($sid); try { - // Trigger message before event + // Trigger message before event. + // NOTICE: on the event, maybe session has been lost. TODO Swoft::trigger(WsServerEvent::MESSAGE_RECEIVE, $fd, $server, $frame); /** @var Connection $conn */ - // $conn = Session::current(); + // NOTICE: don't use Session::current(). must use Connection::current(), it can be restore connection from storage. $conn = Connection::current(); $info = $conn->getModuleInfo();