Viewing file: BroadcastManager.php (5.13 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Broadcasting;
use Pusher; use Closure; use Illuminate\Support\Arr; use InvalidArgumentException; use Illuminate\Broadcasting\Broadcasters\LogBroadcaster; use Illuminate\Broadcasting\Broadcasters\RedisBroadcaster; use Illuminate\Broadcasting\Broadcasters\PusherBroadcaster; use Illuminate\Contracts\Broadcasting\Factory as FactoryContract;
class BroadcastManager implements FactoryContract { /** * The application instance. * * @var \Illuminate\Foundation\Application */ protected $app;
/** * The array of resolved broadcast drivers. * * @var array */ protected $drivers = [];
/** * The registered custom driver creators. * * @var array */ protected $customCreators = [];
/** * Create a new manager instance. * * @param \Illuminate\Foundation\Application $app * @return void */ public function __construct($app) { $this->app = $app; }
/** * Get a driver instance. * * @param string $driver * @return mixed */ public function connection($driver = null) { return $this->driver($driver); }
/** * Get a driver instance. * * @param string $name * @return mixed */ public function driver($name = null) { $name = $name ?: $this->getDefaultDriver();
return $this->drivers[$name] = $this->get($name); }
/** * Attempt to get the connection from the local cache. * * @param string $name * @return \Illuminate\Contracts\Broadcasting\Broadcaster */ protected function get($name) { return isset($this->drivers[$name]) ? $this->drivers[$name] : $this->resolve($name); }
/** * Resolve the given store. * * @param string $name * @return \Illuminate\Contracts\Broadcasting\Broadcaster * * @throws \InvalidArgumentException */ protected function resolve($name) { $config = $this->getConfig($name);
if (is_null($config)) { throw new InvalidArgumentException("Broadcaster [{$name}] is not defined."); }
if (isset($this->customCreators[$config['driver']])) { return $this->callCustomCreator($config); } else { $driverMethod = 'create'.ucfirst($config['driver']).'Driver';
if (method_exists($this, $driverMethod)) { return $this->{$driverMethod}($config); } else { throw new InvalidArgumentException("Driver [{$config['driver']}] is not supported."); } } }
/** * Call a custom driver creator. * * @param array $config * @return mixed */ protected function callCustomCreator(array $config) { return $this->customCreators[$config['driver']]($this->app, $config); }
/** * Create an instance of the driver. * * @param array $config * @return \Illuminate\Contracts\Broadcasting\Broadcaster */ protected function createPusherDriver(array $config) { return new PusherBroadcaster( new Pusher($config['key'], $config['secret'], $config['app_id'], Arr::get($config, 'options', [])) ); }
/** * Create an instance of the driver. * * @param array $config * @return \Illuminate\Contracts\Broadcasting\Broadcaster */ protected function createRedisDriver(array $config) { return new RedisBroadcaster( $this->app->make('redis'), Arr::get($config, 'connection') ); }
/** * Create an instance of the driver. * * @param array $config * @return \Illuminate\Contracts\Broadcasting\Broadcaster */ protected function createLogDriver(array $config) { return new LogBroadcaster( $this->app->make('Psr\Log\LoggerInterface') ); }
/** * Get the connection configuration. * * @param string $name * @return array */ protected function getConfig($name) { return $this->app['config']["broadcasting.connections.{$name}"]; }
/** * Get the default driver name. * * @return string */ public function getDefaultDriver() { return $this->app['config']['broadcasting.default']; }
/** * Set the default driver name. * * @param string $name * @return void */ public function setDefaultDriver($name) { $this->app['config']['broadcasting.default'] = $name; }
/** * Register a custom driver creator Closure. * * @param string $driver * @param \Closure $callback * @return $this */ public function extend($driver, Closure $callback) { $this->customCreators[$driver] = $callback;
return $this; }
/** * Dynamically call the default driver instance. * * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { return call_user_func_array([$this->driver(), $method], $parameters); } }
|