delete games

This commit is contained in:
Adam 2024-08-22 16:15:18 -04:00
parent 98921dbce1
commit 5845e4793b
3 changed files with 37 additions and 17 deletions

View file

@ -97,6 +97,7 @@ pub fn Browser() -> impl IntoView {
</button> </button>
<button <button
type="button" type="button"
value=&game.uuid
on:click=move |e| { on:click=move |e| {
set_delete_id(event_target_value(&e)); set_delete_id(event_target_value(&e));
} }

View file

@ -19,16 +19,11 @@ use uuid::Uuid;
/// For interacting with the game handler /// For interacting with the game handler
pub enum GameHandlerMessage { pub enum GameHandlerMessage {
NewGame { NewGame(NewGameRequest, SocketAddr),
addr: SocketAddr, JoinGame(String, SocketAddr),
new_game: NewGameRequest,
},
JoinGame {
addr: SocketAddr,
id: String,
},
MoveRequest(PlayerMoveRequest, SocketAddr), MoveRequest(PlayerMoveRequest, SocketAddr),
JudgeDecision(JudgeDecisionRequest, SocketAddr), JudgeDecision(JudgeDecisionRequest, SocketAddr),
DeleteGame(GameDeleteRequest),
} }
/// Handles game stuff /// Handles game stuff
@ -46,13 +41,32 @@ impl GameHandler {
/// Handles incoming messages /// Handles incoming messages
pub async fn handle(&self, message: GameHandlerMessage) { pub async fn handle(&self, message: GameHandlerMessage) {
match message { match message {
NewGame { addr, new_game } => self.create_new_game(addr, new_game).await, NewGame(request, addr) => self.create_new_game(request, addr).await,
JoinGame { addr, id } => self.join_game(addr, id).await, JoinGame(request, addr) => self.join_game(request, addr).await,
MoveRequest(request, addr) => self.handle_player_move(request, addr).await, MoveRequest(request, addr) => self.handle_player_move(request, addr).await,
JudgeDecision(request, addr) => self.handle_judging(request, addr).await, JudgeDecision(request, addr) => self.handle_judging(request, addr).await,
DeleteGame(request) => self.delete_game(request).await,
} }
} }
/// Delete game
async fn delete_game(&self, request: GameDeleteRequest) {
// TODO: add auth lol
let _ = self
.state
.games
.write()
.unwrap()
.remove(&request.delete_game_id)
.unwrap();
// Broadcast game browser update
self.state
.broadcast_tx
.send(meta_games_browser_update(&self.state))
.unwrap();
}
/// Process judging /// Process judging
async fn handle_judging(&self, request: JudgeDecisionRequest, addr: SocketAddr) { async fn handle_judging(&self, request: JudgeDecisionRequest, addr: SocketAddr) {
// Get pointers // Get pointers
@ -213,7 +227,7 @@ impl GameHandler {
} }
/// Puts a user in a game /// Puts a user in a game
async fn join_game(&self, addr: SocketAddr, id: String) { async fn join_game(&self, id: String, addr: SocketAddr) {
// Get pointers // Get pointers
let this_game = self.state.games.read().unwrap().get(&id).unwrap().clone(); let this_game = self.state.games.read().unwrap().get(&id).unwrap().clone();
let this_user = self let this_user = self
@ -300,7 +314,7 @@ impl GameHandler {
} }
/// Creates a new game /// Creates a new game
async fn create_new_game(&self, addr: SocketAddr, new_game: NewGameRequest) { async fn create_new_game(&self, new_game: NewGameRequest, addr: SocketAddr) {
if new_game.packs.is_empty() { if new_game.packs.is_empty() {
tracing::error!("New game cards are empty!"); tracing::error!("New game cards are empty!");
return; return;

View file

@ -48,7 +48,7 @@ impl MessageHandler {
_new_game_request if let Ok(new_game) = from_str::<NewGameRequest>(&text) => { _new_game_request if let Ok(new_game) = from_str::<NewGameRequest>(&text) => {
self.state self.state
.games_tx .games_tx
.send(NewGame { addr, new_game }) .send(NewGame(new_game, addr))
.await .await
.unwrap(); .unwrap();
} }
@ -56,10 +56,7 @@ impl MessageHandler {
_join_game_request if let Ok(join_request) = from_str::<GameJoinRequest>(&text) => { _join_game_request if let Ok(join_request) = from_str::<GameJoinRequest>(&text) => {
self.state self.state
.games_tx .games_tx
.send(JoinGame { .send(JoinGame(join_request.id, addr))
addr,
id: join_request.id,
})
.await .await
.unwrap(); .unwrap();
} }
@ -93,6 +90,14 @@ impl MessageHandler {
.unwrap(); .unwrap();
} }
_delete_game if let Ok(delete_request) = from_str::<GameDeleteRequest>(&text) => {
self.state
.games_tx
.send(DeleteGame(delete_request))
.await
.unwrap();
}
_ => tracing::debug!("Unhandled text from {}", addr), _ => tracing::debug!("Unhandled text from {}", addr),
}, },