summaryrefslogtreecommitdiff
path: root/libs/tdlib/td/example/uwp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/tdlib/td/example/uwp')
-rw-r--r--libs/tdlib/td/example/uwp/LICENSE_1_0.txt23
-rw-r--r--libs/tdlib/td/example/uwp/README.md28
-rw-r--r--libs/tdlib/td/example/uwp/SDKManifest.xml12
-rw-r--r--libs/tdlib/td/example/uwp/[Content_Types].xml14
-rw-r--r--libs/tdlib/td/example/uwp/app/.gitignore5
-rw-r--r--libs/tdlib/td/example/uwp/app/App.xaml7
-rw-r--r--libs/tdlib/td/example/uwp/app/App.xaml.cs104
-rw-r--r--libs/tdlib/td/example/uwp/app/ApplicationInsights.config3
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/LockScreenLogo.scale-200.pngbin0 -> 1430 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/SplashScreen.scale-200.pngbin0 -> 7700 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/Square150x150Logo.scale-200.pngbin0 -> 2937 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.scale-200.pngbin0 -> 1647 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.targetsize-24_altform-unplated.pngbin0 -> 1255 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/StoreLogo.pngbin0 -> 1451 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/Assets/Wide310x150Logo.scale-200.pngbin0 -> 3204 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/MainPage.xaml29
-rw-r--r--libs/tdlib/td/example/uwp/app/MainPage.xaml.cs171
-rw-r--r--libs/tdlib/td/example/uwp/app/Package.appxmanifest28
-rw-r--r--libs/tdlib/td/example/uwp/app/Properties/AssemblyInfo.cs29
-rw-r--r--libs/tdlib/td/example/uwp/app/Properties/Default.rd.xml31
-rw-r--r--libs/tdlib/td/example/uwp/app/TdApp.csproj151
-rw-r--r--libs/tdlib/td/example/uwp/app/TdApp_TemporaryKey.pfxbin0 -> 2456 bytes
-rw-r--r--libs/tdlib/td/example/uwp/app/project.json19
-rw-r--r--libs/tdlib/td/example/uwp/build.ps1142
-rw-r--r--libs/tdlib/td/example/uwp/extension.vsixmanifest17
25 files changed, 813 insertions, 0 deletions
diff --git a/libs/tdlib/td/example/uwp/LICENSE_1_0.txt b/libs/tdlib/td/example/uwp/LICENSE_1_0.txt
new file mode 100644
index 0000000000..36b7cd93cd
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/LICENSE_1_0.txt
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/libs/tdlib/td/example/uwp/README.md b/libs/tdlib/td/example/uwp/README.md
new file mode 100644
index 0000000000..e7bb9b821b
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/README.md
@@ -0,0 +1,28 @@
+# TDLib Universal Windows Platform example
+
+This is an example of building TDLib SDK for Universal Windows Platform and an example of its usage from C#.
+
+## Building SDK
+
+* Download and install Microsoft Visual Studio 2015+ with Windows 10 SDK. We recommend to use the latest available versions of Microsoft Visual Studio and Windows 10 SDK.
+* Download and install [CMake](https://cmake.org/download/).
+* Install [vcpkg](https://github.com/Microsoft/vcpkg#quick-start) or update it to the latest version using `vcpkg update` and following received instructions.
+* Install `zlib` and `openssl` for all UWP architectures using `vcpkg`:
+```
+C:\src\vcpkg> .\vcpkg.exe install openssl:arm-uwp openssl:x64-uwp openssl:x86-uwp zlib:arm-uwp zlib:x64-uwp zlib:x86-uwp
+```
+* (Optional. For XML documentation generation.) Download [PHP](https://windows.php.net/download#php-7.2). Add the path to php.exe to the PATH environment variable.
+* Download and install [gperf](https://sourceforge.net/projects/gnuwin32/files/gperf/3.0.1/). Add the path to gperf.exe to the PATH environment variable.
+* Download and install [7-Zip](http://www.7-zip.org/download.html) archiver, which is used by the `build.ps1` script to create a Telegram.Td.UWP Visual Studio Extension. Add the path to 7z.exe to the PATH environment variable.
+ Alternatively `build.ps1` supports compressing using [WinRAR](https://en.wikipedia.org/wiki/WinRAR) with option `-compress winrar` and compressing using [zip](http://gnuwin32.sourceforge.net/packages/zip.htm) with `-compress zip`.
+* Build `TDLib` using provided `build.ps1` script (TDLib should be built 6 times for multiple platforms in Debug and Release configurations, so it make take few hours). Pass path to vcpkg.exe as `-vcpkg-root` argument:
+```
+powershell -ExecutionPolicy ByPass .\build.ps1 -vcpkg_root C:\src\vcpkg
+```
+If you need to restart the build from scratch, call `.\build.ps1 -mode clean` first.
+* Install Visual Studio Extension "TDLib for Universal Windows Platform" located at `build-uwp\vsix\tdlib.vsix`, which was created on the previous step by `build.ps1` script.
+
+Now `TDLib` can be freely used from any UWP project, built in Visual Studio.
+
+## Example of usage
+The `app/` directory contains a simple example of a C# application for Universal Windows Platform. Just open it with Visual Studio 2015 or 2017 and run.
diff --git a/libs/tdlib/td/example/uwp/SDKManifest.xml b/libs/tdlib/td/example/uwp/SDKManifest.xml
new file mode 100644
index 0000000000..d6896fcb65
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/SDKManifest.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<FileList
+ DisplayName="TDLib for Universal Windows Platform"
+ ProductFamilyName="Telegram.Td.UWP"
+ MoreInfo="https://core.telegram.org/tdlib"
+ MinVSVersion="14.0"
+ AppliesTo="WindowsAppContainer"
+ DependsOn="Microsoft.VCLibs, version=14.0"
+ SupportsMultipleVersions="Error"
+ SupportedArchitectures="x86;x64;ARM">
+ <File Reference="Telegram.Td.winmd" Implementation="Telegram.Td.dll" />
+</FileList>
diff --git a/libs/tdlib/td/example/uwp/[Content_Types].xml b/libs/tdlib/td/example/uwp/[Content_Types].xml
new file mode 100644
index 0000000000..b91d46fa3c
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/[Content_Types].xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
+ <Default Extension="winmd" ContentType="application/octet-stream" />
+ <Default Extension="pri" ContentType="application/octet-stream" />
+ <Default Extension="dll" ContentType="application/octet-stream" />
+ <Default Extension="h" ContentType="application/octet-stream" />
+ <Default Extension="lib" ContentType="application/octet-stream" />
+ <Default Extension="pdb" ContentType="application/octet-stream" />
+ <Default Extension="png" ContentType="application/octet-stream" />
+ <Default Extension="props" ContentType="application/octet-stream" />
+ <Default Extension="txt" ContentType="text/plain" />
+ <Default Extension="vsixmanifest" ContentType="text/xml" />
+ <Default Extension="xml" ContentType="text/xml" />
+</Types>
diff --git a/libs/tdlib/td/example/uwp/app/.gitignore b/libs/tdlib/td/example/uwp/app/.gitignore
new file mode 100644
index 0000000000..37ab08165b
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/.gitignore
@@ -0,0 +1,5 @@
+.vs/
+bin/
+obj/
+project.lock.json
+TdApp.csproj.user
diff --git a/libs/tdlib/td/example/uwp/app/App.xaml b/libs/tdlib/td/example/uwp/app/App.xaml
new file mode 100644
index 0000000000..b4256fd441
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/App.xaml
@@ -0,0 +1,7 @@
+<Application
+ x:Class="TdApp.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:TdApp"
+ RequestedTheme="Light">
+</Application>
diff --git a/libs/tdlib/td/example/uwp/app/App.xaml.cs b/libs/tdlib/td/example/uwp/app/App.xaml.cs
new file mode 100644
index 0000000000..0ed0f96812
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/App.xaml.cs
@@ -0,0 +1,104 @@
+//
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018
+//
+// 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)
+//
+using System;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
+
+namespace TdApp
+{
+ /// <summary>
+ /// Provides application-specific behavior to supplement the default Application class.
+ /// </summary>
+ sealed partial class App : Application
+ {
+ /// <summary>
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ /// </summary>
+ public App()
+ {
+ Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(
+ Microsoft.ApplicationInsights.WindowsCollectors.Metadata |
+ Microsoft.ApplicationInsights.WindowsCollectors.Session);
+ this.InitializeComponent();
+ this.Suspending += OnSuspending;
+ }
+
+ /// <summary>
+ /// Invoked when the application is launched normally by the end user. Other entry points
+ /// will be used such as when the application is launched to open a specific file.
+ /// </summary>
+ /// <param name="e">Details about the launch request and process.</param>
+ protected override void OnLaunched(LaunchActivatedEventArgs e)
+ {
+
+#if DEBUG
+ if (System.Diagnostics.Debugger.IsAttached)
+ {
+ this.DebugSettings.EnableFrameRateCounter = true;
+ }
+#endif
+
+ Frame rootFrame = Window.Current.Content as Frame;
+
+ // Do not repeat app initialization when the Window already has content,
+ // just ensure that the window is active
+ if (rootFrame == null)
+ {
+ // Create a Frame to act as the navigation context and navigate to the first page
+ rootFrame = new Frame();
+
+ rootFrame.NavigationFailed += OnNavigationFailed;
+
+ if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
+ {
+ //TODO: Load state from previously suspended application
+ }
+
+ // Place the frame in the current Window
+ Window.Current.Content = rootFrame;
+ }
+
+ if (rootFrame.Content == null)
+ {
+ // When the navigation stack isn't restored navigate to the first page,
+ // configuring the new page by passing required information as a navigation
+ // parameter
+ rootFrame.Navigate(typeof(MainPage), e.Arguments);
+ }
+ // Ensure the current window is active
+ Window.Current.Activate();
+ }
+
+ /// <summary>
+ /// Invoked when Navigation to a certain page fails
+ /// </summary>
+ /// <param name="sender">The Frame which failed navigation</param>
+ /// <param name="e">Details about the navigation failure</param>
+ void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
+ }
+
+ /// <summary>
+ /// Invoked when application execution is being suspended. Application state is saved
+ /// without knowing whether the application will be terminated or resumed with the contents
+ /// of memory still intact.
+ /// </summary>
+ /// <param name="sender">The source of the suspend request.</param>
+ /// <param name="e">Details about the suspend request.</param>
+ private void OnSuspending(object sender, SuspendingEventArgs e)
+ {
+ var deferral = e.SuspendingOperation.GetDeferral();
+ //TODO: Save application state and stop any background activity
+ deferral.Complete();
+ }
+ }
+}
diff --git a/libs/tdlib/td/example/uwp/app/ApplicationInsights.config b/libs/tdlib/td/example/uwp/app/ApplicationInsights.config
new file mode 100644
index 0000000000..cb2a232da3
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/ApplicationInsights.config
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ApplicationInsights xmlns = "http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
+</ApplicationInsights>
diff --git a/libs/tdlib/td/example/uwp/app/Assets/LockScreenLogo.scale-200.png b/libs/tdlib/td/example/uwp/app/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 0000000000..735f57adb5
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/LockScreenLogo.scale-200.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/SplashScreen.scale-200.png b/libs/tdlib/td/example/uwp/app/Assets/SplashScreen.scale-200.png
new file mode 100644
index 0000000000..023e7f1fed
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/SplashScreen.scale-200.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/Square150x150Logo.scale-200.png b/libs/tdlib/td/example/uwp/app/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 0000000000..af49fec1a5
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/Square150x150Logo.scale-200.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.scale-200.png b/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 0000000000..ce342a2ec8
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.scale-200.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 0000000000..f6c02ce97e
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/StoreLogo.png b/libs/tdlib/td/example/uwp/app/Assets/StoreLogo.png
new file mode 100644
index 0000000000..7385b56c0e
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/StoreLogo.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/Assets/Wide310x150Logo.scale-200.png b/libs/tdlib/td/example/uwp/app/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 0000000000..288995b397
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Assets/Wide310x150Logo.scale-200.png
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/MainPage.xaml b/libs/tdlib/td/example/uwp/app/MainPage.xaml
new file mode 100644
index 0000000000..cdff97d9f3
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/MainPage.xaml
@@ -0,0 +1,29 @@
+<Page
+ x:Class="TdApp.MainPage"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:TdApp"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ mc:Ignorable="d"
+ x:Name="Self">
+
+ <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="*"/>
+ </Grid.RowDefinitions>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*"/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <TextBox x:Name="Input"/>
+ <Button Grid.Column="1" x:Name="Send" Content="send" Click="Button_Click"/>
+ </Grid>
+ <ListBox Grid.Row="1" x:Name="ItemsControl" ItemsSource="{Binding Items, ElementName=Self}">
+
+ </ListBox>
+ <!--<Button Content="Test" Click="Button_Click"/>-->
+ </Grid>
+</Page>
diff --git a/libs/tdlib/td/example/uwp/app/MainPage.xaml.cs b/libs/tdlib/td/example/uwp/app/MainPage.xaml.cs
new file mode 100644
index 0000000000..9bdf5070ee
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/MainPage.xaml.cs
@@ -0,0 +1,171 @@
+//
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018
+//
+// 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)
+//
+using System;
+using System.IO;
+using Td = Telegram.Td;
+using TdApi = Telegram.Td.Api;
+using Windows.UI.Core;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+
+namespace TdApp
+{
+ public sealed partial class MainPage : Page
+ {
+ public System.Collections.ObjectModel.ObservableCollection<string> Items { get; set; }
+
+ private static MyClientResultHandler _handler;
+
+ public MainPage()
+ {
+ InitializeComponent();
+
+ Items = new System.Collections.ObjectModel.ObservableCollection<string>();
+ _handler = new MyClientResultHandler(this);
+
+ System.Threading.Tasks.Task.Run(() =>
+ {
+ try
+ {
+ Td.Log.SetFilePath(Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "log"));
+ _client = Td.Client.Create(_handler);
+ var parameters = new TdApi.TdlibParameters();
+ parameters.DatabaseDirectory = Windows.Storage.ApplicationData.Current.LocalFolder.Path;
+ parameters.UseSecretChats = true;
+ parameters.UseMessageDatabase = true;
+ parameters.ApiId = 94575;
+ parameters.ApiHash = "a3406de8d171bb422bb6ddf3bbd800e2";
+ parameters.SystemLanguageCode = "en";
+ parameters.DeviceModel = "en";
+ parameters.SystemVersion = "en";
+ parameters.ApplicationVersion = "1.0.0";
+ _client.Send(new TdApi.SetTdlibParameters(parameters), null);
+ _client.Send(new TdApi.CheckDatabaseEncryptionKey(), null);
+ _client.Run();
+ }
+ catch (Exception ex)
+ {
+ Print(ex.ToString());
+ }
+ });
+ }
+
+ public void Print(String str)
+ {
+ var delayTask = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
+ {
+ Items.Insert(0, str.Substring(0, Math.Min(1024, str.Length)));
+ });
+ }
+
+ private static Td.Client _client;
+
+ private void AcceptCommand(String command)
+ {
+ Input.Text = string.Empty;
+ Items.Insert(0, string.Format(">>{0}", command));
+ }
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ var command = Input.Text;
+
+ if (command.StartsWith("DESTROY"))
+ {
+ AcceptCommand("Destroy");
+ _client.Send(new TdApi.Destroy(), _handler);
+ }
+ else if (command.StartsWith("lo"))
+ {
+ AcceptCommand("LogOut");
+ _client.Send(new TdApi.LogOut(), _handler);
+ }
+ else if (command.StartsWith("gas"))
+ {
+ AcceptCommand(command);
+ _client.Send(new TdApi.GetAuthorizationState(), _handler);
+ }
+ else if (command.StartsWith("sap"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ _client.Send(new TdApi.SetAuthenticationPhoneNumber(args[1], false, false), _handler);
+ }
+ else if (command.StartsWith("cac"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ _client.Send(new TdApi.CheckAuthenticationCode(args[1], String.Empty, String.Empty), _handler);
+ }
+ else if (command.StartsWith("cap"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ _client.Send(new TdApi.CheckAuthenticationPassword(args[1]), _handler);
+ }
+ else if (command.StartsWith("gco"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ _client.Send(new TdApi.SearchContacts(), _handler);
+ }
+ else if (command.StartsWith("df"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ _client.Send(new TdApi.DownloadFile(Int32.Parse(args[1]), 1), _handler);
+ }
+ else if (command.StartsWith("bench"))
+ {
+ var args = command.Split(" ".ToCharArray(), 2);
+ AcceptCommand(command);
+ var cnt = Int32.Parse(args[1]);
+ var handler = new BenchSimpleHandler(this, cnt);
+ for (int i = 0; i < cnt; i++)
+ {
+ _client.Send(new TdApi.TestSquareInt(123), handler);
+ }
+ }
+ }
+ }
+
+ class MyClientResultHandler : Td.ClientResultHandler
+ {
+ private MainPage _page;
+
+ public MyClientResultHandler(MainPage page)
+ {
+ _page = page;
+ }
+
+ public void OnResult(TdApi.BaseObject obj)
+ {
+ var str = obj.ToString();
+ _page.Print(str);
+ }
+ }
+
+ class BenchSimpleHandler : Td.ClientResultHandler
+ {
+ private MainPage _page;
+ private int _cnt;
+
+ public BenchSimpleHandler(MainPage page, int cnt)
+ {
+ _page = page;
+ _cnt = cnt;
+ }
+
+ public void OnResult(TdApi.BaseObject obj)
+ {
+ _cnt--;
+ if (_cnt == 0)
+ {
+ _page.Print("DONE");
+ }
+ }
+ }
+}
diff --git a/libs/tdlib/td/example/uwp/app/Package.appxmanifest b/libs/tdlib/td/example/uwp/app/Package.appxmanifest
new file mode 100644
index 0000000000..ca1235ffa7
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Package.appxmanifest
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
+ <Identity Name="1c9ba6de-23cf-4aef-803b-91fcc451b69a" Publisher="CN=arseny30" Version="1.0.0.0" />
+ <mp:PhoneIdentity PhoneProductId="1c9ba6de-23cf-4aef-803b-91fcc451b69a" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
+ <Properties>
+ <DisplayName>TdApp</DisplayName>
+ <PublisherDisplayName>arseny30</PublisherDisplayName>
+ <Logo>Assets\StoreLogo.png</Logo>
+ </Properties>
+ <Dependencies>
+ <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
+ </Dependencies>
+ <Resources>
+ <Resource Language="x-generate" />
+ </Resources>
+ <Applications>
+ <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="TdApp.App">
+ <uap:VisualElements DisplayName="TdApp" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="TdApp" BackgroundColor="transparent">
+ <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
+ </uap:DefaultTile>
+ <uap:SplashScreen Image="Assets\SplashScreen.png" />
+ </uap:VisualElements>
+ </Application>
+ </Applications>
+ <Capabilities>
+ <Capability Name="internetClient" />
+ </Capabilities>
+</Package> \ No newline at end of file
diff --git a/libs/tdlib/td/example/uwp/app/Properties/AssemblyInfo.cs b/libs/tdlib/td/example/uwp/app/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..99e2b83bea
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Properties/AssemblyInfo.cs
@@ -0,0 +1,29 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("App2")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("App2")]
+[assembly: AssemblyCopyright("Copyright © 2015-2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: ComVisible(false)] \ No newline at end of file
diff --git a/libs/tdlib/td/example/uwp/app/Properties/Default.rd.xml b/libs/tdlib/td/example/uwp/app/Properties/Default.rd.xml
new file mode 100644
index 0000000000..479eb7669d
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/Properties/Default.rd.xml
@@ -0,0 +1,31 @@
+<!--
+ This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
+ developers. However, you can modify these parameters to modify the behavior of the .NET Native
+ optimizer.
+
+ Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
+
+ To fully enable reflection for App1.MyClass and all of its public/private members
+ <Type Name="App1.MyClass" Dynamic="Required All"/>
+
+ To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
+ <TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
+
+ Using the Namespace directive to apply reflection policy to all the types in a particular namespace
+ <Namespace Name="DataClasses.ViewModels" Seralize="All" />
+-->
+
+<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
+ <Application>
+ <!--
+ An Assembly element with Name="*Application*" applies to all assemblies in
+ the application package. The asterisks are not wildcards.
+ -->
+ <Assembly Name="*Application*" Dynamic="Required All" />
+
+
+ <!-- Add your application specific runtime directives here. -->
+
+
+ </Application>
+</Directives> \ No newline at end of file
diff --git a/libs/tdlib/td/example/uwp/app/TdApp.csproj b/libs/tdlib/td/example/uwp/app/TdApp.csproj
new file mode 100644
index 0000000000..b3d1d944d1
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/TdApp.csproj
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProjectGuid>{0B971A4C-EC00-4FED-BCC2-FCD03B78D644}</ProjectGuid>
+ <OutputType>AppContainerExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>TdApp</RootNamespace>
+ <AssemblyName>TdApp</AssemblyName>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
+ <TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
+ <TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
+ <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
+ <FileAlignment>512</FileAlignment>
+ <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+ <PackageCertificateKeyFile>TdApp_TemporaryKey.pfx</PackageCertificateKeyFile>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x86\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <OutputPath>bin\x86\Release\</OutputPath>
+ <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <Optimize>true</Optimize>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x86</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\ARM\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>full</DebugType>
+ <PlatformTarget>ARM</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
+ <OutputPath>bin\ARM\Release\</OutputPath>
+ <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <Optimize>true</Optimize>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>ARM</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>bin\x64\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>full</DebugType>
+ <PlatformTarget>x64</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+ <OutputPath>bin\x64\Release\</OutputPath>
+ <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
+ <Optimize>true</Optimize>
+ <NoWarn>;2008</NoWarn>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>x64</PlatformTarget>
+ <UseVSHostingProcess>false</UseVSHostingProcess>
+ <ErrorReport>prompt</ErrorReport>
+ <Prefer32Bit>true</Prefer32Bit>
+ <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
+ </PropertyGroup>
+ <ItemGroup>
+ <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
+ <Content Include="ApplicationInsights.config">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <None Include="project.json" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="App.xaml.cs">
+ <DependentUpon>App.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="MainPage.xaml.cs">
+ <DependentUpon>MainPage.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <AppxManifest Include="Package.appxmanifest">
+ <SubType>Designer</SubType>
+ </AppxManifest>
+ <None Include="TdApp_TemporaryKey.pfx" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Properties\Default.rd.xml" />
+ <Content Include="Assets\LockScreenLogo.scale-200.png" />
+ <Content Include="Assets\SplashScreen.scale-200.png" />
+ <Content Include="Assets\Square150x150Logo.scale-200.png" />
+ <Content Include="Assets\Square44x44Logo.scale-200.png" />
+ <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
+ <Content Include="Assets\StoreLogo.png" />
+ <Content Include="Assets\Wide310x150Logo.scale-200.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </ApplicationDefinition>
+ <Page Include="MainPage.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <SDKReference Include="Microsoft.VCLibs, Version=14.0">
+ <Name>Visual C++ 2015 Runtime for Universal Windows Platform Apps</Name>
+ </SDKReference>
+ <SDKReference Include="Telegram.Td.UWP, Version=1.0">
+ <Name>TDLib for Universal Windows Platform</Name>
+ </SDKReference>
+ </ItemGroup>
+ <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
+ <VisualStudioVersion>14.0</VisualStudioVersion>
+ </PropertyGroup>
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/libs/tdlib/td/example/uwp/app/TdApp_TemporaryKey.pfx b/libs/tdlib/td/example/uwp/app/TdApp_TemporaryKey.pfx
new file mode 100644
index 0000000000..05ffbcabbc
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/TdApp_TemporaryKey.pfx
Binary files differ
diff --git a/libs/tdlib/td/example/uwp/app/project.json b/libs/tdlib/td/example/uwp/app/project.json
new file mode 100644
index 0000000000..e3b2dba25f
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/app/project.json
@@ -0,0 +1,19 @@
+{
+ "dependencies": {
+ "Microsoft.ApplicationInsights": "1.0.0",
+ "Microsoft.ApplicationInsights.PersistenceChannel": "1.0.0",
+ "Microsoft.ApplicationInsights.WindowsApps": "1.0.0",
+ "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
+ },
+ "frameworks": {
+ "uap10.0": {}
+ },
+ "runtimes": {
+ "win10-arm": {},
+ "win10-arm-aot": {},
+ "win10-x86": {},
+ "win10-x86-aot": {},
+ "win10-x64": {},
+ "win10-x64-aot": {}
+ }
+} \ No newline at end of file
diff --git a/libs/tdlib/td/example/uwp/build.ps1 b/libs/tdlib/td/example/uwp/build.ps1
new file mode 100644
index 0000000000..71156b0a2d
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/build.ps1
@@ -0,0 +1,142 @@
+param (
+ [string]$vcpkg_root = $(throw "-vcpkg_root=<path to vcpkg> is required"),
+ [string]$arch = "",
+ [string]$mode = "all",
+ [string]$compress = "7z"
+)
+$ErrorActionPreference = "Stop"
+
+$vcpkg_root = Resolve-Path $vcpkg_root
+
+$vcpkg_cmake="${vcpkg_root}\scripts\buildsystems\vcpkg.cmake"
+$arch_list = @( "x86", "x64", "arm" )
+if ($arch) {
+ $arch_list = @(, $arch)
+}
+
+$td_root = Resolve-Path "../.."
+
+function CheckLastExitCode {
+ if ($LastExitCode -ne 0) {
+ $msg = @"
+EXE RETURNED EXIT CODE $LastExitCode
+CALLSTACK:$(Get-PSCallStack | Out-String)
+"@
+ throw $msg
+ }
+}
+
+function clean {
+ Remove-Item build-* -Force -Recurse -ErrorAction SilentlyContinue
+}
+
+function prepare {
+ New-Item -ItemType Directory -Force -Path build-native
+
+ cd build-native
+
+ cmake $td_root -DCMAKE_TOOLCHAIN_FILE="$vcpkg_cmake" -DTD_ENABLE_DOTNET=1
+ CheckLastExitCode
+ cmake --build . --target prepare_cross_compiling
+ CheckLastExitCode
+
+ cd ..
+}
+
+function config {
+ New-Item -ItemType Directory -Force -Path build-uwp
+ cd build-uwp
+
+ ForEach($arch in $arch_list) {
+ echo "Config Arch = [$arch]"
+ New-Item -ItemType Directory -Force -Path $arch
+ cd $arch
+ echo "${td_root}"
+ $fixed_arch = $arch
+ if ($arch -eq "x86") {
+ $fixed_arch = "win32"
+ }
+ cmake "$td_root" -A $fixed_arch -DCMAKE_SYSTEM_VERSION="10.0" -DCMAKE_SYSTEM_NAME="WindowsStore" -DCMAKE_TOOLCHAIN_FILE="$vcpkg_cmake" -DTD_ENABLE_DOTNET=1
+ CheckLastExitCode
+ cd ..
+ }
+ echo "done"
+ cd ..
+}
+
+function build {
+ cd build-uwp
+ ForEach($arch in $arch_list) {
+ echo "Build Arch = [$arch]"
+ cd $arch
+ cmake --build . --config Release --target tddotnet
+ cmake --build . --config Debug --target tddotnet
+ cd ..
+ }
+ cd ..
+}
+
+function export {
+ cd build-uwp
+ Remove-Item vsix -Force -Recurse -ErrorAction SilentlyContinue
+ New-Item -ItemType Directory -Force -Path vsix
+ cp ../SDKManifest.xml vsix
+ cp ../extension.vsixmanifest vsix
+ cp '../`[Content_Types`].xml' vsix
+ cp ../LICENSE_1_0.txt vsix
+
+ ForEach($arch in $arch_list) {
+ New-Item -ItemType Directory -Force -Path vsix/DesignTime/Debug/${arch}
+ New-Item -ItemType Directory -Force -Path vsix/DesignTime/Retail/${arch}
+ New-Item -ItemType Directory -Force -Path vsix/Redist/Debug/${arch}
+ New-Item -ItemType Directory -Force -Path vsix/Redist/Retail/${arch}
+ New-Item -ItemType Directory -Force -Path vsix/References/CommonConfiguration/${arch}
+
+ cp ${arch}/Debug/* -include "LIBEAY*","SSLEAY*","zlib*" vsix/Redist/Debug/${arch}/
+ cp ${arch}/Release/* -include "LIBEAY*","SSLEAY*","zlib*" vsix/Redist/Retail/${arch}/
+
+ cp ${arch}/Debug/* -filter "Telegram.Td.*" -include "*.lib" vsix/DesignTime/Debug/${arch}/
+ cp ${arch}/Release/* -filter "Telegram.Td.*" -include "*.lib" vsix/DesignTime/Retail/${arch}/
+
+ cp ${arch}/Debug/* -filter "Telegram.Td.*" -include "*.pdb","*.dll" vsix/Redist/Debug/${arch}/
+ cp ${arch}/Release/* -filter "Telegram.Td.*" -include "*.pdb","*.dll" vsix/Redist/Retail/${arch}/
+
+ cp ${arch}/Release/* -filter "Telegram.Td.*" -include "*.pri","*.winmd","*.xml" vsix/References/CommonConfiguration/${arch}/
+ }
+
+ cd vsix
+
+ if ($compress -eq "zip") {
+ zip -r tdlib.vsix *
+ } elseif ($compress -eq "winrar") {
+ WinRAR.exe a -afzip -r -ep1 tdlib.vsix *
+ } else {
+ 7z.exe a -tzip -r tdlib.vsix *
+ }
+ cd ..
+}
+
+function run {
+ Push-Location
+ Try {
+ if ($mode -eq "clean") {
+ clean
+ }
+ if (($mode -eq "prepare") -or ($mode -eq "all")) {
+ prepare
+ }
+ if (($mode -eq "config") -or ( $mode -eq "all")) {
+ config
+ }
+ if (($mode -eq "build") -or ($mode -eq "all")) {
+ build
+ }
+ if (($mode -eq "export") -or ($mode -eq "all")) {
+ export
+ }
+ } Finally {
+ Pop-Location
+ }
+}
+
+run
diff --git a/libs/tdlib/td/example/uwp/extension.vsixmanifest b/libs/tdlib/td/example/uwp/extension.vsixmanifest
new file mode 100644
index 0000000000..cfcfdb57af
--- /dev/null
+++ b/libs/tdlib/td/example/uwp/extension.vsixmanifest
@@ -0,0 +1,17 @@
+<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
+ <Metadata>
+ <Identity Id="Telegram.Td.UWP" Version="1.2.0" Language="en-US" Publisher="Telegram LLC" />
+ <DisplayName>TDLib for Universal Windows Platform</DisplayName>
+ <Description>TDLib is a library for building Telegram clients</Description>
+ <MoreInfo>https://core.telegram.org/tdlib</MoreInfo>
+ <Tags>Telegram, TDLib, library, client, API</Tags>
+ <License>LICENSE_1_0.txt</License>
+ <ReleaseNotes>https://github.com/tdlib/td/blob/master/CHANGELOG.md</ReleaseNotes>
+ </Metadata>
+ <Installation Scope="Global">
+ <InstallationTarget Id="Microsoft.ExtensionSDK" TargetPlatformIdentifier="UAP" TargetPlatformVersion="v0.8.0.0" SdkName="Telegram.Td.UWP" SdkVersion="1.0" />
+ </Installation>
+ <Assets>
+ <Asset Type="Microsoft.ExtensionSDK" Path="SDKManifest.xml" />
+ </Assets>
+</PackageManifest>