@@ -40,6 +40,11 @@ trait InteractsWithWebsocket
4040 */
4141 protected $ payloadParser ;
4242
43+ /**
44+ * @var SwooleTW\Http\Websocket\Rooms\RoomContract
45+ */
46+ protected $ websocketRoom ;
47+
4348 /**
4449 * Websocket server events.
4550 *
@@ -217,6 +222,7 @@ protected function prepareWebsocket()
217222 if ($ isWebsocket ) {
218223 $ this ->events = array_merge ($ this ->events ?? [], $ this ->wsEvents );
219224 $ this ->isServerWebsocket = true ;
225+ $ this ->prepareWebsocketRoom ();
220226 $ this ->setPayloadParser (new $ parser );
221227 }
222228 }
@@ -250,6 +256,20 @@ protected function prepareWebsocketHandler()
250256 $ this ->setWebsocketHandler ($ this ->app ->make ($ handlerClass ));
251257 }
252258
259+ /**
260+ * Prepare websocket room.
261+ */
262+ protected function prepareWebsocketRoom ()
263+ {
264+ $ config = $ this ->container ->make ('config ' );
265+ $ driver = $ config ->get ('swoole_websocket.default ' );
266+ $ websocketConfig = $ config ->get ("swoole_websocket.settings. {$ driver }" );
267+ $ className = $ config ->get ("swoole_websocket.drivers. {$ driver }" );
268+
269+ $ this ->websocketRoom = new $ className ($ websocketConfig );
270+ $ this ->websocketRoom ->prepare ();
271+ }
272+
253273 /**
254274 * Set websocket handler.
255275 *
@@ -290,17 +310,8 @@ protected function createRoom(string $class, array $settings): RoomContract
290310 */
291311 protected function bindRoom (): void
292312 {
293- $ this ->app ->singleton (RoomContract::class, function (Container $ container ) {
294- $ config = $ container ->make ('config ' );
295- $ driver = $ config ->get ('swoole_websocket.default ' );
296- $ settings = $ config ->get ("swoole_websocket.settings. {$ driver }" );
297- $ className = $ config ->get ("swoole_websocket.drivers. {$ driver }" );
298-
299- // create room instance and initialize
300- $ room = $ this ->createRoom ($ className , $ settings );
301- $ room ->prepare ();
302-
303- return $ room ;
313+ $ this ->app ->singleton (RoomContract::class, function (Container $ app ) {
314+ return $ this ->websocketRoom ;
304315 });
305316
306317 $ this ->app ->alias (RoomContract::class, 'swoole.room ' );
0 commit comments