Skip to content

Commit e6428a5

Browse files
committed
fix: swoft-cloud/swoft/issues/1222 compatible ws setting open_websocket_close_frame
1 parent 3db933e commit e6428a5

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

src/websocket-server/src/Swoole/MessageListener.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
use Swoole\Websocket\Server;
3232
use Throwable;
3333
use function server;
34+
use const WEBSOCKET_OPCODE_CLOSE;
3435

3536
/**
3637
* Class MessageListener
@@ -55,14 +56,22 @@ class MessageListener implements MessageInterface
5556
public function onMessage(Server $server, Frame $frame): void
5657
{
5758
$fd = $frame->fd;
58-
$sid = (string)$fd;
59+
60+
// Fix: if setting: 'open_websocket_close_frame' => true
61+
if ($frame->opcode === WEBSOCKET_OPCODE_CLOSE) {
62+
CLog::info('Close ws#%d connection by close opcode message, reason: %s', $fd, $frame->reason);
63+
// Swoft::getBean(CloseListener::class)->onClose($server, $fd, 0);
64+
// NOTICE: swoole will auto call close event.
65+
return;
66+
}
5967

6068
server()->log("Message: conn#{$fd} received message data", [], 'debug');
6169

6270
$request = Request::new($frame);
6371
$response = Response::new($fd);
6472

6573
/** @var WsMessageContext $ctx */
74+
$sid = (string)$fd;
6675
$ctx = WsMessageContext::new($request, $response);
6776

6877
// Storage context

0 commit comments

Comments
 (0)