[code] RwLock instead of Mutex makes more sense for the GameDB

This commit is contained in:
ddidderr 2025-03-03 17:33:09 +01:00
parent 45a4b9218f
commit f28ecc9f8b
Signed by: ddidderr
GPG Key ID: 3841F1C27E6F0E14

View File

@ -8,18 +8,18 @@ use lanspread_db::db::{GameDB, GameFileDescription};
use lanspread_proto::{Request, Response};
use lanspread_utils::maybe_addr;
use s2n_quic::stream::SendStream;
use tokio::sync::Mutex;
use tokio::sync::RwLock;
use walkdir::WalkDir;
#[derive(Clone, Debug)]
pub(crate) struct RequestHandler {
db: Arc<Mutex<GameDB>>,
db: Arc<RwLock<GameDB>>,
}
impl RequestHandler {
pub(crate) fn new(games: GameDB) -> RequestHandler {
RequestHandler {
db: Arc::new(Mutex::new(games)),
db: Arc::new(RwLock::new(games)),
}
}
@ -27,11 +27,11 @@ impl RequestHandler {
match request {
Request::Ping => Response::Pong,
Request::ListGames => {
let db = self.db.lock().await;
let db = self.db.read().await;
Response::Games(db.all_games().into_iter().cloned().collect())
}
Request::GetGame { id } => {
if self.db.lock().await.get_game_by_id(&id).is_none() {
if self.db.read().await.get_game_by_id(&id).is_none() {
tracing::error!("Game not found in DB: {id}");
return Response::GameNotFound(id);
}