9
9
use BeyondCode \LaravelWebSockets \Server \Logger \WebsocketsLogger ;
10
10
use BeyondCode \LaravelWebSockets \Server \WebSocketServerFactory ;
11
11
use BeyondCode \LaravelWebSockets \Statistics \DnsResolver ;
12
- use BeyondCode \LaravelWebSockets \Statistics \Logger \HttpStatisticsLogger ;
13
12
use BeyondCode \LaravelWebSockets \Statistics \Logger \StatisticsLogger as StatisticsLoggerInterface ;
14
13
use BeyondCode \LaravelWebSockets \WebSockets \Channels \ChannelManager ;
15
14
use Clue \React \Buzz \Browser ;
16
15
use Illuminate \Console \Command ;
16
+ use Illuminate \Support \Facades \Cache ;
17
17
use React \Dns \Config \Config as DnsConfig ;
18
18
use React \Dns \Resolver \Factory as DnsFactory ;
19
19
use React \Dns \Resolver \ResolverInterface ;
@@ -29,6 +29,9 @@ class StartWebSocketServer extends Command
29
29
/** @var \React\EventLoop\LoopInterface */
30
30
protected $ loop ;
31
31
32
+ /** @var int */
33
+ protected $ lastRestart ;
34
+
32
35
public function __construct ()
33
36
{
34
37
parent ::__construct ();
@@ -43,6 +46,7 @@ public function handle()
43
46
->configureHttpLogger ()
44
47
->configureMessageLogger ()
45
48
->configureConnectionLogger ()
49
+ ->configureRestartTimer ()
46
50
->registerEchoRoutes ()
47
51
->registerCustomRoutes ()
48
52
->startWebSocketServer ();
@@ -61,7 +65,9 @@ protected function configureStatisticsLogger()
61
65
$ browser = new Browser ($ this ->loop , $ connector );
62
66
63
67
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 );
65
71
});
66
72
67
73
$ this ->loop ->addPeriodicTimer (config ('websockets.statistics.interval_in_seconds ' ), function () {
@@ -104,6 +110,19 @@ protected function configureConnectionLogger()
104
110
return $ this ;
105
111
}
106
112
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
+
107
126
protected function registerEchoRoutes ()
108
127
{
109
128
WebSocketsRouter::echo ();
@@ -150,4 +169,9 @@ protected function getDnsResolver(): ResolverInterface
150
169
$ this ->loop
151
170
);
152
171
}
172
+
173
+ protected function getLastRestart ()
174
+ {
175
+ return Cache::get ('beyondcode:websockets:restart ' , 0 );
176
+ }
153
177
}
0 commit comments