From 239da373d02a39163d870c86107a2c7ee1ee32b2 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Thu, 27 Nov 2025 04:20:29 +0800 Subject: [PATCH] [feat] attempt to rejoin once per second --- src/gui/panels/remote_peer_panel.cpp | 19 ++++++++++++++----- src/gui/render.cpp | 2 +- src/gui/render.h | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/panels/remote_peer_panel.cpp b/src/gui/panels/remote_peer_panel.cpp index a51d949..0d00081 100644 --- a/src/gui/panels/remote_peer_panel.cpp +++ b/src/gui/panels/remote_peer_panel.cpp @@ -101,12 +101,21 @@ int Render::RemoteWindow() { } } + // check every 1 second for rejoin if (need_to_rejoin_) { - need_to_rejoin_ = false; - for (const auto& [_, props] : client_properties_) { - if (props->rejoin_) { - ConnectTo(props->remote_id_, props->remote_password_, - props->remember_password_); + auto now = std::chrono::steady_clock::now(); + auto elapsed = std::chrono::duration_cast( + now - last_rejoin_check_time_) + .count(); + + if (elapsed >= 1000) { + last_rejoin_check_time_ = now; + need_to_rejoin_ = false; + for (const auto& [_, props] : client_properties_) { + if (props->rejoin_) { + ConnectTo(props->remote_id_, props->remote_password_, + props->remember_password_); + } } } } diff --git a/src/gui/render.cpp b/src/gui/render.cpp index c97df0b..5a056e5 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -168,7 +168,7 @@ SDL_HitTestResult Render::HitTestCallback(SDL_Window* window, return SDL_HITTEST_NORMAL; } -Render::Render() {} +Render::Render() : last_rejoin_check_time_(std::chrono::steady_clock::now()) {} Render::~Render() {} diff --git a/src/gui/render.h b/src/gui/render.h index 3661554..9063f6a 100644 --- a/src/gui/render.h +++ b/src/gui/render.h @@ -379,6 +379,7 @@ class Render { int audio_len_ = 0; bool audio_buffer_fresh_ = false; bool need_to_rejoin_ = false; + std::chrono::steady_clock::time_point last_rejoin_check_time_; bool just_created_ = false; std::string controlled_remote_id_ = ""; std::string focused_remote_id_ = "";