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
|
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include "td/telegram/td_c_client.h"
#include "td/telegram/Client.h"
#include "td/telegram/Log.h"
#include "td/telegram/td_tdc_api_inner.h"
#include <cstring>
static td::ClientManager *GetClientManager() {
return td::ClientManager::get_manager_singleton();
}
int TdCClientCreateId() {
return GetClientManager()->create_client_id();
}
void TdCClientSend(int client_id, struct TdRequest request) {
GetClientManager()->send(client_id, request.request_id, TdConvertToInternal(request.function));
TdDestroyObjectFunction(request.function);
}
TdResponse TdCClientReceive(double timeout) {
auto response = GetClientManager()->receive(timeout);
TdResponse c_response;
c_response.client_id = response.client_id;
c_response.request_id = response.request_id;
c_response.object = response.object == nullptr ? nullptr : TdConvertFromInternal(*response.object);
return c_response;
}
TdObject *TdCClientExecute(TdFunction *function) {
auto result = td::ClientManager::execute(TdConvertToInternal(function));
TdDestroyObjectFunction(function);
return TdConvertFromInternal(*result);
}
TdVectorInt *TdCreateObjectVectorInt(int size, int *data) {
auto res = new TdVectorInt();
res->len = size;
res->data = new int[size];
std::memcpy(res->data, data, sizeof(int) * size);
return res;
}
TdVectorLong *TdCreateObjectVectorLong(int size, long long *data) {
auto res = new TdVectorLong();
res->len = size;
res->data = new long long[size];
std::memcpy(res->data, data, sizeof(long long) * size);
return res;
}
TdVectorObject *TdCreateObjectVectorObject(int size, TdObject **data) {
auto res = new TdVectorObject();
res->len = size;
res->data = new TdObject *[size];
std::memcpy(res->data, data, sizeof(TdObject *) * size);
return res;
}
TdBytes TdCreateObjectBytes(unsigned char *data, int len) {
TdBytes res;
res.len = len;
res.data = new unsigned char[len];
std::memcpy(res.data, data, len);
return res;
}
|