From 784b0f2017c15017262a6843b05ae4d8d19b29d1 Mon Sep 17 00:00:00 2001 From: Piyush Mishra Date: Sun, 23 May 2021 00:31:27 +0530 Subject: [PATCH] fixes for kickout --- src/chat_pinnd/user.rs | 14 +++++++------- src/ws_sansad/mod.rs | 7 ++++--- static/js/app.js | 10 ++++------ 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/chat_pinnd/user.rs b/src/chat_pinnd/user.rs index 03f3a7c..f97f670 100644 --- a/src/chat_pinnd/user.rs +++ b/src/chat_pinnd/user.rs @@ -282,19 +282,19 @@ impl Handler for ChatPinnd { fn handle(&mut self, msg: ms::pind::LeaveVayakti, _: &mut Self::Context) -> Self::Result { if let Some(kaksh_kunjika) = &msg.kaksh_kunjika { if let Some(kaksh) = self.kaksh.get_mut(kaksh_kunjika) { - let name = if let Some(i) = kaksh.loog.iter().position(|x| x.addr == msg.addr) { - kaksh.loog.remove(i).name - } else { "".to_owned() }; - - if kaksh.loog.len() == 0 { - self.kaksh.remove(kaksh_kunjika); - } else { + if kaksh.loog.len() > 1 { + let name = if let Some(i) = kaksh.loog.iter().position(|x| x.addr == msg.addr) { + kaksh.loog.remove(i).name + } else { "".to_owned() }; + kaksh.loog.iter().for_each(|a| { a.addr.do_send(ms::sansad::WsDisconnected { kunjika: msg.kunjika.to_owned(), name: name.to_owned() }) }); + } else { + self.kaksh.remove(kaksh_kunjika); } } } diff --git a/src/ws_sansad/mod.rs b/src/ws_sansad/mod.rs index 0df29e1..210ab64 100644 --- a/src/ws_sansad/mod.rs +++ b/src/ws_sansad/mod.rs @@ -35,9 +35,9 @@ const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(5); const CLIENT_TIMEOUT: Duration = Duration::from_secs(15); /// How often heartbeat pings are sent -const SPECIAL_HEARTBEAT_INTERVAL: Duration = Duration::from_secs(5 * 60); +const SPECIAL_HEARTBEAT_INTERVAL: Duration = Duration::from_secs(3*60); /// How long before lack of client response causes a timeout -const SPECIAL_CLIENT_TIMEOUT: Duration = Duration::from_secs(15 * 60); +const SPECIAL_CLIENT_TIMEOUT: Duration = Duration::from_secs(15*60); pub struct WsSansad { kunjika: String, @@ -66,7 +66,7 @@ impl Actor for WsSansad { fn stopping(&mut self, _: &mut Self::Context) -> Running { tokio::runtime::Runtime::new().unwrap() - .block_on(self.leave_kaksh());// notify leaving + .block_on(self.leave_kaksh());// notify leaving Running::Stop } } @@ -143,6 +143,7 @@ impl WsSansad { // don't try to send a ping return; } + ctx.ping(b""); }); } diff --git a/static/js/app.js b/static/js/app.js index e5710ab..f5c5770 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -42,15 +42,13 @@ socket.onopen = function(event) { socket.onerror = function(event) { $('#initerror').text('Warning: Failed to connect websocket! Refresh the '+ 'page and if still don\'t work upgrade Web Browser'); + socket.close() } socket.onclose = function (e) { - if(actions.has_key('leave')) return; - actions.clear(); - myinfo.kunjika = ''; - myinfo.name = ''; - State.login(); - State.hideProgress(); + Messages.pushStatus('Connection failed!\nRefresh page'); + $('[name="error_msg"]').text('Connection failed! Refresh page'); + $('[name="error_msg"]').removeClass('is-hidden'); } // Listen for messages