From 81a60725f4969ea1fb376b06c20aa2e32576d38f Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 17 Jan 2023 16:13:44 +0800 Subject: [PATCH] switch sides: remove outdate uuid Signed-off-by: 21pages --- .../lib/desktop/widgets/remote_menubar.dart | 3 ++- src/server/connection.rs | 18 +++++++++++++++--- src/ui_session_interface.rs | 5 +---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_menubar.dart b/flutter/lib/desktop/widgets/remote_menubar.dart index 6ea372b1f..62289d5f0 100644 --- a/flutter/lib/desktop/widgets/remote_menubar.dart +++ b/flutter/lib/desktop/widgets/remote_menubar.dart @@ -652,7 +652,8 @@ class _RemoteMenubarState extends State { dismissOnClicked: true, )); } - if (version_cmp(peer_version, '1.2.0') >= 0) { + if (pi.platform != kPeerPlatformAndroid && + version_cmp(peer_version, '1.2.0') >= 0) { displayMenu.add(MenuEntryButton( childBuilder: (TextStyle? style) => Text( translate('Switch Sides'), diff --git a/src/server/connection.rs b/src/server/connection.rs index 83ec5db55..e60d4652c 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -40,7 +40,7 @@ lazy_static::lazy_static! { static ref LOGIN_FAILURES: Arc::>> = Default::default(); static ref SESSIONS: Arc::>> = Default::default(); static ref ALIVE_CONNS: Arc::>> = Default::default(); - pub static ref SWITCH_SIDES_UUID: Arc::>> = Default::default(); + static ref SWITCH_SIDES_UUID: Arc::>> = Default::default(); } pub static CLICK_TIME: AtomicI64 = AtomicI64::new(0); pub static MOUSE_MOVE_TIME: AtomicI64 = AtomicI64::new(0); @@ -136,7 +136,7 @@ const MILLI1: Duration = Duration::from_millis(1); const SEND_TIMEOUT_VIDEO: u64 = 12_000; const SEND_TIMEOUT_OTHER: u64 = SEND_TIMEOUT_VIDEO * 10; const SESSION_TIMEOUT: Duration = Duration::from_secs(30); -const SWITCH_SIDES_TIMEOUT: Duration = Duration::from_secs(30); +const SWITCH_SIDES_TIMEOUT: Duration = Duration::from_secs(10); impl Connection { pub async fn start( @@ -1267,10 +1267,14 @@ impl Connection { #[cfg(feature = "flutter")] if let Some(lr) = _s.lr.clone().take() { self.handle_login_request_without_validation(&lr).await; + SWITCH_SIDES_UUID + .lock() + .unwrap() + .retain(|_, v| v.0.elapsed() < SWITCH_SIDES_TIMEOUT); let uuid_old = SWITCH_SIDES_UUID.lock().unwrap().remove(&lr.my_id); if let Ok(uuid) = uuid::Uuid::from_slice(_s.uuid.to_vec().as_ref()) { if let Some((instant, uuid_old)) = uuid_old { - if instant.elapsed() < SWITCH_SIDES_TIMEOUT && uuid == uuid_old { + if uuid == uuid_old { self.from_switch = true; self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); self.send_logon_response().await; @@ -1792,6 +1796,14 @@ impl Connection { } } +#[cfg(feature = "flutter")] +pub fn insert_switch_sides_uuid(id: String, uuid: uuid::Uuid) { + SWITCH_SIDES_UUID + .lock() + .unwrap() + .insert(id, (tokio::time::Instant::now(), uuid)); +} + #[cfg(not(any(target_os = "android", target_os = "ios")))] async fn start_ipc( mut rx_to_cm: mpsc::UnboundedReceiver, diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 800ca35c6..a5f55a05d 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -621,10 +621,7 @@ impl Session { pub fn switch_sides(&self) { let uuid = Uuid::new_v4(); - crate::server::SWITCH_SIDES_UUID - .lock() - .unwrap() - .insert(self.id.clone(), (tokio::time::Instant::now(), uuid.clone())); + crate::server::insert_switch_sides_uuid(self.id.clone(), uuid.clone()); let mut misc = Misc::new(); misc.set_switch_sides_request(SwitchSidesRequest { uuid: Bytes::from(uuid.as_bytes().to_vec()),