Skip to content

Commit e66900d

Browse files
committed
fix initialization for websocket room
1 parent acb7f6c commit e66900d

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

src/Concerns/InteractsWithWebsocket.php

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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');

src/Websocket/Rooms/TableRoom.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function prepare(): RoomContract
4545
}
4646

4747
/**
48-
* Add multiple socket fds to a room.
48+
* Add a socket fd to multiple rooms.
4949
*
5050
* @param int fd
5151
* @param array|string rooms
@@ -72,7 +72,7 @@ public function add(int $fd, $roomNames)
7272
}
7373

7474
/**
75-
* Delete multiple socket fds from a room.
75+
* Delete a socket fd from multiple rooms.
7676
*
7777
* @param int fd
7878
* @param array|string rooms
@@ -95,7 +95,7 @@ public function delete(int $fd, $roomNames = [])
9595
$removeRooms[] = $room;
9696
}
9797

98-
$this->setRooms($fd, collect($allRooms)->diff($removeRooms)->values()->toArray());
98+
$this->setRooms($fd, array_values(array_diff($allRooms, $removeRooms)));
9999
}
100100

101101
/**

0 commit comments

Comments
 (0)