99use BeyondCode \LaravelWebSockets \Server \Logger \WebsocketsLogger ;
1010use BeyondCode \LaravelWebSockets \Server \WebSocketServerFactory ;
1111use BeyondCode \LaravelWebSockets \Statistics \DnsResolver ;
12- use BeyondCode \LaravelWebSockets \Statistics \Logger \HttpStatisticsLogger ;
1312use BeyondCode \LaravelWebSockets \Statistics \Logger \StatisticsLogger as StatisticsLoggerInterface ;
1413use BeyondCode \LaravelWebSockets \WebSockets \Channels \ChannelManager ;
1514use Clue \React \Buzz \Browser ;
1615use Illuminate \Console \Command ;
16+ use Illuminate \Support \Facades \Cache ;
1717use React \Dns \Config \Config as DnsConfig ;
1818use React \Dns \Resolver \Factory as DnsFactory ;
1919use React \Dns \Resolver \ResolverInterface ;
@@ -29,6 +29,9 @@ class StartWebSocketServer extends Command
2929 /** @var \React\EventLoop\LoopInterface */
3030 protected $ loop ;
3131
32+ /** @var int */
33+ protected $ lastRestart ;
34+
3235 public function __construct ()
3336 {
3437 parent ::__construct ();
@@ -43,6 +46,7 @@ public function handle()
4346 ->configureHttpLogger ()
4447 ->configureMessageLogger ()
4548 ->configureConnectionLogger ()
49+ ->configureRestartTimer ()
4650 ->registerEchoRoutes ()
4751 ->registerCustomRoutes ()
4852 ->startWebSocketServer ();
@@ -61,7 +65,9 @@ protected function configureStatisticsLogger()
6165 $ browser = new Browser ($ this ->loop , $ connector );
6266
6367 app ()->singleton (StatisticsLoggerInterface::class, function () use ($ browser ) {
64- return new HttpStatisticsLogger (app (ChannelManager::class), $ browser );
68+ $ class = config ('websockets.statistics.logger ' , \BeyondCode \LaravelWebSockets \Statistics \Logger \HttpStatisticsLogger::class);
69+
70+ return new $ class (app (ChannelManager::class), $ browser );
6571 });
6672
6773 $ this ->loop ->addPeriodicTimer (config ('websockets.statistics.interval_in_seconds ' ), function () {
@@ -104,6 +110,19 @@ protected function configureConnectionLogger()
104110 return $ this ;
105111 }
106112
113+ public function configureRestartTimer ()
114+ {
115+ $ this ->lastRestart = $ this ->getLastRestart ();
116+
117+ $ this ->loop ->addPeriodicTimer (10 , function () {
118+ if ($ this ->getLastRestart () !== $ this ->lastRestart ) {
119+ $ this ->loop ->stop ();
120+ }
121+ });
122+
123+ return $ this ;
124+ }
125+
107126 protected function registerEchoRoutes ()
108127 {
109128 WebSocketsRouter::echo ();
@@ -150,4 +169,9 @@ protected function getDnsResolver(): ResolverInterface
150169 $ this ->loop
151170 );
152171 }
172+
173+ protected function getLastRestart ()
174+ {
175+ return Cache::get ('beyondcode:websockets:restart ' , 0 );
176+ }
153177}
0 commit comments