From 3fe651794e0d92ba47c695fe4443974510f0510d Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Wed, 22 Jan 2025 20:55:06 +0900 Subject: [PATCH] Add LIO endpoint to part rooms --- .../Controllers/InterOp/Multiplayer/RoomsController.php | 8 ++++++++ app/Http/Controllers/Multiplayer/RoomsController.php | 6 ++++-- app/Models/Multiplayer/Room.php | 5 +++++ routes/web.php | 1 + 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/InterOp/Multiplayer/RoomsController.php b/app/Http/Controllers/InterOp/Multiplayer/RoomsController.php index 6136131e57c..337dfc1b964 100644 --- a/app/Http/Controllers/InterOp/Multiplayer/RoomsController.php +++ b/app/Http/Controllers/InterOp/Multiplayer/RoomsController.php @@ -23,6 +23,14 @@ public function join(string $id, string $userId) return $room->getKey(); } + public function part(string $id, string $userId) + { + $user = User::findOrFail($userId); + $room = Room::findOrFail($id); + + return $room->part($user); + } + public function store() { $params = \Request::all(); diff --git a/app/Http/Controllers/Multiplayer/RoomsController.php b/app/Http/Controllers/Multiplayer/RoomsController.php index 00d0bdd7c13..d0d8bd748b4 100644 --- a/app/Http/Controllers/Multiplayer/RoomsController.php +++ b/app/Http/Controllers/Multiplayer/RoomsController.php @@ -138,12 +138,14 @@ public function leaderboard($roomId) public function part($roomId, $userId) { + $currentUser = \Auth::user(); // this allows admins/host/whoever to remove users from games in the future - if (get_int($userId) !== auth()->user()->user_id) { + if (get_int($userId) !== $currentUser->getKey()) { abort(403); } - Room::findOrFail($roomId)->channel->removeUser(auth()->user()); + $room = Room::findOrFail($roomId); + $room->part($currentUser); return response([], 204); } diff --git a/app/Models/Multiplayer/Room.php b/app/Models/Multiplayer/Room.php index 47e6dcad85e..15bc27784f5 100644 --- a/app/Models/Multiplayer/Room.php +++ b/app/Models/Multiplayer/Room.php @@ -507,6 +507,11 @@ public function join(User $user) $this->channel->addUser($user); } + public function part(User $user) + { + $this->channel->removeUser($user); + } + public function participants(): HasMany { $query = $this->userHighScores(); diff --git a/routes/web.php b/routes/web.php index b601b239d58..4e86b47085f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -604,6 +604,7 @@ Route::group(['as' => 'multiplayer.', 'namespace' => 'Multiplayer', 'prefix' => 'multiplayer'], function () { Route::put('rooms/{room}/users/{user}', 'RoomsController@join')->name('rooms.join'); + Route::delete('rooms/{room}/users/{user}', 'RoomsController@part')->name('rooms.part'); Route::apiResource('rooms', 'RoomsController', ['only' => ['store']]); });