Move help_getAppConfig receiving to ConfigManager.
GitOrigin-RevId: 310743ea038dffebd59c9b612438bc7cfc7553a4
This commit is contained in:
parent
71fb1d87e0
commit
ddd8e6fa0f
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "td/telegram/ConfigShared.h"
|
#include "td/telegram/ConfigShared.h"
|
||||||
#include "td/telegram/Global.h"
|
#include "td/telegram/Global.h"
|
||||||
|
#include "td/telegram/JsonValue.h"
|
||||||
#include "td/telegram/logevent/LogEvent.h"
|
#include "td/telegram/logevent/LogEvent.h"
|
||||||
#include "td/telegram/net/AuthDataShared.h"
|
#include "td/telegram/net/AuthDataShared.h"
|
||||||
#include "td/telegram/net/ConnectionCreator.h"
|
#include "td/telegram/net/ConnectionCreator.h"
|
||||||
@ -867,12 +868,10 @@ ConfigManager::ConfigManager(ActorShared<> parent) : parent_(std::move(parent))
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::start_up() {
|
void ConfigManager::start_up() {
|
||||||
// TODO there are some problems when many ConfigRecoverers starts at the same time
|
|
||||||
// if (G()->parameters().use_file_db) {
|
|
||||||
ref_cnt_++;
|
ref_cnt_++;
|
||||||
config_recoverer_ = create_actor<ConfigRecoverer>("Recoverer", actor_shared());
|
config_recoverer_ = create_actor<ConfigRecoverer>("Recoverer", actor_shared());
|
||||||
send_closure(config_recoverer_, &ConfigRecoverer::on_dc_options_update, load_dc_options_update());
|
send_closure(config_recoverer_, &ConfigRecoverer::on_dc_options_update, load_dc_options_update());
|
||||||
// }
|
|
||||||
auto expire_time = load_config_expire_time();
|
auto expire_time = load_config_expire_time();
|
||||||
if (expire_time.is_in_past()) {
|
if (expire_time.is_in_past()) {
|
||||||
request_config();
|
request_config();
|
||||||
@ -886,22 +885,26 @@ void ConfigManager::hangup_shared() {
|
|||||||
ref_cnt_--;
|
ref_cnt_--;
|
||||||
try_stop();
|
try_stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::hangup() {
|
void ConfigManager::hangup() {
|
||||||
ref_cnt_--;
|
ref_cnt_--;
|
||||||
config_recoverer_.reset();
|
config_recoverer_.reset();
|
||||||
try_stop();
|
try_stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::loop() {
|
void ConfigManager::loop() {
|
||||||
if (expire_time_ && expire_time_.is_in_past()) {
|
if (expire_time_ && expire_time_.is_in_past()) {
|
||||||
request_config();
|
request_config();
|
||||||
expire_time_ = {};
|
expire_time_ = {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::try_stop() {
|
void ConfigManager::try_stop() {
|
||||||
if (ref_cnt_ == 0) {
|
if (ref_cnt_ == 0) {
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::request_config() {
|
void ConfigManager::request_config() {
|
||||||
if (config_sent_cnt_ != 0) {
|
if (config_sent_cnt_ != 0) {
|
||||||
return;
|
return;
|
||||||
@ -909,6 +912,17 @@ void ConfigManager::request_config() {
|
|||||||
request_config_from_dc_impl(DcId::main());
|
request_config_from_dc_impl(DcId::main());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigManager::get_app_config(Promise<td_api::object_ptr<td_api::JsonValue>> &&promise) {
|
||||||
|
get_app_config_queries_.push_back(std::move(promise));
|
||||||
|
if (get_app_config_queries_.size() == 1) {
|
||||||
|
G()->net_query_dispatcher().dispatch_with_callback(
|
||||||
|
G()->net_query_creator().create(create_storer(telegram_api::help_getAppConfig()), DcId::main(),
|
||||||
|
NetQuery::Type::Common, NetQuery::AuthFlag::Off, NetQuery::GzipFlag::On,
|
||||||
|
60 * 60 * 24),
|
||||||
|
actor_shared(this, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigManager::on_dc_options_update(DcOptions dc_options) {
|
void ConfigManager::on_dc_options_update(DcOptions dc_options) {
|
||||||
save_dc_options_update(dc_options);
|
save_dc_options_update(dc_options);
|
||||||
send_closure(config_recoverer_, &ConfigRecoverer::on_dc_options_update, std::move(dc_options));
|
send_closure(config_recoverer_, &ConfigRecoverer::on_dc_options_update, std::move(dc_options));
|
||||||
@ -925,10 +939,30 @@ void ConfigManager::request_config_from_dc_impl(DcId dc_id) {
|
|||||||
G()->net_query_dispatcher().dispatch_with_callback(
|
G()->net_query_dispatcher().dispatch_with_callback(
|
||||||
G()->net_query_creator().create(create_storer(telegram_api::help_getConfig()), dc_id, NetQuery::Type::Common,
|
G()->net_query_creator().create(create_storer(telegram_api::help_getConfig()), dc_id, NetQuery::Type::Common,
|
||||||
NetQuery::AuthFlag::Off, NetQuery::GzipFlag::On, 60 * 60 * 24),
|
NetQuery::AuthFlag::Off, NetQuery::GzipFlag::On, 60 * 60 * 24),
|
||||||
actor_shared(this));
|
actor_shared(this, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::on_result(NetQueryPtr res) {
|
void ConfigManager::on_result(NetQueryPtr res) {
|
||||||
|
auto token = get_link_token();
|
||||||
|
if (token == 1) {
|
||||||
|
auto promises = std::move(get_app_config_queries_);
|
||||||
|
get_app_config_queries_.clear();
|
||||||
|
CHECK(!promises.empty());
|
||||||
|
auto result_ptr = fetch_result<telegram_api::help_getAppConfig>(std::move(res));
|
||||||
|
if (result_ptr.is_error()) {
|
||||||
|
for (auto &promise : promises) {
|
||||||
|
promise.set_error(result_ptr.error().clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto result = result_ptr.move_as_ok();
|
||||||
|
for (auto &promise : promises) {
|
||||||
|
promise.set_value(convert_json_value_object(result));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK(token == 0);
|
||||||
CHECK(config_sent_cnt_ > 0);
|
CHECK(config_sent_cnt_ > 0);
|
||||||
config_sent_cnt_--;
|
config_sent_cnt_--;
|
||||||
auto r_config = fetch_result<telegram_api::help_getConfig>(std::move(res));
|
auto r_config = fetch_result<telegram_api::help_getConfig>(std::move(res));
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "td/telegram/net/DcOptions.h"
|
#include "td/telegram/net/DcOptions.h"
|
||||||
#include "td/telegram/net/NetQuery.h"
|
#include "td/telegram/net/NetQuery.h"
|
||||||
|
|
||||||
|
#include "td/telegram/td_api.h"
|
||||||
#include "td/telegram/telegram_api.h"
|
#include "td/telegram/telegram_api.h"
|
||||||
|
|
||||||
#include "td/actor/actor.h"
|
#include "td/actor/actor.h"
|
||||||
@ -82,6 +83,8 @@ class ConfigManager : public NetQueryCallback {
|
|||||||
|
|
||||||
void request_config();
|
void request_config();
|
||||||
|
|
||||||
|
void get_app_config(Promise<td_api::object_ptr<td_api::JsonValue>> &&promise);
|
||||||
|
|
||||||
void on_dc_options_update(DcOptions dc_options);
|
void on_dc_options_update(DcOptions dc_options);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -91,6 +94,8 @@ class ConfigManager : public NetQueryCallback {
|
|||||||
int ref_cnt_{1};
|
int ref_cnt_{1};
|
||||||
Timestamp expire_time_;
|
Timestamp expire_time_;
|
||||||
|
|
||||||
|
vector<Promise<td_api::object_ptr<td_api::JsonValue>>> get_app_config_queries_;
|
||||||
|
|
||||||
void start_up() override;
|
void start_up() override;
|
||||||
void hangup_shared() override;
|
void hangup_shared() override;
|
||||||
void hangup() override;
|
void hangup() override;
|
||||||
|
@ -469,33 +469,6 @@ class GetDeepLinkInfoQuery : public Td::ResultHandler {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class GetAppConfigQuery : public Td::ResultHandler {
|
|
||||||
Promise<tl_object_ptr<td_api::JsonValue>> promise_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GetAppConfigQuery(Promise<tl_object_ptr<td_api::JsonValue>> &&promise) : promise_(std::move(promise)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void send() {
|
|
||||||
send_query(G()->net_query_creator().create(create_storer(telegram_api::help_getAppConfig()), DcId::main(),
|
|
||||||
NetQuery::Type::Common, NetQuery::AuthFlag::Off));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_result(uint64 id, BufferSlice packet) override {
|
|
||||||
auto result_ptr = fetch_result<telegram_api::help_getAppConfig>(packet);
|
|
||||||
if (result_ptr.is_error()) {
|
|
||||||
return on_error(id, result_ptr.move_as_error());
|
|
||||||
}
|
|
||||||
|
|
||||||
auto result = result_ptr.move_as_ok();
|
|
||||||
promise_.set_value(convert_json_value_object(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_error(uint64 id, Status status) override {
|
|
||||||
promise_.set_error(std::move(status));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class SaveAppLogQuery : public Td::ResultHandler {
|
class SaveAppLogQuery : public Td::ResultHandler {
|
||||||
Promise<Unit> promise_;
|
Promise<Unit> promise_;
|
||||||
|
|
||||||
@ -7627,7 +7600,7 @@ void Td::on_request(uint64 id, td_api::getDeepLinkInfo &request) {
|
|||||||
void Td::on_request(uint64 id, const td_api::getApplicationConfig &request) {
|
void Td::on_request(uint64 id, const td_api::getApplicationConfig &request) {
|
||||||
CHECK_IS_USER();
|
CHECK_IS_USER();
|
||||||
CREATE_REQUEST_PROMISE();
|
CREATE_REQUEST_PROMISE();
|
||||||
create_handler<GetAppConfigQuery>(std::move(promise))->send();
|
send_closure(G()->config_manager(), &ConfigManager::get_app_config, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Td::on_request(uint64 id, td_api::saveApplicationLogEvent &request) {
|
void Td::on_request(uint64 id, td_api::saveApplicationLogEvent &request) {
|
||||||
|
Reference in New Issue
Block a user