From d115807f6e4d5fc67481a3f9ccb40c19bacb07d0 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Fri, 14 Jul 2023 13:13:00 +0300 Subject: [PATCH] Move ExtClientLazy and QueryTraits to lite-client-common --- lite-client/CMakeLists.txt | 4 +-- {tonlib/tonlib => lite-client}/QueryTraits.h | 8 ++++- .../ext-client.cpp | 35 +++++++++---------- .../ext-client.h | 24 +++++++------ tonlib/CMakeLists.txt | 2 -- tonlib/tonlib/Config.h | 8 ++--- tonlib/tonlib/ExtClient.cpp | 2 +- tonlib/tonlib/ExtClient.h | 10 +++--- tonlib/tonlib/ExtClientOutbound.h | 5 ++- tonlib/tonlib/TonlibClient.cpp | 5 ++- tonlib/tonlib/TonlibClient.h | 3 +- tonlib/tonlib/tonlib-cli.cpp | 11 +++--- 12 files changed, 57 insertions(+), 60 deletions(-) rename {tonlib/tonlib => lite-client}/QueryTraits.h (97%) rename tonlib/tonlib/ExtClientLazy.cpp => lite-client/ext-client.cpp (84%) rename tonlib/tonlib/ExtClientLazy.h => lite-client/ext-client.h (67%) diff --git a/lite-client/CMakeLists.txt b/lite-client/CMakeLists.txt index b8449516..fd5c812c 100644 --- a/lite-client/CMakeLists.txt +++ b/lite-client/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) -add_library(lite-client-common lite-client-common.cpp lite-client-common.h) +add_library(lite-client-common lite-client-common.cpp lite-client-common.h ext-client.cpp ext-client.h QueryTraits.h) target_link_libraries(lite-client-common PUBLIC tdutils tdactor adnllite tl_api tl_lite_api tl-lite-utils ton_crypto ton_block) -add_executable(lite-client lite-client.cpp lite-client.h) +add_executable(lite-client lite-client.cpp lite-client.h ext-client.h ext-client.cpp) target_link_libraries(lite-client tdutils tdactor adnllite tl_api tl_lite_api tl-lite-utils ton_crypto ton_block terminal lite-client-common git) diff --git a/tonlib/tonlib/QueryTraits.h b/lite-client/QueryTraits.h similarity index 97% rename from tonlib/tonlib/QueryTraits.h rename to lite-client/QueryTraits.h index b583cd05..ffa683e6 100644 --- a/tonlib/tonlib/QueryTraits.h +++ b/lite-client/QueryTraits.h @@ -17,12 +17,14 @@ #pragma once #include "ton/ton-types.h" #include "auto/tl/lite_api.h" +#include "auto/tl/lite_api.hpp" #include "vm/boc.h" #include "vm/cellslice.h" #include "block/block-auto.h" #include "block/block-parse.h" +#include "auto/tl/lite_api.hpp" -namespace tonlib { +namespace liteclient { template struct QueryTraits { @@ -212,5 +214,9 @@ struct QueryTraits { } }; +template +inline ton::ShardIdFull get_query_shard(const Query& q) { + return QueryTraits::get_shard(q); +} } // namespace tonlib diff --git a/tonlib/tonlib/ExtClientLazy.cpp b/lite-client/ext-client.cpp similarity index 84% rename from tonlib/tonlib/ExtClientLazy.cpp rename to lite-client/ext-client.cpp index 027198de..e79ae9a4 100644 --- a/tonlib/tonlib/ExtClientLazy.cpp +++ b/lite-client/ext-client.cpp @@ -13,20 +13,17 @@ You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . - - Copyright 2017-2020 Telegram Systems LLP */ -#include "ExtClientLazy.h" -#include "TonlibError.h" +#include "ext-client.h" #include "td/utils/Random.h" #include "ton/ton-shard.h" #include -namespace tonlib { +namespace liteclient { -class ExtClientLazyImpl : public ExtClientLazy { +class ExtClientImpl : public ExtClient { public: - ExtClientLazyImpl(std::vector servers, td::unique_ptr callback) + ExtClientImpl(std::vector servers, td::unique_ptr callback) : callback_(std::move(callback)) { CHECK(!servers.empty()); servers_.resize(servers.size()); @@ -53,10 +50,10 @@ class ExtClientLazyImpl : public ExtClientLazy { CHECK(!server.client.empty()); alarm_timestamp().relax(server.timeout = td::Timestamp::in(MAX_NO_QUERIES_TIMEOUT)); td::Promise P = [SelfId = actor_id(this), server_idx, - promise = std::move(promise)](td::Result R) mutable { + promise = std::move(promise)](td::Result R) mutable { if (R.is_error() && (R.error().code() == ton::ErrorCode::timeout || R.error().code() == ton::ErrorCode::cancelled)) { - td::actor::send_closure(SelfId, &ExtClientLazyImpl::set_server_bad, server_idx); + td::actor::send_closure(SelfId, &ExtClientImpl::set_server_bad, server_idx); } promise.set_result(std::move(R)); }; @@ -128,17 +125,17 @@ class ExtClientLazyImpl : public ExtClientLazy { class Callback : public ton::adnl::AdnlExtClient::Callback { public: - explicit Callback(td::actor::ActorShared parent, size_t idx) + explicit Callback(td::actor::ActorShared parent, size_t idx) : parent_(std::move(parent)), idx_(idx) { } void on_ready() override { } void on_stop_ready() override { - td::actor::send_closure(parent_, &ExtClientLazyImpl::set_server_bad, idx_); + td::actor::send_closure(parent_, &ExtClientImpl::set_server_bad, idx_); } private: - td::actor::ActorShared parent_; + td::actor::ActorShared parent_; size_t idx_; }; ref_cnt_++; @@ -154,7 +151,7 @@ class ExtClientLazyImpl : public ExtClientLazy { } struct Server { - Config::LiteServer s; + LiteServer s; td::actor::ActorOwn client; td::Timestamp timeout = td::Timestamp::never(); td::Timestamp ignore_until = td::Timestamp::never(); @@ -169,7 +166,7 @@ class ExtClientLazyImpl : public ExtClientLazy { std::map shard_to_server_; int max_server_shard_depth_ = 0; - td::unique_ptr callback_; + td::unique_ptr callback_; static constexpr double MAX_NO_QUERIES_TIMEOUT = 100; bool is_closing_{false}; @@ -206,13 +203,13 @@ class ExtClientLazyImpl : public ExtClientLazy { } }; -td::actor::ActorOwn ExtClientLazy::create(ton::adnl::AdnlNodeIdFull dst, td::IPAddress dst_addr, +td::actor::ActorOwn ExtClient::create(ton::adnl::AdnlNodeIdFull dst, td::IPAddress dst_addr, td::unique_ptr callback) { - return create({Config::LiteServer{dst, dst_addr, true, {}}}, std::move(callback)); + return create({LiteServer{dst, dst_addr, true, {}}}, std::move(callback)); } -td::actor::ActorOwn ExtClientLazy::create(std::vector servers, +td::actor::ActorOwn ExtClient::create(std::vector servers, td::unique_ptr callback) { - return td::actor::create_actor("ExtClientLazy", std::move(servers), std::move(callback)); + return td::actor::create_actor("ExtClient", std::move(servers), std::move(callback)); } -} // namespace tonlib +} // namespace liteclient diff --git a/tonlib/tonlib/ExtClientLazy.h b/lite-client/ext-client.h similarity index 67% rename from tonlib/tonlib/ExtClientLazy.h rename to lite-client/ext-client.h index 6383cec5..c8569964 100644 --- a/tonlib/tonlib/ExtClientLazy.h +++ b/lite-client/ext-client.h @@ -13,18 +13,22 @@ You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . - - Copyright 2017-2020 Telegram Systems LLP */ #pragma once #include "td/actor/actor.h" #include "ton/ton-types.h" #include "adnl/adnl-ext-client.h" -#include "Config.h" -namespace tonlib { -class ExtClientLazy : public td::actor::Actor { +namespace liteclient { +class ExtClient : public td::actor::Actor { public: + struct LiteServer { + ton::adnl::AdnlNodeIdFull adnl_id; + td::IPAddress address; + bool is_full = true; + std::vector shards; + }; + class Callback { public: virtual ~Callback() { @@ -35,10 +39,8 @@ class ExtClientLazy : public td::actor::Actor { td::Promise promise) = 0; virtual void force_change_liteserver() = 0; - static td::actor::ActorOwn create(ton::adnl::AdnlNodeIdFull dst, td::IPAddress dst_addr, - td::unique_ptr callback); - static td::actor::ActorOwn create(std::vector servers, - td::unique_ptr callback); + static td::actor::ActorOwn create(ton::adnl::AdnlNodeIdFull dst, td::IPAddress dst_addr, + td::unique_ptr callback); + static td::actor::ActorOwn create(std::vector servers, td::unique_ptr callback); }; - -} // namespace tonlib +} // namespace liteclient diff --git a/tonlib/CMakeLists.txt b/tonlib/CMakeLists.txt index 72c59c4d..8ee8fcc6 100644 --- a/tonlib/CMakeLists.txt +++ b/tonlib/CMakeLists.txt @@ -10,7 +10,6 @@ set(TONLIB_SOURCE tonlib/Client.cpp tonlib/Config.cpp tonlib/ExtClient.cpp - tonlib/ExtClientLazy.cpp tonlib/ExtClientOutbound.cpp tonlib/KeyStorage.cpp tonlib/KeyValue.cpp @@ -25,7 +24,6 @@ set(TONLIB_SOURCE tonlib/Client.h tonlib/Config.h tonlib/ExtClient.h - tonlib/ExtClientLazy.h tonlib/ExtClientOutbound.h tonlib/KeyStorage.h tonlib/KeyValue.h diff --git a/tonlib/tonlib/Config.h b/tonlib/tonlib/Config.h index 7af1b1c5..5ae304ea 100644 --- a/tonlib/tonlib/Config.h +++ b/tonlib/tonlib/Config.h @@ -20,15 +20,11 @@ #include "adnl/adnl-node-id.hpp" #include "td/utils/port/IPAddress.h" #include "ton/ton-types.h" +#include "lite-client/ext-client.h" namespace tonlib { struct Config { - struct LiteServer { - ton::adnl::AdnlNodeIdFull adnl_id; - td::IPAddress address; - bool is_full = true; - std::vector shards; - }; + using LiteServer = liteclient::ExtClient::LiteServer; ton::BlockIdExt zero_state_id; ton::BlockIdExt init_block_id; std::vector hardforks; diff --git a/tonlib/tonlib/ExtClient.cpp b/tonlib/tonlib/ExtClient.cpp index 755be170..f0c84d61 100644 --- a/tonlib/tonlib/ExtClient.cpp +++ b/tonlib/tonlib/ExtClient.cpp @@ -65,7 +65,7 @@ void ExtClient::send_raw_query(td::BufferSlice query, ton::ShardIdFull shard, td if (client_.adnl_ext_client_.empty()) { return P.set_error(TonlibError::NoLiteServers()); } - td::actor::send_closure(client_.adnl_ext_client_, &ExtClientLazy::send_query, "query", std::move(query), + td::actor::send_closure(client_.adnl_ext_client_, &liteclient::ExtClient::send_query, "query", std::move(query), shard, td::Timestamp::in(10.0), std::move(P)); } } // namespace tonlib diff --git a/tonlib/tonlib/ExtClient.h b/tonlib/tonlib/ExtClient.h index 5cd7f4fd..9db040bb 100644 --- a/tonlib/tonlib/ExtClient.h +++ b/tonlib/tonlib/ExtClient.h @@ -28,10 +28,10 @@ #include "td/utils/Container.h" #include "td/utils/Random.h" -#include "ExtClientLazy.h" +#include "lite-client/ext-client.h" #include "TonlibError.h" #include "utils.h" -#include "QueryTraits.h" +#include "lite-client/QueryTraits.h" namespace tonlib { class LastBlock; @@ -39,7 +39,7 @@ class LastConfig; struct LastBlockState; struct LastConfigState; struct ExtClientRef { - td::actor::ActorId adnl_ext_client_; + td::actor::ActorId adnl_ext_client_; td::actor::ActorId last_block_actor_; td::actor::ActorId last_config_actor_; }; @@ -65,7 +65,7 @@ class ExtClient { template void send_query(QueryT query, td::Promise promise, td::int32 seq_no = -1) { - ton::ShardIdFull shard = QueryTraits::get_shard(query); + ton::ShardIdFull shard = liteclient::QueryTraits::get_shard(query); auto raw_query = ton::serialize_tl_object(&query, true); td::uint32 tag = td::Random::fast_uint32(); VLOG(lite_server) << "send query to liteserver: " << tag << " " << to_string(query); @@ -99,7 +99,7 @@ class ExtClient { void force_change_liteserver() { if (!client_.adnl_ext_client_.empty()) { - td::actor::send_closure(client_.adnl_ext_client_, &ExtClientLazy::force_change_liteserver); + td::actor::send_closure(client_.adnl_ext_client_, &liteclient::ExtClient::force_change_liteserver); } } diff --git a/tonlib/tonlib/ExtClientOutbound.h b/tonlib/tonlib/ExtClientOutbound.h index 31f76b97..6eb6aa98 100644 --- a/tonlib/tonlib/ExtClientOutbound.h +++ b/tonlib/tonlib/ExtClientOutbound.h @@ -18,11 +18,10 @@ */ #pragma once #include "td/actor/actor.h" - -#include "ExtClientLazy.h" +#include "lite-client/ext-client.h" namespace tonlib { -class ExtClientOutbound : public ExtClientLazy { +class ExtClientOutbound : public liteclient::ExtClient { public: class Callback { public: diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 1682c780..3bb3f8a2 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -18,7 +18,6 @@ */ #include "TonlibClient.h" -#include "tonlib/ExtClientLazy.h" #include "tonlib/ExtClientOutbound.h" #include "tonlib/LastBlock.h" #include "tonlib/LastConfig.h" @@ -2022,7 +2021,7 @@ void TonlibClient::init_ext_client() { ext_client_outbound_ = client.get(); raw_client_ = std::move(client); } else { - class Callback : public ExtClientLazy::Callback { + class Callback : public liteclient::ExtClient::Callback { public: explicit Callback(td::actor::ActorShared<> parent) : parent_(std::move(parent)) { } @@ -2032,7 +2031,7 @@ void TonlibClient::init_ext_client() { }; ext_client_outbound_ = {}; ref_cnt_++; - raw_client_ = ExtClientLazy::create(config_.lite_servers, td::make_unique(td::actor::actor_shared())); + raw_client_ = liteclient::ExtClient::create(config_.lite_servers, td::make_unique(td::actor::actor_shared())); } } diff --git a/tonlib/tonlib/TonlibClient.h b/tonlib/tonlib/TonlibClient.h index e3165369..b1d649ef 100644 --- a/tonlib/tonlib/TonlibClient.h +++ b/tonlib/tonlib/TonlibClient.h @@ -33,6 +33,7 @@ #include "td/utils/optional.h" #include "smc-envelope/ManualDns.h" +#include "lite-client/ext-client.h" #include @@ -112,7 +113,7 @@ class TonlibClient : public td::actor::Actor { vm::Dictionary libraries{256}; // network - td::actor::ActorOwn raw_client_; + td::actor::ActorOwn raw_client_; td::actor::ActorId ext_client_outbound_; td::actor::ActorOwn raw_last_block_; td::actor::ActorOwn raw_last_config_; diff --git a/tonlib/tonlib/tonlib-cli.cpp b/tonlib/tonlib/tonlib-cli.cpp index 92749d08..8669dda3 100644 --- a/tonlib/tonlib/tonlib-cli.cpp +++ b/tonlib/tonlib/tonlib-cli.cpp @@ -47,8 +47,6 @@ #include "tonlib/TonlibClient.h" #include "tonlib/TonlibCallback.h" -#include "tonlib/ExtClientLazy.h" - #include "smc-envelope/ManualDns.h" #include "smc-envelope/PaymentChannel.h" @@ -57,6 +55,7 @@ #include "crypto/util/Miner.h" #include "vm/boc.h" #include "vm/cells/CellBuilder.h" +#include "lite-client/ext-client.h" #include #include @@ -174,7 +173,7 @@ class TonlibCli : public td::actor::Actor { std::map>> query_handlers_; - td::actor::ActorOwn raw_client_; + td::actor::ActorOwn raw_client_; bool is_closing_{false}; td::uint32 ref_cnt_{1}; @@ -223,7 +222,7 @@ class TonlibCli : public td::actor::Actor { if (options_.use_callbacks_for_network) { auto config = tonlib::Config::parse(options_.config).move_as_ok(); - class Callback : public tonlib::ExtClientLazy::Callback { + class Callback : public liteclient::ExtClient::Callback { public: explicit Callback(td::actor::ActorShared<> parent) : parent_(std::move(parent)) { } @@ -232,7 +231,7 @@ class TonlibCli : public td::actor::Actor { td::actor::ActorShared<> parent_; }; ref_cnt_++; - raw_client_ = tonlib::ExtClientLazy::create(config.lite_servers, + raw_client_ = liteclient::ExtClient::create(config.lite_servers, td::make_unique(td::actor::actor_shared())); } @@ -1533,7 +1532,7 @@ class TonlibCli : public td::actor::Actor { auto update = tonlib_api::move_object_as(std::move(result)); CHECK(!raw_client_.empty()); snd_bytes_ += update->data_.size(); - send_closure(raw_client_, &tonlib::ExtClientLazy::send_query, "query", td::BufferSlice(update->data_), + send_closure(raw_client_, &liteclient::ExtClient::send_query, "query", td::BufferSlice(update->data_), ton::ShardIdFull(update->workchain_, update->shard_), td::Timestamp::in(5), [actor_id = actor_id(this), id = update->id_](td::Result res) { send_closure(actor_id, &TonlibCli::on_adnl_result, id, std::move(res));