Add documentation to ClientDotNet and LogDotNet.

GitOrigin-RevId: 4683cfb7198430314539780fa793898ff6c36e96
This commit is contained in:
levlam 2018-03-15 19:25:51 +03:00
parent 710f71701a
commit 3b569010aa
9 changed files with 75 additions and 18 deletions

View File

@ -627,6 +627,7 @@ if (TD_ENABLE_DOTNET)
if (NOT CMAKE_CROSSCOMPILING) if (NOT CMAKE_CROSSCOMPILING)
add_dependencies(tddotnet generate_dotnet_api) add_dependencies(tddotnet generate_dotnet_api)
endif() endif()
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore") if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
set_target_properties(tddotnet PROPERTIES VS_WINRT_COMPONENT "true") set_target_properties(tddotnet PROPERTIES VS_WINRT_COMPONENT "true")
target_compile_options(tddotnet PUBLIC "/ZW") target_compile_options(tddotnet PUBLIC "/ZW")

View File

@ -31,7 +31,7 @@ public final class Log {
* *
* @param filePath Path to a file for writing TDLib internal log. Use an empty path to * @param filePath Path to a file for writing TDLib internal log. Use an empty path to
* switch back to logging to the System.err. * switch back to logging to the System.err.
* @return whether opening the log file succeeded * @return whether opening the log file succeeded.
*/ */
public static native boolean setFilePath(String filePath); public static native boolean setFilePath(String filePath);

View File

@ -87,7 +87,7 @@ set(TL_GENERATE_JSON_SOURCE
if (NOT CMAKE_CROSSCOMPILING) if (NOT CMAKE_CROSSCOMPILING)
find_program(PHP_EXECUTABLE php) find_program(PHP_EXECUTABLE php)
if (PHP_EXECUTABLE) if (PHP_EXECUTABLE AND NOT TD_ENABLE_DOTNET)
set(GENERATE_COMMON_CMD generate_common && ${PHP_EXECUTABLE} DoxygenTlDocumentationGenerator.php scheme/td_api.tl auto/td/telegram/td_api.h) set(GENERATE_COMMON_CMD generate_common && ${PHP_EXECUTABLE} DoxygenTlDocumentationGenerator.php scheme/td_api.tl auto/td/telegram/td_api.h)
else() else()
set(GENERATE_COMMON_CMD generate_common) set(GENERATE_COMMON_CMD generate_common)

View File

@ -17,7 +17,7 @@ int main(int argc, char *argv[]) {
td::tl::tl_config config_td = td::tl::read_tl_config_from_file(argv[1]); td::tl::tl_config config_td = td::tl::read_tl_config_from_file(argv[1]);
td::tl::write_tl_to_file(config_td, "auto/td/telegram/TdDotNetApi.cpp", td::tl::write_tl_to_file(config_td, "auto/td/telegram/TdDotNetApi.cpp",
td::tl::TlWriterDotNet("TdApi", false, "#include \"td/telegram/TdDotNetApi.h\"\n")); td::tl::TlWriterDotNet("TdApi", false, "#include \"td/telegram/TdDotNetApi.h\"\n\n"));
td::tl::write_tl_to_file(config_td, "auto/td/telegram/TdDotNetApi.h", td::tl::write_tl_to_file(config_td, "auto/td/telegram/TdDotNetApi.h",
td::tl::TlWriterDotNet("TdApi", true, "#include \"td/telegram/td_api.h\"\n")); td::tl::TlWriterDotNet("TdApi", true, ""));
} }

View File

@ -179,7 +179,6 @@ class TlWriterDotNet : public TL_writer {
} }
std::string gen_output_begin(void) const override { std::string gen_output_begin(void) const override {
return prefix_ + return prefix_ +
"#include \"td/utils/port/CxCli.h\"\n"
"#include \"td/tl/tl_dotnet_object.h\"\n\n" "#include \"td/tl/tl_dotnet_object.h\"\n\n"
"namespace Telegram {\n" "namespace Telegram {\n"
"namespace Td {\n" "namespace Td {\n"

View File

@ -4,10 +4,10 @@
// Distributed under the Boost Software License, Version 1.0. (See accompanying // 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) // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// //
#include "td/telegram/TdDotNetApi.h"
#include "td/telegram/Client.h" #include "td/telegram/Client.h"
#include "td/telegram/TdDotNetApi.h"
#include "td/utils/port/CxCli.h" #include "td/utils/port/CxCli.h"
#include <cstdint> #include <cstdint>
@ -17,12 +17,29 @@ namespace Td {
using namespace CxCli; using namespace CxCli;
/// <summary>
/// Interface for handler for results of queries to TDLib and incoming updates from TDLib.
/// </summary>
public interface class ClientResultHandler { public interface class ClientResultHandler {
/// <summary>
/// Callback called on result of query to TDLib or incoming update from TDLib.
/// </summary>
/// <param name="object">Result of query or update of type Telegram.Td.Api.Update about new events.</param>
void OnResult(Api::BaseObject^ object); void OnResult(Api::BaseObject^ object);
}; };
/// <summary>
/// Main class for interaction with the TDLib.
/// </summary>
public ref class Client sealed { public ref class Client sealed {
public: public:
/// <summary>
/// Sends a request to the TDLib.
/// </summary>
/// <param name="function">Object representing a query to the TDLib.</param>
/// <param name="handler">Result handler with OnResult method which will be called with result
/// of the query or with Telegram.Td.Api.Error as parameter. If it is null, nothing will be called.</param>
/// <exception cref="NullReferenceException">Thrown when query is null.</exception>
void Send(Api::Function^ function, ClientResultHandler^ handler) { void Send(Api::Function^ function, ClientResultHandler^ handler) {
if (function == nullptr) { if (function == nullptr) {
throw REF_NEW NullReferenceException("Function can't be null"); throw REF_NEW NullReferenceException("Function can't be null");
@ -38,6 +55,12 @@ public:
client->send(std::move(request)); client->send(std::move(request));
} }
/// <summary>
/// Synchronously executes a TDLib request. Only a few marked accordingly requests can be executed synchronously.
/// </summary>
/// <param name="function">Object representing a query to the TDLib.</param>
/// <returns>Returns request result.</returns>
/// <exception cref="NullReferenceException">Thrown when query is null.</exception>
Api::BaseObject^ Execute(Api::Function^ function) { Api::BaseObject^ Execute(Api::Function^ function) {
if (function == nullptr) { if (function == nullptr) {
throw REF_NEW NullReferenceException("Function can't be null"); throw REF_NEW NullReferenceException("Function can't be null");
@ -49,10 +72,19 @@ public:
return Api::FromUnmanaged(*client->execute(std::move(request)).object); return Api::FromUnmanaged(*client->execute(std::move(request)).object);
} }
void SetUpdatesHandler(ClientResultHandler^ handler) { /// <summary>
handlers[0] = handler; /// Replaces handler for incoming updates from the TDLib.
/// </summary>
/// <param name="updatesHandler">Handler with OnResult method which will be called for every incoming update from the TDLib.</param>
void SetUpdatesHandler(ClientResultHandler^ updatesHandler) {
handlers[0] = updatesHandler;
} }
/// <summary>
/// Launches a cycle which will fetch all results of queries to TDLib and incoming updates from TDLib.
/// Must be called once on a separate dedicated thread, on which all updates and query results will be handled.
/// Returns only when TDLib instance is closed.
/// </summary>
void Run() { void Run() {
while (true) { while (true) {
auto response = client->receive(10.0); auto response = client->receive(10.0);
@ -68,6 +100,11 @@ public:
} }
} }
/// <summary>
/// Creates new Client.
/// </summary>
/// <param name="updatesHandler">Handler for incoming updates.</param>
/// <returns>Returns created Client.</returns>
static Client^ Create(ClientResultHandler^ updatesHandler) { static Client^ Create(ClientResultHandler^ updatesHandler) {
return REF_NEW Client(updatesHandler); return REF_NEW Client(updatesHandler);
} }

View File

@ -15,19 +15,41 @@ namespace Td {
using namespace CxCli; using namespace CxCli;
/// <summary>
/// Class for managing internal TDLib logging.
/// </summary>
public ref class Log sealed { public ref class Log sealed {
public: public:
/// <summary>
/// Changes TDLib log verbosity.
/// </summary>
/// <param name="verbosityLevel">New value of log verbosity level. Must be non-negative.
/// Value 0 means FATAL, value 1 means ERROR, value 2 means WARNING, value 3 means INFO, value 4 means DEBUG,
/// value greater than 4 can be used to enable even more logging.
/// Default value of the log verbosity level is 5.</param>
static void SetVerbosityLevel(int verbosityLevel) {
::td::Log::set_verbosity_level(verbosityLevel);
}
/// <summary>
/// Sets file path for writing TDLib internal log. By default TDLib writes logs to the System.err.
/// Use this method to write the log to a file instead.
/// </summary>
/// <param name="filePath">Path to a file for writing TDLib internal log. Use an empty path to switch back to logging
/// to the System.err.</param>
/// <returns>Returns whether opening the log file succeeded.</returns>
static bool SetFilePath(String^ filePath) { static bool SetFilePath(String^ filePath) {
return ::td::Log::set_file_path(string_to_unmanaged(filePath)); return ::td::Log::set_file_path(string_to_unmanaged(filePath));
} }
/// <summary>
/// Changes maximum size of TDLib log file.
/// </summary>
/// <param name="maxFileSize">Maximum size of the file to where the internal TDLib log is written
/// before the file will be auto-rotated. Must be positive. Defaults to 10 MB.</param>
static void SetMaxFileSize(std::int64_t maxFileSize) { static void SetMaxFileSize(std::int64_t maxFileSize) {
::td::Log::set_max_file_size(maxFileSize); ::td::Log::set_max_file_size(maxFileSize);
} }
static void SetVerbosityLevel(int verbosityLevel) {
::td::Log::set_verbosity_level(verbosityLevel);
}
}; };
} // namespace Td } // namespace Td

View File

@ -6,7 +6,6 @@
// //
#pragma once #pragma once
#include "td/utils/misc.h"
#include "td/utils/port/CxCli.h" #include "td/utils/port/CxCli.h"
#include "td/telegram/td_api.h" #include "td/telegram/td_api.h"
@ -64,7 +63,7 @@ inline String^ FromUnmanaged(const std::string &from) {
} }
inline auto CLRCALL BytesFromUnmanaged(const std::string &from) { inline auto CLRCALL BytesFromUnmanaged(const std::string &from) {
Array<byte>^ res = REF_NEW Vector<byte>(td::narrow_cast<int>(from.size())); Array<byte>^ res = REF_NEW Vector<byte>(static_cast<ArrayIndexType>(from.size()));
ArrayIndexType i = 0; ArrayIndexType i = 0;
for (auto b : from) { for (auto b : from) {
ArraySet(res, i++, b); ArraySet(res, i++, b);
@ -75,7 +74,7 @@ inline auto CLRCALL BytesFromUnmanaged(const std::string &from) {
template <class FromT> template <class FromT>
auto CLRCALL FromUnmanaged(std::vector<FromT> &vec) { auto CLRCALL FromUnmanaged(std::vector<FromT> &vec) {
using ToT = decltype(FromUnmanaged(vec[0])); using ToT = decltype(FromUnmanaged(vec[0]));
Array<ToT>^ res = REF_NEW Vector<ToT>(td::narrow_cast<int>(vec.size())); Array<ToT>^ res = REF_NEW Vector<ToT>(static_cast<ArrayIndexType>(vec.size()));
ArrayIndexType i = 0; ArrayIndexType i = 0;
for (auto &from : vec) { for (auto &from : vec) {
ArraySet(res, i++, FromUnmanaged(from)); ArraySet(res, i++, FromUnmanaged(from));

View File

@ -13,7 +13,6 @@
#if TD_WINRT #if TD_WINRT
#include "td/utils/misc.h" // for narrow_cast
#include "td/utils/port/wstring_convert.h" #include "td/utils/port/wstring_convert.h"
#include "collection.h" #include "collection.h"
@ -83,7 +82,7 @@ inline std::string string_to_unmanaged(String^ str) {
inline String^ string_from_unmanaged(const std::string &from) { inline String^ string_from_unmanaged(const std::string &from) {
auto tmp = td::to_wstring(from).ok(); auto tmp = td::to_wstring(from).ok();
return REF_NEW String(tmp.c_str(), td::narrow_cast<unsigned>(tmp.size())); return REF_NEW String(tmp.c_str(), static_cast<unsigned>(tmp.size()));
} }
} // namespace CxCli } // namespace CxCli