1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-05 23:24:03 +00:00

Simplify BroadcastManager extension, remove setDriver method

This commit is contained in:
lukinovec 2022-12-15 09:06:43 +01:00
parent cfb7e9674c
commit b78a925f19
2 changed files with 13 additions and 23 deletions

View file

@ -31,34 +31,29 @@ class TenancyBroadcastManager extends BroadcastManager
protected function get($name)
{
if (in_array($name, static::$tenantBroadcasters)) {
/** @var Broadcaster|null $cachedBroadcaster */
$cachedBroadcaster = $this->drivers[$name] ?? null;
/** @var Broadcaster $broadcaster */
$broadcaster = $this->resolve($name);
$newBroadcaster = $this->resolve($name);
// If there is a cached broadcaster, give its channels to the newly resolved one
if ($cachedBroadcaster) {
// invade() because channels can't be retrieved through any of the broadcaster's public methods
$cachedBroadcaster = invade($cachedBroadcaster);
foreach ($cachedBroadcaster->channels as $channel => $callback) {
$broadcaster->channel($channel, $callback, $cachedBroadcaster->retrieveChannelOptions($channel));
}
// If there is a current broadcaster, give its channels to the newly resolved one
if ($originalBroadcaster = $this->app->make(BroadcasterContract::class)) {
$this->passChannelsFromOriginalBroadcaster($originalBroadcaster, $newBroadcaster);
}
$this->app->singleton(BroadcasterContract::class, fn (Application $app) => $broadcaster);
$this->app->singleton(BroadcasterContract::class, fn (Application $app) => $newBroadcaster);
return $broadcaster;
return $newBroadcaster;
}
return parent::get($name);
}
public function setDriver(string $name, BroadcasterContract $broadcaster): static
protected function passChannelsFromOriginalBroadcaster(Broadcaster $originalBroadcaster, Broadcaster $newBroadcaster): void
{
$this->drivers[$name] = $broadcaster;
// invade() because channels can't be retrieved through any of the broadcaster's public methods
$originalBroadcaster = invade($originalBroadcaster);
return $this;
foreach ($originalBroadcaster->channels as $channel => $callback) {
$newBroadcaster->channel($channel, $callback, $originalBroadcaster->retrieveChannelOptions($channel));
}
}
}