diff --git a/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php index 426aa747b9b3..4b4bc818d7ea 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/AblyBroadcaster.php @@ -3,6 +3,8 @@ namespace Illuminate\Broadcasting\Broadcasters; use Ably\AblyRest; +use Ably\Exceptions\AblyException; +use Illuminate\Broadcasting\BroadcastException; use Illuminate\Support\Str; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; @@ -117,11 +119,19 @@ public function generateAblySignature($channelName, $socketId, $userData = null) * @param string $event * @param array $payload * @return void + * + * @throws \Illuminate\Broadcasting\BroadcastException */ public function broadcast(array $channels, $event, array $payload = []) { - foreach ($this->formatChannels($channels) as $channel) { - $this->ably->channels->get($channel)->publish($event, $payload); + try { + foreach ($this->formatChannels($channels) as $channel) { + $this->ably->channels->get($channel)->publish($event, $payload); + } + } catch (AblyException $e) { + throw new BroadcastException( + sprintf('Ably error: %s', $e->getMessage()) + ); } } diff --git a/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php b/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php index 2c2dc88c3f76..5ae2e03c8f44 100644 --- a/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php +++ b/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php @@ -2,8 +2,11 @@ namespace Illuminate\Broadcasting\Broadcasters; +use Illuminate\Broadcasting\BroadcastException; use Illuminate\Contracts\Redis\Factory as Redis; use Illuminate\Support\Arr; +use Predis\Connection\ConnectionException; +use RedisException; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class RedisBroadcaster extends Broadcaster @@ -105,6 +108,8 @@ public function validAuthenticationResponse($request, $result) * @param string $event * @param array $payload * @return void + * + * @throws \Illuminate\Broadcasting\BroadcastException */ public function broadcast(array $channels, $event, array $payload = []) { @@ -120,10 +125,16 @@ public function broadcast(array $channels, $event, array $payload = []) 'socket' => Arr::pull($payload, 'socket'), ]); - $connection->eval( - $this->broadcastMultipleChannelsScript(), - 0, $payload, ...$this->formatChannels($channels) - ); + try { + $connection->eval( + $this->broadcastMultipleChannelsScript(), + 0, $payload, ...$this->formatChannels($channels) + ); + } catch (ConnectionException|RedisException $e) { + throw new BroadcastException( + sprintf('Redis error: %s.', $e->getMessage()) + ); + } } /** diff --git a/src/Illuminate/Contracts/Broadcasting/Broadcaster.php b/src/Illuminate/Contracts/Broadcasting/Broadcaster.php index 1034e4406823..2d317d0a69c3 100644 --- a/src/Illuminate/Contracts/Broadcasting/Broadcaster.php +++ b/src/Illuminate/Contracts/Broadcasting/Broadcaster.php @@ -28,6 +28,8 @@ public function validAuthenticationResponse($request, $result); * @param string $event * @param array $payload * @return void + * + * @throws \Illuminate\Broadcasting\BroadcastException */ public function broadcast(array $channels, $event, array $payload = []); }