diff --git a/config/websockets.php b/config/websockets.php index a4517cf..90de3e7 100644 --- a/config/websockets.php +++ b/config/websockets.php @@ -1,14 +1,61 @@ [ + 'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), + + 'path' => 'laravel-websockets', + + 'middleware' => [ + 'web', + \BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize::class, + ], + + ], + + 'managers' => [ + + /* + |-------------------------------------------------------------------------- + | Application Manager + |-------------------------------------------------------------------------- + | + | An Application manager determines how your websocket server allows + | the use of the TCP protocol based on, for example, a list of allowed + | applications. + | By default, it uses the defined array in the config file, but you can + | anytime implement the same interface as the class and add your own + | custom method to retrieve the apps. + | + */ + + 'app' => \BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class, + + /* + |-------------------------------------------------------------------------- + | Channel Manager + |-------------------------------------------------------------------------- + | + | When users subscribe or unsubscribe from specific channels, + | the connections are stored to keep track of any interaction with the + | WebSocket server. + | You can however add your own implementation that will help the store + | of the channels alongside their connections. + | + */ + + 'channel' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class, ], /* @@ -34,15 +81,6 @@ return [ ], ], - /* - * This class is responsible for finding the apps. The default provider - * will use the apps defined in this config file. - * - * You can create a custom provider by implementing the - * `AppProvider` interface. - */ - 'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class, - /* * This array contains the hosts of which you want to allow incoming requests. * Leave this empty if you want to accept requests from all hosts. @@ -56,55 +94,6 @@ return [ */ 'max_request_size_in_kb' => 250, - /* - * This path will be used to register the necessary routes for the package. - */ - 'path' => 'laravel-websockets', - - /* - * Dashboard Routes Middleware - * - * These middleware will be assigned to every dashboard route, giving you - * the chance to add your own middleware to this list or change any of - * the existing middleware. Or, you can simply stick with this list. - */ - 'middleware' => [ - 'web', - Authorize::class, - ], - - 'statistics' => [ - /* - * This model will be used to store the statistics of the WebSocketsServer. - * The only requirement is that the model should extend - * `WebSocketsStatisticsEntry` provided by this package. - */ - 'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class, - - /** - * The Statistics Logger will, by default, handle the incoming statistics, store them - * and then release them into the database on each interval defined below. - */ - 'logger' => \BeyondCode\LaravelWebSockets\Statistics\Logger::class, - - /* - * Here you can specify the interval in seconds at which statistics should be logged. - */ - 'interval_in_seconds' => 60, - - /* - * When the clean-command is executed, all recorded statistics older than - * the number of days specified here will be deleted. - */ - 'delete_statistics_older_than_days' => 60, - - /* - * Use an DNS resolver to make the requests to the statistics logger - * default is to resolve everything to 127.0.0.1. - */ - 'perform_dns_lookup' => false, - ], - /* * Define the optional SSL context for your WebSocket connections. * You can see all available options at: http://php.net/manual/en/context.ssl.php @@ -130,12 +119,41 @@ return [ 'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), ], - /* - * Channel Manager - * This class handles how channel persistence is handled. - * By default, persistence is stored in an array by the running webserver. - * The only requirement is that the class should implement - * `ChannelManager` interface provided by this package. - */ - 'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class, + 'statistics' => [ + + /* + * This model will be used to store the statistics of the WebSocketsServer. + * The only requirement is that the model should extend + * `WebSocketsStatisticsEntry` provided by this package. + */ + 'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class, + + /** + * The Statistics Logger will, by default, handle the incoming statistics, store them + * and then release them into the database on each interval defined below. + */ + + 'logger' => \BeyondCode\LaravelWebSockets\Statistics\Logger::class, + + /* + * Here you can specify the interval in seconds at which statistics should be logged. + */ + + 'interval_in_seconds' => 60, + + /* + * When the clean-command is executed, all recorded statistics older than + * the number of days specified here will be deleted. + */ + + 'delete_statistics_older_than_days' => 60, + + /* + * Use an DNS resolver to make the requests to the statistics logger + * default is to resolve everything to 127.0.0.1. + */ + + 'perform_dns_lookup' => false, + ], + ]; diff --git a/src/WebSocketsServiceProvider.php b/src/WebSocketsServiceProvider.php index cf32f34..c68379a 100644 --- a/src/WebSocketsServiceProvider.php +++ b/src/WebSocketsServiceProvider.php @@ -54,19 +54,20 @@ class WebSocketsServiceProvider extends ServiceProvider }); $this->app->singleton(ChannelManager::class, function () { - return config('websockets.channel_manager') !== null && class_exists(config('websockets.channel_manager')) - ? app(config('websockets.channel_manager')) : new ArrayChannelManager(); + $channelManager = config('websockets.managers.channel', ArrayChannelManager::class); + + return new $channelManager; }); $this->app->singleton(AppProvider::class, function () { - return app(config('websockets.app_provider')); + return app(config('websockets.managers.app')); }); } protected function registerRoutes() { - Route::prefix(config('websockets.path'))->group(function () { - Route::middleware(config('websockets.middleware', [AuthorizeDashboard::class]))->group(function () { + Route::prefix(config('websockets.dashboard.path'))->group(function () { + Route::middleware(config('websockets.dashboard.middleware', [AuthorizeDashboard::class]))->group(function () { Route::get('/', ShowDashboard::class); Route::get('/api/{appId}/statistics', [DashboardApiController::class, 'getStatistics']); Route::post('auth', AuthenticateDashboard::class);