From 06ad668b7fadf4f5b0b5969665fc1b632b726a1d Mon Sep 17 00:00:00 2001 From: Albert Chen Date: Sat, 9 Mar 2019 14:22:01 +0800 Subject: [PATCH 1/2] fix namespace for analyzing if an fd is a websocket payload in onClose event --- src/Concerns/InteractsWithWebsocket.php | 5 +++-- src/Websocket/Pusher.php | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Concerns/InteractsWithWebsocket.php b/src/Concerns/InteractsWithWebsocket.php index 19485ec6..1e945138 100644 --- a/src/Concerns/InteractsWithWebsocket.php +++ b/src/Concerns/InteractsWithWebsocket.php @@ -12,6 +12,7 @@ use SwooleTW\Http\Server\Facades\Server; use SwooleTW\Http\Websocket\HandlerContract; use Illuminate\Contracts\Container\Container; +use Swoole\WebSocket\Server as WebsocketServer; use SwooleTW\Http\Websocket\Rooms\RoomContract; use SwooleTW\Http\Exceptions\WebsocketNotSetInConfigException; @@ -129,7 +130,7 @@ public function onMessage($server, $frame) */ public function onClose($server, $fd, $reactorId) { - if (! $this->isServerWebsocket($fd) || ! $server instanceof Websocket) { + if (! $this->isServerWebsocket($fd) || ! $server instanceof WebsocketServer) { return; } @@ -229,7 +230,7 @@ protected function prepareWebsocket() */ protected function isServerWebsocket(int $fd): bool { - return $this->container->make(Server::class) + return (bool) $this->container->make(Server::class) ->connection_info($fd)['websocket_status'] ?? false; } diff --git a/src/Websocket/Pusher.php b/src/Websocket/Pusher.php index b63b1b7c..e31eafb5 100644 --- a/src/Websocket/Pusher.php +++ b/src/Websocket/Pusher.php @@ -221,7 +221,7 @@ public function shouldBroadcast(): bool */ public function isServerWebsocket(int $fd): bool { - return $this->server->connection_info($fd)['websocket_status'] ?? false; + return (bool) $this->server->connection_info($fd)['websocket_status'] ?? false; } /** From 4d28803a8c351e6d92c036dfa7f8eb123f4ea8a3 Mon Sep 17 00:00:00 2001 From: Albert Chen Date: Sat, 9 Mar 2019 15:40:00 +0800 Subject: [PATCH 2/2] fix shouldPushToDescriptor in pusher --- src/Websocket/Pusher.php | 7 +++++-- tests/Websocket/PusherTest.php | 14 +++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Websocket/Pusher.php b/src/Websocket/Pusher.php index e31eafb5..cad25f47 100644 --- a/src/Websocket/Pusher.php +++ b/src/Websocket/Pusher.php @@ -245,8 +245,11 @@ protected function getWebsocketConnections(): array */ public function shouldPushToDescriptor(int $fd): bool { - return $this->server->exist($fd) - && ($this->broadcast && $this->sender !== (int) $fd); + if (! $this->server->exist($fd)) { + return false; + } + + return $this->broadcast ? $this->sender !== (int) $fd : true; } /** diff --git a/tests/Websocket/PusherTest.php b/tests/Websocket/PusherTest.php index 0d97a0b7..0985527f 100644 --- a/tests/Websocket/PusherTest.php +++ b/tests/Websocket/PusherTest.php @@ -115,7 +115,7 @@ public function testShouldPushToDescriptor() $server = m::mock(Server::class); $server->shouldReceive('exist') ->with($fd = 1) - ->twice() + ->times(3) ->andReturn(true); $pusher = Pusher::make([ @@ -141,5 +141,17 @@ public function testShouldPushToDescriptor() ], $server); $this->assertFalse($pusher->shouldPushToDescriptor($fd)); + + $pusher = Pusher::make([ + 'opcode' => 1, + 'sender' => 1, + 'fds' => [], + 'broadcast' => false, + 'assigned' => false, + 'event' => 'event', + 'message' => 'message' + ], $server); + + $this->assertTrue($pusher->shouldPushToDescriptor($fd)); } }