diff --git a/td/telegram/net/Session.cpp b/td/telegram/net/Session.cpp index ba0d1e573..18563e383 100644 --- a/td/telegram/net/Session.cpp +++ b/td/telegram/net/Session.cpp @@ -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_; @@ -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; } diff --git a/td/telegram/net/Session.h b/td/telegram/net/Session.h index 1ad277449..23149fb6e 100644 --- a/td/telegram/net/Session.h +++ b/td/telegram/net/Session.h @@ -69,9 +69,9 @@ class Session final Session(unique_ptr callback, std::shared_ptr 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 &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;