summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/example/csharp/TdExample.cs')
-rw-r--r--protocols/Telegram/tdlib/td/example/csharp/TdExample.cs98
1 files changed, 61 insertions, 37 deletions
diff --git a/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs b/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs
index be98e1a758..0c07ee7c7b 100644
--- a/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs
+++ b/protocols/Telegram/tdlib/td/example/csharp/TdExample.cs
@@ -1,5 +1,5 @@
//
-// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
//
// 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)
@@ -23,23 +23,18 @@ namespace TdExample
private static TdApi.AuthorizationState _authorizationState = null;
private static volatile bool _haveAuthorization = false;
- private static volatile bool _quiting = false;
+ private static volatile bool _needQuit = false;
+ private static volatile bool _canQuit = false;
private static volatile AutoResetEvent _gotAuthorization = new AutoResetEvent(false);
private static readonly string _newLine = Environment.NewLine;
- private static readonly string _commandsLine = "Enter command (gc <chatId> - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, q - Quit): ";
+ private static readonly string _commandsLine = "Enter command (gc <chatId> - GetChat, me - GetMe, sm <chatId> <message> - SendMessage, lo - LogOut, r - Restart, q - Quit): ";
private static volatile string _currentPrompt = null;
private static Td.Client CreateTdClient()
{
- Td.Client result = Td.Client.Create(new UpdatesHandler());
- new Thread(() =>
- {
- Thread.CurrentThread.IsBackground = true;
- result.Run();
- }).Start();
- return result;
+ return Td.Client.Create(new UpdateHandler());
}
private static void Print(string str)
@@ -72,33 +67,48 @@ namespace TdExample
}
if (_authorizationState is TdApi.AuthorizationStateWaitTdlibParameters)
{
- TdApi.TdlibParameters parameters = new TdApi.TdlibParameters();
- parameters.DatabaseDirectory = "tdlib";
- parameters.UseMessageDatabase = true;
- parameters.UseSecretChats = true;
- parameters.ApiId = 94575;
- parameters.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2";
- parameters.SystemLanguageCode = "en";
- parameters.DeviceModel = "Desktop";
- parameters.SystemVersion = "Unknown";
- parameters.ApplicationVersion = "1.0";
- parameters.EnableStorageOptimizer = true;
+ TdApi.SetTdlibParameters request = new TdApi.SetTdlibParameters();
+ request.DatabaseDirectory = "tdlib";
+ request.UseMessageDatabase = true;
+ request.UseSecretChats = true;
+ request.ApiId = 94575;
+ request.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2";
+ request.SystemLanguageCode = "en";
+ request.DeviceModel = "Desktop";
+ request.ApplicationVersion = "1.0";
+ request.EnableStorageOptimizer = true;
- _client.Send(new TdApi.SetTdlibParameters(parameters), new AuthorizationRequestHandler());
- }
- else if (_authorizationState is TdApi.AuthorizationStateWaitEncryptionKey)
- {
- _client.Send(new TdApi.CheckDatabaseEncryptionKey(), new AuthorizationRequestHandler());
+ _client.Send(request, new AuthorizationRequestHandler());
}
else if (_authorizationState is TdApi.AuthorizationStateWaitPhoneNumber)
{
string phoneNumber = ReadLine("Please enter phone number: ");
- _client.Send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, false, false), new AuthorizationRequestHandler());
+ _client.Send(new TdApi.SetAuthenticationPhoneNumber(phoneNumber, null), new AuthorizationRequestHandler());
+ }
+ else if (_authorizationState is TdApi.AuthorizationStateWaitEmailAddress)
+ {
+ string emailAddress = ReadLine("Please enter email address: ");
+ _client.Send(new TdApi.SetAuthenticationEmailAddress(emailAddress), new AuthorizationRequestHandler());
+ }
+ else if (_authorizationState is TdApi.AuthorizationStateWaitEmailCode)
+ {
+ string code = ReadLine("Please enter email authentication code: ");
+ _client.Send(new TdApi.CheckAuthenticationEmailCode(new TdApi.EmailAddressAuthenticationCode(code)), new AuthorizationRequestHandler());
+ }
+ else if (_authorizationState is TdApi.AuthorizationStateWaitOtherDeviceConfirmation state)
+ {
+ Console.WriteLine("Please confirm this login link on another device: " + state.Link);
}
else if (_authorizationState is TdApi.AuthorizationStateWaitCode)
{
string code = ReadLine("Please enter authentication code: ");
- _client.Send(new TdApi.CheckAuthenticationCode(code, "", ""), new AuthorizationRequestHandler());
+ _client.Send(new TdApi.CheckAuthenticationCode(code), new AuthorizationRequestHandler());
+ }
+ else if (_authorizationState is TdApi.AuthorizationStateWaitRegistration)
+ {
+ string firstName = ReadLine("Please enter your first name: ");
+ string lastName = ReadLine("Please enter your last name: ");
+ _client.Send(new TdApi.RegisterUser(firstName, lastName), new AuthorizationRequestHandler());
}
else if (_authorizationState is TdApi.AuthorizationStateWaitPassword)
{
@@ -123,9 +133,11 @@ namespace TdExample
else if (_authorizationState is TdApi.AuthorizationStateClosed)
{
Print("Closed");
- if (!_quiting)
+ if (!_needQuit)
{
_client = CreateTdClient(); // recreate _client after previous has closed
+ } else {
+ _canQuit = true;
}
}
else
@@ -172,8 +184,12 @@ namespace TdExample
_haveAuthorization = false;
_client.Send(new TdApi.LogOut(), _defaultHandler);
break;
+ case "r":
+ _haveAuthorization = false;
+ _client.Send(new TdApi.Close(), _defaultHandler);
+ break;
case "q":
- _quiting = true;
+ _needQuit = true;
_haveAuthorization = false;
_client.Send(new TdApi.Close(), _defaultHandler);
break;
@@ -195,37 +211,45 @@ namespace TdExample
TdApi.ReplyMarkup replyMarkup = new TdApi.ReplyMarkupInlineKeyboard(new TdApi.InlineKeyboardButton[][] { row, row, row });
TdApi.InputMessageContent content = new TdApi.InputMessageText(new TdApi.FormattedText(message, null), false, true);
- _client.Send(new TdApi.SendMessage(chatId, 0, false, false, replyMarkup, content), _defaultHandler);
+ _client.Send(new TdApi.SendMessage(chatId, 0, 0, null, replyMarkup, content), _defaultHandler);
}
static void Main()
{
// disable TDLib log
- Td.Log.SetVerbosityLevel(0);
- if (!Td.Log.SetFilePath("tdlib.log"))
+ Td.Client.Execute(new TdApi.SetLogVerbosityLevel(0));
+ if (Td.Client.Execute(new TdApi.SetLogStream(new TdApi.LogStreamFile("tdlib.log", 1 << 27, false))) is TdApi.Error)
{
throw new System.IO.IOException("Write access to the current directory is required");
}
+ new Thread(() =>
+ {
+ Thread.CurrentThread.IsBackground = true;
+ Td.Client.Run();
+ }).Start();
// create Td.Client
_client = CreateTdClient();
// test Client.Execute
- _defaultHandler.OnResult(_client.Execute(new TdApi.GetTextEntities("@telegram /test_command https://telegram.org telegram.me @gif @test")));
+ _defaultHandler.OnResult(Td.Client.Execute(new TdApi.GetTextEntities("@telegram /test_command https://telegram.org telegram.me @gif @test")));
// main loop
- while (!_quiting)
+ while (!_needQuit)
{
// await authorization
_gotAuthorization.Reset();
_gotAuthorization.WaitOne();
- _client.Send(new TdApi.GetChats(Int64.MaxValue, 0, 100), _defaultHandler); // preload chat list
+ _client.Send(new TdApi.LoadChats(null, 100), _defaultHandler); // preload main chat list
while (_haveAuthorization)
{
GetCommand();
}
}
+ while (!_canQuit) {
+ Thread.Sleep(1);
+ }
}
private class DefaultHandler : Td.ClientResultHandler
@@ -236,7 +260,7 @@ namespace TdExample
}
}
- private class UpdatesHandler : Td.ClientResultHandler
+ private class UpdateHandler : Td.ClientResultHandler
{
void Td.ClientResultHandler.OnResult(TdApi.BaseObject @object)
{