1 //
2 // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 using System;
8 using System.IO;
9 using Td = Telegram.Td;
10 using TdApi = Telegram.Td.Api;
11 using Windows.UI.Core;
12 using Windows.UI.Xaml;
13 using Windows.UI.Xaml.Controls;
14 
15 namespace TdApp
16 {
17     public sealed partial class MainPage : Page
18     {
19         public System.Collections.ObjectModel.ObservableCollection<string> Items { get; set; }
20 
21         private MyClientResultHandler _handler;
22 
MainPage()23         public MainPage()
24         {
25             InitializeComponent();
26 
27             Items = new System.Collections.ObjectModel.ObservableCollection<string>();
28             _handler = new MyClientResultHandler(this);
29 
30             Td.Client.Execute(new TdApi.SetLogVerbosityLevel(0));
31             Td.Client.Execute(new TdApi.SetLogStream(new TdApi.LogStreamFile(Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "log"), 1 << 27, false)));
32             Td.Client.SetLogMessageCallback(100, LogMessageCallback);
33             System.Threading.Tasks.Task.Run(() =>
34             {
35                 Td.Client.Run();
36             });
37 
38             _client = Td.Client.Create(_handler);
39             var parameters = new TdApi.TdlibParameters();
40             parameters.DatabaseDirectory = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
41             parameters.UseSecretChats = true;
42             parameters.UseMessageDatabase = true;
43             parameters.ApiId = 94575;
44             parameters.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2";
45             parameters.SystemLanguageCode = "en";
46             parameters.DeviceModel = "Desktop";
47             parameters.ApplicationVersion = "1.0.0";
48             _client.Send(new TdApi.SetTdlibParameters(parameters), null);
49             _client.Send(new TdApi.CheckDatabaseEncryptionKey(), null);
50         }
51 
Print(String str)52         public void Print(String str)
53         {
54             var delayTask = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
55             {
56                 Items.Insert(0, str.Substring(0, Math.Min(1024, str.Length)));
57             });
58         }
59 
LogMessageCallback(int verbosity_level, String str)60         private void LogMessageCallback(int verbosity_level, String str)
61         {
62             if (verbosity_level < 0) {
63                 return;
64             }
65             Print(verbosity_level + ": " + str);
66         }
67 
68         private Td.Client _client;
69 
AcceptCommand(String command)70         private void AcceptCommand(String command)
71         {
72             Input.Text = string.Empty;
73             Items.Insert(0, string.Format(">>{0}", command));
74         }
Button_Click(object sender, RoutedEventArgs e)75         private void Button_Click(object sender, RoutedEventArgs e)
76         {
77             var command = Input.Text;
78 
79             if (command.StartsWith("DESTROY"))
80             {
81                 AcceptCommand("Destroy");
82                 _client.Send(new TdApi.Destroy(), _handler);
83             }
84             else if (command.StartsWith("lo"))
85             {
86                 AcceptCommand("LogOut");
87                 _client.Send(new TdApi.LogOut(), _handler);
88             }
89             else if (command.StartsWith("gas"))
90             {
91                 AcceptCommand(command);
92                 _client.Send(new TdApi.GetAuthorizationState(), _handler);
93             }
94             else if (command.StartsWith("sap"))
95             {
96                 var args = command.Split(" ".ToCharArray(), 2);
97                 AcceptCommand(command);
98                 _client.Send(new TdApi.SetAuthenticationPhoneNumber(args[1], null), _handler);
99             }
100             else if (command.StartsWith("cac"))
101             {
102                 var args = command.Split(" ".ToCharArray(), 2);
103                 AcceptCommand(command);
104                 _client.Send(new TdApi.CheckAuthenticationCode(args[1]), _handler);
105             }
106             else if (command.StartsWith("cap"))
107             {
108                 var args = command.Split(" ".ToCharArray(), 2);
109                 AcceptCommand(command);
110                 _client.Send(new TdApi.CheckAuthenticationPassword(args[1]), _handler);
111             }
112             else if (command.StartsWith("alm"))
113             {
114                 var args = command.Split(" ".ToCharArray(), 3);
115                 AcceptCommand(command);
116                 _client.Send(new TdApi.AddLogMessage(Int32.Parse(args[1]), args[2]), _handler);
117             }
118             else if (command.StartsWith("gco"))
119             {
120                 var args = command.Split(" ".ToCharArray(), 2);
121                 AcceptCommand(command);
122                 _client.Send(new TdApi.SearchContacts(), _handler);
123             }
124             else if (command.StartsWith("df"))
125             {
126                 var args = command.Split(" ".ToCharArray(), 2);
127                 AcceptCommand(command);
128                 _client.Send(new TdApi.DownloadFile(Int32.Parse(args[1]), 1, 0, 0, false), _handler);
129             }
130             else if (command.StartsWith("bench"))
131             {
132                 var args = command.Split(" ".ToCharArray(), 2);
133                 AcceptCommand(command);
134                 var cnt = Int32.Parse(args[1]);
135                 var handler = new BenchSimpleHandler(this, cnt);
136                 for (int i = 0; i < cnt; i++)
137                 {
138                     _client.Send(new TdApi.TestSquareInt(123), handler);
139                 }
140             }
141         }
142     }
143 
144     class MyClientResultHandler : Td.ClientResultHandler
145     {
146         private MainPage _page;
147 
MyClientResultHandler(MainPage page)148         public MyClientResultHandler(MainPage page)
149         {
150             _page = page;
151         }
152 
OnResult(TdApi.BaseObject obj)153         public void OnResult(TdApi.BaseObject obj)
154         {
155             var str = obj.ToString();
156             _page.Print(str);
157         }
158     }
159 
160     class BenchSimpleHandler : Td.ClientResultHandler
161     {
162         private MainPage _page;
163         private int _cnt;
164 
BenchSimpleHandler(MainPage page, int cnt)165         public BenchSimpleHandler(MainPage page, int cnt)
166         {
167             _page = page;
168             _cnt = cnt;
169         }
170 
OnResult(TdApi.BaseObject obj)171         public void OnResult(TdApi.BaseObject obj)
172         {
173             _cnt--;
174             if (_cnt == 0)
175             {
176                 _page.Print("DONE");
177             }
178         }
179     }
180 }
181