publishes([ __DIR__.'/../config/websockets.php' => base_path('config/websockets.php'), ], 'config'); if (! class_exists('CreateWebSocketsStatisticsEntries')) { $this->publishes([ __DIR__.'/../database/migrations/create_websockets_statistics_entries_table.php.stub' => database_path('migrations/'.date('Y_m_d_His', time()).'_create_websockets_statistics_entries_table.php'), ], 'migrations'); } $this->registerRouteMacro(); $this->registerStatisticRoute(); $this->registerDashboardGate(); $this->loadViewsFrom(__DIR__.'/../resources/views/', 'websockets'); $this->commands([ Console\StartWebSocketServer::class, ]); } public function register() { $this->mergeConfigFrom(__DIR__.'/../config/websockets.php', 'websockets'); $this->app->singleton('websockets.router', function() { return new Router(); }); $this->app->singleton(ChannelManager::class, function() { return new ChannelManager(); }); $this->app->singleton(AppProvider::class, function() { return app(config('websockets.app_provider')); }); } protected function registerRouteMacro() { Route::macro('webSockets', function($prefix = 'laravel-websockets') { Route::prefix($prefix)->namespace('\\')->middleware(Authorize::class)->group(function() { Route::get('/', ShowDashboard::class); Route::get('/api/{appId}/statistics', DashboardApiController::class.'@getStatistics'); Route::post('auth', AuthenticateDashboard::class); Route::post('event', SendMessage::class); }); }); } protected function registerStatisticRoute() { Route::prefix('/laravel-websockets')->namespace('\\')->group(function() { Route::post('statistics', [WebsocketStatisticsEntriesController::class, 'store']); }); } protected function registerDashboardGate() { Gate::define('viewWebSocketsDashboard', function ($user = null) { return app()->environment('local'); }); } }