diff --git a/README.md b/README.md
index b8e8b11..8cdba23 100644
--- a/README.md
+++ b/README.md
@@ -160,6 +160,7 @@ For your convenience TLSharp have wrappers for several Telegram API methods. You
1. SendUploadedDocument
1. GetFile
1. UploadFile
+1. SendPingAsync
**What if you can't find needed method at the list?**
diff --git a/TLSharp.Core/Network/MtProtoSender.cs b/TLSharp.Core/Network/MtProtoSender.cs
index 9cb7061..352e527 100644
--- a/TLSharp.Core/Network/MtProtoSender.cs
+++ b/TLSharp.Core/Network/MtProtoSender.cs
@@ -148,6 +148,19 @@ namespace TLSharp.Core.Network
return null;
}
+ public async Task SendPingAsync()
+ {
+ var pingRequest = new PingRequest();
+ using (var memory = new MemoryStream())
+ using (var writer = new BinaryWriter(memory))
+ {
+ pingRequest.SerializeBody(writer);
+ await Send(memory.ToArray(), pingRequest);
+ }
+
+ await Receive(pingRequest);
+ }
+
private bool processMessage(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
{
// TODO: check salt
@@ -169,7 +182,7 @@ namespace TLSharp.Core.Network
return HandlePing(messageId, sequence, messageReader);
case 0x347773c5: // pong
//logger.debug("MSG pong");
- return HandlePong(messageId, sequence, messageReader);
+ return HandlePong(messageId, sequence, messageReader, request);
case 0xae500895: // future_salts
//logger.debug("MSG future_salts");
return HandleFutureSalts(messageId, sequence, messageReader);
@@ -455,8 +468,16 @@ namespace TLSharp.Core.Network
return true;
}
- private bool HandlePong(ulong messageId, int sequence, BinaryReader messageReader)
+ private bool HandlePong(ulong messageId, int sequence, BinaryReader messageReader, TeleSharp.TL.TLMethod request)
{
+ uint code = messageReader.ReadUInt32();
+ ulong msgId = messageReader.ReadUInt64();
+
+ if (msgId == (ulong)request.MessageId)
+ {
+ request.ConfirmReceived = true;
+ }
+
return false;
}
diff --git a/TLSharp.Core/Requests/PingRequest.cs b/TLSharp.Core/Requests/PingRequest.cs
new file mode 100644
index 0000000..48aa61b
--- /dev/null
+++ b/TLSharp.Core/Requests/PingRequest.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using TeleSharp.TL;
+using TLSharp.Core.Utils;
+
+namespace TLSharp.Core.Requests
+{
+ public class PingRequest : TeleSharp.TL.TLMethod
+ {
+ public PingRequest()
+ {
+ }
+
+ public override void SerializeBody(BinaryWriter writer)
+ {
+ writer.Write(Constructor);
+ writer.Write(Helpers.GenerateRandomLong());
+ }
+
+ public override void DeserializeBody(BinaryReader reader)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void deserializeResponse(BinaryReader stream)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override int Constructor
+ {
+ get
+ {
+ return 0x7abe77ec;
+ }
+ }
+ }
+}
diff --git a/TLSharp.Core/TLSharp.Core.csproj b/TLSharp.Core/TLSharp.Core.csproj
index 0b8ac8d..fbef942 100644
--- a/TLSharp.Core/TLSharp.Core.csproj
+++ b/TLSharp.Core/TLSharp.Core.csproj
@@ -63,6 +63,7 @@
+
diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs
index 49a78ae..ea4dd8c 100644
--- a/TLSharp.Core/TelegramClient.cs
+++ b/TLSharp.Core/TelegramClient.cs
@@ -174,7 +174,7 @@ namespace TLSharp.Core
{
await _sender.Send(methodToExecute);
await _sender.Receive(methodToExecute);
-
+
var result = methodToExecute.GetType().GetProperty("Response").GetValue(methodToExecute);
return (T)result;
@@ -292,6 +292,11 @@ namespace TLSharp.Core
return result;
}
+ public async Task SendPingAsync()
+ {
+ await _sender.SendPingAsync();
+ }
+
private void OnUserAuthenticated(TLUser TLUser)
{
_session.TLUser = TLUser;