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

@ -59,11 +59,12 @@ $(() => {
App.socket.addEventListener("message", (e) => { App.socket.addEventListener("message", (e) => {
let response = JSON.parse(e.data); let response = JSON.parse(e.data);
let event = response.event; let event = response.event;
if(event == 'open') { if(event == 'open') {
App.userId = response.id; App.userId = response.id;
} else if (event == 'new_user') { } 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') { } else if (event == 'user_gone') {
$('.chat-body').append(userGoneText()); $('.chat-body').append(userGoneText());
} else if (event == 'message') { } else if (event == 'message') {

View file

@ -20,6 +20,8 @@ use uuid::Uuid;
use std::{ use std::{
net::SocketAddr, net::SocketAddr,
sync::{Arc, Mutex}, sync::{Arc, Mutex},
thread,
time::Duration,
}; };
use lib::cors::options; 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 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 { fn rocket() -> Rocket {
rocket::ignite() rocket::ignite()
.mount("/", routes![get_addr, create_room]) .mount("/", routes![get_addr, create_room])

View file

@ -7,6 +7,7 @@ pub struct RoomsMap(HashMap<String, RoomController>);
impl RoomsMap { impl RoomsMap {
pub const MAX_ROOMS: usize = 10; pub const MAX_ROOMS: usize = 10;
pub const ROOMS_TIMEOUT: u64 = 60 * 10; // timeout in seconds
pub fn new() -> Self { pub fn new() -> Self {
RoomsMap(HashMap::new()) 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")),
}
}
} }