loop = LoopFactory::create(); } public function handle() { $this ->configureStatisticsLogger() ->configureHttpLogger() ->configureMessageLogger() ->configureConnectionLogger() ->registerEchoRoutes() ->startWebSocketServer(); } protected function configureStatisticsLogger() { $handler = new HttpClientAdapter($this->loop); $client = new Client([ 'handler' => HandlerStack::create($handler), ]); app()->singleton('websockets.statisticslogger', function() use ($client) { return new StatisticsLogger(app(ChannelManager::class), $client); }); $this->loop->addPeriodicTimer(60, function() { StatisticsLogger::save($this->loop); }); return $this; } protected function configureHttpLogger() { app()->singleton(HttpLogger::class, function() { return (new HttpLogger($this->output)) ->enable(config('app.debug')) ->verbose($this->output->isVerbose()); }); return $this; } protected function configureMessageLogger() { app()->singleton(WebsocketsLogger::class, function() { return (new WebsocketsLogger($this->output)) ->enable(config('app.debug')) ->verbose($this->output->isVerbose()); }); return $this; } protected function configureConnectionLogger() { app()->bind(ConnectionLogger::class, function() { return (new ConnectionLogger($this->output)) ->enable(config('app.debug')) ->verbose($this->output->isVerbose()); }); return $this; } protected function registerEchoRoutes() { WebSocketsRouter::echo(); return $this; } protected function startWebSocketServer() { $this->info("Starting the WebSocket server on port {$this->option('port')}..."); $routes = WebSocketsRouter::getRoutes(); /** 🛰 Start the server 🛰 */ (new WebSocketServerFactory()) ->setLoop($this->loop) ->useRoutes($routes) ->setHost($this->option('host')) ->setPort($this->option('port')) ->setConsoleOutput($this->output) ->createServer() ->run(); } }