Skip to content

Commit

Permalink
Merge pull request #175 from laravel-enso/feature/websocketsProvider
Browse files Browse the repository at this point in the history
Feature/websockets provider
  • Loading branch information
raftx24 committed Nov 19, 2020
2 parents 80b0d23 + ae3cdeb commit 2020468
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 23 deletions.
1 change: 1 addition & 0 deletions composer.json
Expand Up @@ -79,6 +79,7 @@
"LaravelEnso\\Core\\AppServiceProvider",
"LaravelEnso\\Core\\AuthServiceProvider",
"LaravelEnso\\Core\\BroadcastServiceProvider",
"LaravelEnso\\Core\\WebsocketServiceProvider",
"LaravelEnso\\Core\\EventServiceProvider"
]
}
Expand Down
5 changes: 5 additions & 0 deletions src/AppServiceProvider.php
Expand Up @@ -13,13 +13,18 @@
use LaravelEnso\Core\Http\Middleware\VerifyActiveState;
use LaravelEnso\Core\Http\Middleware\XssSanitizer;
use LaravelEnso\Core\Models\User;
use LaravelEnso\Core\Services\Websockets;
use LaravelEnso\Helpers\Services\FactoryResolver;
use LaravelEnso\Impersonate\Http\Middleware\Impersonate;
use LaravelEnso\Localisation\Http\Middleware\SetLanguage;
use LaravelEnso\Permissions\Http\Middleware\VerifyRouteAccess;

class AppServiceProvider extends ServiceProvider
{
public $singletons = [
'websockets' => Websockets::class,
];

public function boot()
{
JsonResource::withoutWrapping();
Expand Down
13 changes: 13 additions & 0 deletions src/Facades/Websockets.php
@@ -0,0 +1,13 @@
<?php

namespace LaravelEnso\Core\Facades;

use Illuminate\Support\Facades\Facade;

class Websockets extends Facade
{
public static function getFacadeAccessor()
{
return 'websockets';
}
}
25 changes: 2 additions & 23 deletions src/Http/Responses/AppState.php
Expand Up @@ -10,6 +10,7 @@
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Session;
use LaravelEnso\Core\Enums\Themes;
use LaravelEnso\Core\Facades\Websockets;
use LaravelEnso\Core\Http\Resources\User;
use LaravelEnso\Core\Services\Inspiring;
use LaravelEnso\Core\Services\LocalState;
Expand All @@ -20,7 +21,6 @@
use LaravelEnso\Menus\Http\Resources\Menu;
use LaravelEnso\Menus\Services\TreeBuilder;
use LaravelEnso\Permissions\Models\Permission;
use LaravelEnso\Roles\Enums\Roles;
use LaravelEnso\Roles\Models\Role;

class AppState implements Responsable
Expand Down Expand Up @@ -53,12 +53,7 @@ protected function response(): array
'key' => Config::get('broadcasting.connections.pusher.key'),
'options' => Config::get('broadcasting.connections.pusher.options'),
],
'channels' => [
'privateChannel' => $this->privateChannel(),
'ioChannel' => $this->ioChannel(),
'appUpdates' => 'app-updates',
'taskChannel' => 'tasks.'.Auth::user()->id,
],
'channels' => Websockets::all(),
],
'meta' => $this->meta(),
'enums' => Enums::all(),
Expand Down Expand Up @@ -123,22 +118,6 @@ protected function route(Permission $permission): ?array
: null;
}

protected function privateChannel(): string
{
return (new Collection(
explode('\\', Config::get('auth.providers.users.model'))
))->push(Auth::user()->id)->implode('.');
}

protected function ioChannel(): string
{
$roles = App::make(Roles::class);

return in_array(Auth::user()->role_id, [$roles::Admin, $roles::Supervisor])
? 'operations'
: 'operations.'.Auth::user()->id;
}

protected function prepare(): void
{
$this->role = Auth::user()->role()
Expand Down
35 changes: 35 additions & 0 deletions src/Services/Websockets.php
@@ -0,0 +1,35 @@
<?php

namespace LaravelEnso\Core\Services;

use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;

class Websockets
{
private Collection $channels;

public function __construct()
{
$this->channels = new Collection();
}

public function register($channels)
{
(new Collection($channels))->each(fn ($channel, $key) => $this->channels->put(
$key,
$channel
));
}

public function remove($aliases)
{
(new Collection($aliases))->each(fn ($alias) => $this->channels->forget($alias));
}

public function all()
{
return $this->channels
->map(fn ($channel) => is_string($channel) ? $channel : $channel->call($this, Auth::user()));
}
}
31 changes: 31 additions & 0 deletions src/WebsocketServiceProvider.php
@@ -0,0 +1,31 @@
<?php

namespace LaravelEnso\Core;

use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\ServiceProvider;
use LaravelEnso\Core\Facades\Websockets;
use LaravelEnso\Core\Models\User;

class WebsocketServiceProvider extends ServiceProvider
{
protected array $register = [];

public function boot()
{
return static::class === self::class
? $this->coreChannels()
: Websockets::register($this->register);
}

private function coreChannels()
{
Websockets::register([
'appUpdates' => 'app-updates',
'private' => fn (User $user) => (new Collection(
explode('\\', Config::get('auth.providers.users.model'))
))->push($user->id)->implode('.'),
]);
}
}

0 comments on commit 2020468

Please sign in to comment.