rooms closing timeout reimplemented

This commit is contained in:
JasterV 2020-11-15 17:32:01 +01:00
parent 49bc939ab9
commit 4c6744ed20
3 changed files with 30 additions and 2 deletions

View file

@ -63,7 +63,8 @@ $(() => {
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') {

View file

@ -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<T: Send + Sync>(state: &State<Arc<Mutex<T>>>) -> Arc<Mutex<T>>
arc_clone
}
fn _close_timeout(id: String, state: &State<Arc<Mutex<RoomsMap>>>) {
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])

View file

@ -7,6 +7,7 @@ pub struct RoomsMap(HashMap<String, RoomController>);
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")),
}
}
}