publishes([ __DIR__.'/../config/websockets.php' => base_path('config/websockets.php'), ], 'config'); if (! class_exists('CreateWebSocketsStatisticsEntries')) { $this->publishes([ __DIR__.'/../database/migrations/cretae_websockets_statistics_entries_table.php.stub' => database_path('migrations/'.date('Y_m_d_His', time()).'_cretae_websockets_statistics_entries_table.php'), ], 'migrations'); } $this->registerRouteMacro(); $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::post('auth', AuthenticateDashboard::class); Route::post('event', SendMessage::class); }); //TODO: add middleware Route::prefix($prefix)->namespace('\\')->group(function() { Route::post('statistics', [WebsocketStatisticsEntriesController::class, 'store']); }); }); } protected function registerDashboardGate() { Gate::define('viewWebSocketsDashboard', function ($user = null) { return app()->environment('local'); }); } }