diff --git a/src/Dashboard/EventSubscriber.php b/src/Dashboard/EventSubscriber.php index b513253..b7c9e90 100644 --- a/src/Dashboard/EventSubscriber.php +++ b/src/Dashboard/EventSubscriber.php @@ -3,9 +3,11 @@ namespace BeyondCode\LaravelWebSockets\Dashboard; use BeyondCode\LaravelWebSockets\Events\ApiMessageSent; +use BeyondCode\LaravelWebSockets\Events\ChannelOccupied; use BeyondCode\LaravelWebSockets\Events\ChannelVacated; use BeyondCode\LaravelWebSockets\Events\ClientMessageSent; use BeyondCode\LaravelWebSockets\Events\ConnectionEstablished; +use BeyondCode\LaravelWebSockets\Events\SubscribedToChannel; use BeyondCode\LaravelWebSockets\LaravelEcho\Pusher\Dashboard; use Illuminate\Events\Dispatcher; @@ -21,6 +23,11 @@ class EventSubscriber ); } + public function onChannelOccupied(ChannelOccupied $event) + { + Dashboard::occupied($event->connection, $event->channelId); + } + public function onChannelVacated(ChannelVacated $event) { Dashboard::vacated($event->connection, $event->channelId); @@ -36,10 +43,18 @@ class EventSubscriber Dashboard::connection($event->connection); } + public function onSubscribedToChannel(SubscribedToChannel $event) + { + Dashboard::subscribed($event->connection, $event->channelId); + } + public function subscribe(Dispatcher $events) { $events->listen(ApiMessageSent::class, static::class. '@onApiMessageSent'); + $events->listen(ChannelOccupied::class, static::class . '@onChannelOccupied'); $events->listen(ChannelVacated::class, static::class . '@onChannelVacated'); $events->listen(ClientMessageSent::class, static::class . '@onClientMessageSent'); + $events->listen(ConnectionEstablished::class, static::class . '@onConnectionEstablished'); + $events->listen(SubscribedToChannel::class, static::class . '@onSubscribedToChannel'); } } \ No newline at end of file diff --git a/src/Events/ChannelOccupied.php b/src/Events/ChannelOccupied.php new file mode 100644 index 0000000..1c39c3e --- /dev/null +++ b/src/Events/ChannelOccupied.php @@ -0,0 +1,21 @@ +connection = $connection; + + $this->channelId = $channelId; + } +} \ No newline at end of file diff --git a/src/Events/SubscribedToChannel.php b/src/Events/SubscribedToChannel.php new file mode 100644 index 0000000..00fdb63 --- /dev/null +++ b/src/Events/SubscribedToChannel.php @@ -0,0 +1,21 @@ +connection = $connection; + + $this->channelId = $channelId; + } +} \ No newline at end of file diff --git a/src/LaravelEcho/Pusher/Channels/Channel.php b/src/LaravelEcho/Pusher/Channels/Channel.php index d7a1b3e..f14f04c 100644 --- a/src/LaravelEcho/Pusher/Channels/Channel.php +++ b/src/LaravelEcho/Pusher/Channels/Channel.php @@ -2,7 +2,9 @@ namespace BeyondCode\LaravelWebSockets\LaravelEcho\Pusher\Channels; +use BeyondCode\LaravelWebSockets\Events\ChannelOccupied; use BeyondCode\LaravelWebSockets\Events\ChannelVacated; +use BeyondCode\LaravelWebSockets\Events\SubscribedToChannel; use BeyondCode\LaravelWebSockets\LaravelEcho\Pusher\Dashboard; use BeyondCode\LaravelWebSockets\LaravelEcho\Pusher\Exceptions\InvalidSignatureException; use Illuminate\Support\Collection; @@ -66,13 +68,15 @@ class Channel protected function saveConnection(ConnectionInterface $connection) { - if (! $this->hasConnections()) { - Dashboard::occupied($connection, $this->channelId); - } + $hadConnectionsPreviously = $this->hasConnections(); $this->subscriptions[$connection->socketId] = $connection; - Dashboard::subscribed($connection, $this->channelId); + if (! $hadConnectionsPreviously) { + event(new ChannelOccupied($connection, $this->channelId)); + } + + event(new SubscribedToChannel($connection, $this->channelId)); } public function broadcast($payload)