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