mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 20:34:03 +00:00
Simplify BroadcastManager extension, remove setDriver method
This commit is contained in:
parent
cfb7e9674c
commit
b78a925f19
2 changed files with 13 additions and 23 deletions
|
|
@ -60,12 +60,7 @@ class BroadcastTenancyBootstrapper implements TenancyBootstrapper
|
||||||
|
|
||||||
// Make BroadcastManager resolve to a custom BroadcastManager which makes the broadcasters use the tenant credentials
|
// Make BroadcastManager resolve to a custom BroadcastManager which makes the broadcasters use the tenant credentials
|
||||||
$this->app->extend(BroadcastManager::class, function (BroadcastManager $broadcastManager) {
|
$this->app->extend(BroadcastManager::class, function (BroadcastManager $broadcastManager) {
|
||||||
$tenancyBroadcastManager = new TenancyBroadcastManager($this->app);
|
return new TenancyBroadcastManager($this->app);
|
||||||
|
|
||||||
// Because the new custom TenancyBroadcastManager won't have the original broadcasters
|
|
||||||
// It also won't have the channels registered in routes/channels.php, and without these, broadcasting won't work
|
|
||||||
// So we pass the default broadcaster to the new TenancyBroadcastManager
|
|
||||||
return $tenancyBroadcastManager->setDriver($broadcastManager->getDefaultDriver(), $broadcastManager->driver());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,34 +31,29 @@ class TenancyBroadcastManager extends BroadcastManager
|
||||||
protected function get($name)
|
protected function get($name)
|
||||||
{
|
{
|
||||||
if (in_array($name, static::$tenantBroadcasters)) {
|
if (in_array($name, static::$tenantBroadcasters)) {
|
||||||
/** @var Broadcaster|null $cachedBroadcaster */
|
|
||||||
$cachedBroadcaster = $this->drivers[$name] ?? null;
|
|
||||||
|
|
||||||
/** @var Broadcaster $broadcaster */
|
/** @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 there is a current broadcaster, give its channels to the newly resolved one
|
||||||
if ($cachedBroadcaster) {
|
if ($originalBroadcaster = $this->app->make(BroadcasterContract::class)) {
|
||||||
// invade() because channels can't be retrieved through any of the broadcaster's public methods
|
$this->passChannelsFromOriginalBroadcaster($originalBroadcaster, $newBroadcaster);
|
||||||
$cachedBroadcaster = invade($cachedBroadcaster);
|
|
||||||
|
|
||||||
foreach ($cachedBroadcaster->channels as $channel => $callback) {
|
|
||||||
$broadcaster->channel($channel, $callback, $cachedBroadcaster->retrieveChannelOptions($channel));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$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);
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue