Set connection online flag while logging out.

This commit is contained in:
levlam 2021-12-02 15:10:51 +03:00
parent 340e0f0b85
commit 8d7bda00a5
2 changed files with 19 additions and 4 deletions

View File

@ -201,6 +201,10 @@ void Session::start_up() {
send_closure(session_, &Session::on_online, online_flag);
return session_.is_alive();
}
bool on_logging_out(bool logging_out_flag) final {
send_closure(session_, &Session::on_logging_out, logging_out_flag);
return session_.is_alive();
}
private:
ActorId<Session> session_;
@ -235,9 +239,15 @@ void Session::on_online(bool online_flag) {
loop();
}
void Session::on_logging_out(bool logging_out_flag) {
logging_out_flag_ = logging_out_flag;
connection_online_update(true);
loop();
}
void Session::connection_online_update(bool force) {
bool new_connection_online_flag =
online_flag_ && (has_queries() || last_activity_timestamp_ + 10 > Time::now_cached() || is_main_);
bool new_connection_online_flag = (online_flag_ || logging_out_flag_) &&
(has_queries() || last_activity_timestamp_ + 10 > Time::now_cached() || is_main_);
if (connection_online_flag_ == new_connection_online_flag && !force) {
return;
}

View File

@ -69,9 +69,9 @@ class Session final
Session(unique_ptr<Callback> callback, std::shared_ptr<AuthDataShared> shared_auth_data, int32 raw_dc_id, int32 dc_id,
bool is_main, bool use_pfs, bool is_cdn, bool need_destroy, const mtproto::AuthKey &tmp_auth_key,
const vector<mtproto::ServerSalt> &server_salts);
void send(NetQueryPtr &&query);
void on_network(bool network_flag, uint32 network_generation);
void on_online(bool online_flag);
void close();
private:
@ -111,6 +111,7 @@ class Session final
bool was_on_network_ = false;
bool network_flag_ = false;
bool online_flag_ = false;
bool logging_out_flag_ = false;
bool connection_online_flag_ = false;
uint32 network_generation_ = 0;
uint64 being_binded_tmp_auth_key_id_ = 0;
@ -195,6 +196,10 @@ class Session final
Status on_pong() final;
void on_network(bool network_flag, uint32 network_generation);
void on_online(bool online_flag);
void on_logging_out(bool logging_out_flag);
void on_auth_key_updated() final;
void on_tmp_auth_key_updated() final;
void on_server_salt_updated() final;