diff --git a/client/src/scripts/main.js b/client/src/scripts/main.js index 09f8802..f08ad1c 100644 --- a/client/src/scripts/main.js +++ b/client/src/scripts/main.js @@ -59,11 +59,12 @@ $(() => { App.socket.addEventListener("message", (e) => { let response = JSON.parse(e.data); let event = response.event; - + if(event == 'open') { App.userId = response.id; } else if (event == 'new_user') { - $('.chat-body').append(newUserText(response)); + if(response.id != App.userId) + $('.chat-body').append(newUserText(response)); } else if (event == 'user_gone') { $('.chat-body').append(userGoneText()); } else if (event == 'message') { diff --git a/server/src/bin.rs b/server/src/bin.rs index b755afa..f1e9307 100644 --- a/server/src/bin.rs +++ b/server/src/bin.rs @@ -20,6 +20,8 @@ use uuid::Uuid; use std::{ net::SocketAddr, sync::{Arc, Mutex}, + thread, + time::Duration, }; use lib::cors::options; @@ -63,6 +65,15 @@ fn _get_state_arc(state: &State>>) -> Arc> arc_clone } +fn _close_timeout(id: String, state: &State>>) { + let arc_clone = _get_state_arc(state); + thread::spawn(move || { + thread::sleep(Duration::from_secs(RoomsMap::ROOMS_TIMEOUT)); + let mut rooms = arc_clone.lock().unwrap(); + rooms.close_room(id).ok(); + }); +} + fn rocket() -> Rocket { rocket::ignite() .mount("/", routes![get_addr, create_room]) diff --git a/server/src/rooms/rooms_map.rs b/server/src/rooms/rooms_map.rs index 53de62c..b2f7124 100644 --- a/server/src/rooms/rooms_map.rs +++ b/server/src/rooms/rooms_map.rs @@ -7,6 +7,7 @@ pub struct RoomsMap(HashMap); impl RoomsMap { pub const MAX_ROOMS: usize = 10; + pub const ROOMS_TIMEOUT: u64 = 60 * 10; // timeout in seconds pub fn new() -> Self { RoomsMap(HashMap::new()) @@ -35,5 +36,20 @@ impl RoomsMap { } } } + + pub fn close_room(&mut self, id: String) -> Result<(), String> { + match self.0.get(&id) { + Some(controller) => { + match controller.shutdown_room() { + Ok(_) => { + self.0.remove(&id); + Ok(()) + }, + Err(_) => Err(String::from("Can't close the room")) + } + } + None => Err(String::from("The room doesnt exists")), + } + } }