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

Add BroadcastTenancyBootstrapper and TenancyBroadcastManager

This commit is contained in:
lukinovec 2022-12-07 09:38:44 +01:00
parent 7d3298c6bb
commit 9834684402
2 changed files with 140 additions and 0 deletions

View file

@ -0,0 +1,54 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy; // todo new Overrides namespace?
use Illuminate\Broadcasting\BroadcastManager;
use Illuminate\Broadcasting\Broadcasters\Broadcaster;
use Illuminate\Contracts\Broadcasting\Broadcaster as BroadcasterContract;
class TenancyBroadcastManager extends BroadcastManager
{
/**
* Broadcasters to always resolve from the container (even when they're
* cached and available in the $broadcasters property).
*/
public static array $tenantBroadcasters = ['pusher', 'ably'];
/**
* Override the get method so that the broadcasters in $tenantBroadcasters always get resolved,
* even when they're cached and available in the $broadcasters property.
*/
protected function get($name)
{
if (in_array($name, static::$tenantBroadcasters)) {
/** @var Broadcaster|null $cachedBroadcaster */
$cachedBroadcaster = $this->drivers[$name] ?? null;
$this->app->forgetInstance(BroadcasterContract::class);
/** @var Broadcaster $broadcaster */
$broadcaster = $this->resolve($name);
if ($cachedBroadcaster) {
$cachedBroadcaster = invade($cachedBroadcaster);
foreach ($cachedBroadcaster->channels as $channel => $callback) {
$broadcaster->channel($channel, $callback, $cachedBroadcaster->retrieveChannelOptions($channel));
}
}
return $broadcaster;
}
return parent::get($name);
}
public function setDriver(string $name, BroadcasterContract $broadcaster): static
{
$this->drivers[$name] = $broadcaster;
return $this;
}
}