mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-08-19 01:26:35 +08:00
[fix] sync signal status after server switch
This commit is contained in:
@@ -134,14 +134,7 @@ int SettingsManager::Load() {
|
|||||||
|
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
const char *at_pos = std::strchr(owner_.client_id_with_password_, '@');
|
ActivateCachedPublicIdentity();
|
||||||
if (at_pos != nullptr) {
|
|
||||||
const std::string id(owner_.client_id_with_password_,
|
|
||||||
at_pos - owner_.client_id_with_password_);
|
|
||||||
const std::string password(at_pos + 1);
|
|
||||||
CopyString(owner_.client_id_, id.c_str());
|
|
||||||
CopyString(owner_.password_saved_, password.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
owner_.thumbnail_ =
|
owner_.thumbnail_ =
|
||||||
std::make_shared<Thumbnail>(owner_.cache_path_ + "/thumbnails/",
|
std::make_shared<Thumbnail>(owner_.cache_path_ + "/thumbnails/",
|
||||||
@@ -195,6 +188,8 @@ bool SettingsManager::LoadCachedSelfHostedIdentity() {
|
|||||||
std::lock_guard<std::mutex> lock(cache_mutex_);
|
std::lock_guard<std::mutex> lock(cache_mutex_);
|
||||||
if (!ReadV2Locked() || cache_v2_.self_hosted_id[0] == '\0') {
|
if (!ReadV2Locked() || cache_v2_.self_hosted_id[0] == '\0') {
|
||||||
std::memset(owner_.self_hosted_id_, 0, sizeof(owner_.self_hosted_id_));
|
std::memset(owner_.self_hosted_id_, 0, sizeof(owner_.self_hosted_id_));
|
||||||
|
std::memset(owner_.client_id_, 0, sizeof(owner_.client_id_));
|
||||||
|
std::memset(owner_.password_saved_, 0, sizeof(owner_.password_saved_));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,6 +207,26 @@ bool SettingsManager::LoadCachedSelfHostedIdentity() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SettingsManager::ActivateCachedPublicIdentity() {
|
||||||
|
if (owner_.client_id_with_password_[0] == '\0') {
|
||||||
|
std::memset(owner_.client_id_, 0, sizeof(owner_.client_id_));
|
||||||
|
std::memset(owner_.password_saved_, 0, sizeof(owner_.password_saved_));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *at_pos = std::strchr(owner_.client_id_with_password_, '@');
|
||||||
|
if (at_pos == nullptr) {
|
||||||
|
CopyString(owner_.client_id_, owner_.client_id_with_password_);
|
||||||
|
std::memset(owner_.password_saved_, 0, sizeof(owner_.password_saved_));
|
||||||
|
} else {
|
||||||
|
const std::string id(owner_.client_id_with_password_,
|
||||||
|
at_pos - owner_.client_id_with_password_);
|
||||||
|
CopyString(owner_.client_id_, id.c_str());
|
||||||
|
CopyString(owner_.password_saved_, at_pos + 1);
|
||||||
|
}
|
||||||
|
return owner_.client_id_[0] != '\0';
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsManager::PersistSelfHostedIdentity(const char *client_id) {
|
void SettingsManager::PersistSelfHostedIdentity(const char *client_id) {
|
||||||
if (!client_id) {
|
if (!client_id) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ public:
|
|||||||
// Loads the cached self-hosted identity into the owner's active connection
|
// Loads the cached self-hosted identity into the owner's active connection
|
||||||
// fields. Returns true only when a non-empty identity was restored.
|
// fields. Returns true only when a non-empty identity was restored.
|
||||||
bool LoadCachedSelfHostedIdentity();
|
bool LoadCachedSelfHostedIdentity();
|
||||||
|
// Restores the public-server identity kept in the in-memory cache fields.
|
||||||
|
// This must run when switching away from a self-hosted server so signal
|
||||||
|
// callbacks are matched against the identity used by the replacement peer.
|
||||||
|
bool ActivateCachedPublicIdentity();
|
||||||
void PersistSelfHostedIdentity(const char *client_id);
|
void PersistSelfHostedIdentity(const char *client_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ int GuiRuntime::CreateConnectionPeer() {
|
|||||||
signal_server_ip = config_center_->GetDefaultServerHost();
|
signal_server_ip = config_center_->GetDefaultServerHost();
|
||||||
signal_server_port = config_center_->GetDefaultSignalServerPort();
|
signal_server_port = config_center_->GetDefaultSignalServerPort();
|
||||||
coturn_server_port = config_center_->GetDefaultCoturnServerPort();
|
coturn_server_port = config_center_->GetDefaultCoturnServerPort();
|
||||||
|
settings_.ActivateCachedPublicIdentity();
|
||||||
params_.user_id = client_id_with_password_;
|
params_.user_id = client_id_with_password_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,6 +126,11 @@ int GuiRuntime::CreateConnectionPeer() {
|
|||||||
|
|
||||||
params_.user_data = &peer_events_;
|
params_.user_data = &peer_events_;
|
||||||
|
|
||||||
|
// The previous peer may have left a terminal status behind. Reset it before
|
||||||
|
// Init() starts emitting callbacks for the newly selected server.
|
||||||
|
signal_connected_ = false;
|
||||||
|
signal_status_ = SignalStatus::SignalConnecting;
|
||||||
|
|
||||||
peer_ = CreatePeer(¶ms_);
|
peer_ = CreatePeer(¶ms_);
|
||||||
if (peer_) {
|
if (peer_) {
|
||||||
LOG_INFO("Create peer instance [{}] successful", client_id_);
|
LOG_INFO("Create peer instance [{}] successful", client_id_);
|
||||||
|
|||||||
Reference in New Issue
Block a user