Viewing file: PusherBroadcaster.php (3.95 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Broadcasting\Broadcasters;
use Illuminate\Broadcasting\BroadcastException; use Illuminate\Support\Arr; use Pusher\ApiErrorException; use Pusher\Pusher; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class PusherBroadcaster extends Broadcaster { use UsePusherChannelConventions;
/** * The Pusher SDK instance. * * @var \Pusher\Pusher */ protected $pusher;
/** * Create a new broadcaster instance. * * @param \Pusher\Pusher $pusher * @return void */ public function __construct(Pusher $pusher) { $this->pusher = $pusher; }
/** * Authenticate the incoming request for a given channel. * * @param \Illuminate\Http\Request $request * @return mixed * * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException */ public function auth($request) { $channelName = $this->normalizeChannelName($request->channel_name);
if (empty($request->channel_name) || ($this->isGuardedChannel($request->channel_name) && ! $this->retrieveUser($request, $channelName))) { throw new AccessDeniedHttpException; }
return parent::verifyUserCanAccessChannel( $request, $channelName ); }
/** * Return the valid authentication response. * * @param \Illuminate\Http\Request $request * @param mixed $result * @return mixed */ public function validAuthenticationResponse($request, $result) { if (str_starts_with($request->channel_name, 'private')) { return $this->decodePusherResponse( $request, $this->pusher->socket_auth($request->channel_name, $request->socket_id) ); }
$channelName = $this->normalizeChannelName($request->channel_name);
$user = $this->retrieveUser($request, $channelName);
$broadcastIdentifier = method_exists($user, 'getAuthIdentifierForBroadcasting') ? $user->getAuthIdentifierForBroadcasting() : $user->getAuthIdentifier();
return $this->decodePusherResponse( $request, $this->pusher->presence_auth( $request->channel_name, $request->socket_id, $broadcastIdentifier, $result ) ); }
/** * Decode the given Pusher response. * * @param \Illuminate\Http\Request $request * @param mixed $response * @return array */ protected function decodePusherResponse($request, $response) { if (! $request->input('callback', false)) { return json_decode($response, true); }
return response()->json(json_decode($response, true)) ->withCallback($request->callback); }
/** * Broadcast the given event. * * @param array $channels * @param string $event * @param array $payload * @return void * * @throws \Illuminate\Broadcasting\BroadcastException */ public function broadcast(array $channels, $event, array $payload = []) { $socket = Arr::pull($payload, 'socket');
$parameters = $socket !== null ? ['socket_id' => $socket] : [];
try { $this->pusher->trigger( $this->formatChannels($channels), $event, $payload, $parameters ); } catch (ApiErrorException $e) { throw new BroadcastException( sprintf('Pusher error: %s.', $e->getMessage()) ); } }
/** * Get the Pusher SDK instance. * * @return \Pusher\Pusher */ public function getPusher() { return $this->pusher; }
/** * Set the Pusher SDK instance. * * @param \Pusher\Pusher $pusher * @return void */ public function setPusher($pusher) { $this->pusher = $pusher; } }
|