mirror of
https://codeberg.org/JasterV/chat_rooms.rs.git
synced 2026-04-26 18:20:03 +00:00
rooms closing timeout reimplemented
This commit is contained in:
parent
49bc939ab9
commit
4c6744ed20
3 changed files with 30 additions and 2 deletions
|
|
@ -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') {
|
||||||
|
|
|
||||||
|
|
@ -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])
|
||||||
|
|
|
||||||
|
|
@ -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")),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue