-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathcallback.cpp
More file actions
82 lines (70 loc) · 2.48 KB
/
Copy pathcallback.cpp
File metadata and controls
82 lines (70 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <unistd.h>
#include <cstdint>
#include <memory>
#include <mutex>
#include <unordered_set>
#include "auto/tl/tonlib_api.h"
#include "auto/tl/tonlib_api.hpp"
#include "auto/tl/tonlib_api_json.h"
#include "td/utils/JsonBuilder.h"
#include "td/utils/logging.h"
#include "tl/tl_json.h"
#include "tonlib-multiclient/multi_client.h"
#include "tonlib-multiclient/request.h"
#include "tonlib-multiclient/response_callback.h"
#include "tonlib/Logging.h"
struct Cb : public multiclient::ResponseCallback {
Cb(std::unordered_set<uint64_t>& requests) : requests_(requests) {
}
~Cb() override = default;
void on_result(int64_t client_id, uint64_t req_id, tonlib_api::object_ptr<tonlib_api::Object> result) override {
if (requests_.contains(req_id)) {
auto serialized = td::json_encode<td::string>(td::ToJson(result));
LOG(INFO) << "result | client_id: " << client_id << " req_id: " << req_id << " res_tl_id: " << result->get_id()
<< " << serialized << " << serialized;
requests_.erase(req_id);
}
}
void on_error(int64_t client_id, uint64_t req_id, tonlib_api::object_ptr<tonlib_api::error> error) override {
if (requests_.contains(req_id)) {
LOG(ERROR) << "error | client_id: " << client_id << " req_id: " << req_id << " code: " << error->code_
<< " message: " << error->message_;
}
}
std::unordered_set<uint64_t>& requests_;
};
int main(int argc, char* argv[]) {
tonlib::Logging::set_verbosity_level(3);
uint64_t request_id = 9999;
std::unordered_set<uint64_t> requests{};
multiclient::MultiClient client(
multiclient::MultiClientConfig{
.global_config_path = std::filesystem::path("/tmp/global-config.json"),
.key_store_root = std::filesystem::path("/tmp/keystore"),
.scheduler_threads = 6,
},
std::make_unique<Cb>(requests)
);
sleep(5);
while (true) {
sleep(5);
auto req_id = request_id++;
requests.insert(req_id);
LOG(INFO) << "send request, id: " << req_id;
client.send_callback_request(
multiclient::RequestCallback{
.parameters = {.mode = multiclient::RequestMode::Broadcast},
.request_creator =
[]() {
return ton::tonlib_api::make_object<ton::tonlib_api::getAccountState>(
ton::tonlib_api::make_object<ton::tonlib_api::accountAddress>(
"UQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqEBI"
)
);
},
.request_id = req_id,
}
);
}
return 0;
}