From c6666f72bc7bbb42097968aaf6158f90f21e9351 Mon Sep 17 00:00:00 2001 From: FlorianDahn Date: Wed, 20 Mar 2019 16:57:10 +0700 Subject: [PATCH] - Improvements to system calls - system calls now async with await - added start command to example - added "handled" property to system call event args --- TelegramBaseTest/Program.cs | 12 +++++++++-- TelegramBotBase/Base/FormBase.cs | 20 ++++++++++++++++- TelegramBotBase/BotBase.cs | 25 ++++++++++------------ TelegramBotBase/Properties/AssemblyInfo.cs | 4 ++-- 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/TelegramBaseTest/Program.cs b/TelegramBaseTest/Program.cs index d2b7b63..f79b7f2 100644 --- a/TelegramBaseTest/Program.cs +++ b/TelegramBaseTest/Program.cs @@ -21,13 +21,19 @@ namespace TelegramBaseTest bb.SystemCalls.Add("/start"); bb.SystemCalls.Add("/form1"); bb.SystemCalls.Add("/form2"); - bb.SystemCalls.Add("/params"); bb.SystemCall += async (s, en) => { switch (en.Command) { + case "/start": + + var start = new Start(); + + await en.Device.ActiveForm.NavigateTo(start); + + break; case "/form1": var form1 = new TestForm(); @@ -47,8 +53,10 @@ namespace TelegramBaseTest case "/params": String m = en.Parameters.DefaultIfEmpty("").Aggregate((a, b) => a + " and " + b); + + await en.Device.Send("Your parameters are: " + m, replyTo: en.Device.LastMessageId); - await en.Device.Send("Your parameters are " + m, replyTo: en.Device.LastMessage); + en.Handled = true; break; } diff --git a/TelegramBotBase/Base/FormBase.cs b/TelegramBotBase/Base/FormBase.cs index d5c7d23..e69f443 100644 --- a/TelegramBotBase/Base/FormBase.cs +++ b/TelegramBotBase/Base/FormBase.cs @@ -44,6 +44,10 @@ namespace TelegramBotBase.Form } + /// + /// Gets invoked if gets navigated to this form + /// + /// public virtual async Task Opened() { @@ -62,17 +66,31 @@ namespace TelegramBotBase.Form } + /// + /// Gets invoked if the form gets loaded and on every message belongs to this context + /// + /// + /// public virtual async Task Load(MessageResult message) { } + /// + /// Gets invoked if the user has clicked a button. + /// + /// + /// public virtual async Task Action(MessageResult message) { } - + /// + /// Gets invoked at the end of the cycle to "Render" text, images, buttons, etc... + /// + /// + /// public virtual async Task Render(MessageResult message) { diff --git a/TelegramBotBase/BotBase.cs b/TelegramBotBase/BotBase.cs index 61030ea..2613b60 100644 --- a/TelegramBotBase/BotBase.cs +++ b/TelegramBotBase/BotBase.cs @@ -42,6 +42,8 @@ namespace TelegramBotBase private static object __evSystemCall = new object(); + public delegate Task SystemCallEventHandler(object sender, SystemCallEventArgs e); + private static object __evException = new object(); private static object __evUnhandledCall = new object(); @@ -220,7 +222,10 @@ namespace TelegramBotBase if (e.IsSystemCall && this.SystemCalls.Contains(e.SystemCommand)) { var sce = new SystemCallEventArgs(e.SystemCommand, e.SystemCallParameters, e.Message, ds.DeviceId, ds); - OnSystemCall(sce); + await OnSystemCall(sce); + + if (sce.Handled) + return; } FormBase activeForm = null; @@ -377,21 +382,13 @@ namespace TelegramBotBase /// /// Will be called if a system call gets raised /// - public event EventHandler SystemCall - { - add - { - this.__Events.AddHandler(__evSystemCall, value); - } - remove - { - this.__Events.RemoveHandler(__evSystemCall, value); - } - } + public event SystemCallEventHandler SystemCall; - public void OnSystemCall(SystemCallEventArgs e) + + public async Task OnSystemCall(SystemCallEventArgs e) { - (this.__Events[__evSystemCall] as EventHandler)?.Invoke(this, e); + if (this.SystemCall != null) + await SystemCall(this, e); } /// diff --git a/TelegramBotBase/Properties/AssemblyInfo.cs b/TelegramBotBase/Properties/AssemblyInfo.cs index 454c5df..7a5e26e 100644 --- a/TelegramBotBase/Properties/AssemblyInfo.cs +++ b/TelegramBotBase/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.3.1.0")] -[assembly: AssemblyFileVersion("1.3.1.0")] +[assembly: AssemblyVersion("1.3.1.2")] +[assembly: AssemblyFileVersion("1.3.1.2")]