From 1c317947519e83a251f21a74754b90a5f10c8918 Mon Sep 17 00:00:00 2001 From: steavy29 Date: Tue, 13 Sep 2016 13:34:32 +0300 Subject: [PATCH] Added GetUpdatesDifference and GetUpdatesState functions implementations. --- .../Requests/GetUpdatesDifferenceRequest.cs | 43 +++++++++++++++++++ .../Requests/GetUpdatesStateRequest.cs | 29 +++++++++++++ TLSharp.Core/TLSharp.Core.csproj | 2 + TLSharp.Core/TelegramClient.cs | 21 ++++++++- TLSharp.Tests/TLSharpTests.cs | 37 ++++++++++++++++ 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 TLSharp.Core/Requests/GetUpdatesDifferenceRequest.cs create mode 100644 TLSharp.Core/Requests/GetUpdatesStateRequest.cs diff --git a/TLSharp.Core/Requests/GetUpdatesDifferenceRequest.cs b/TLSharp.Core/Requests/GetUpdatesDifferenceRequest.cs new file mode 100644 index 0000000..ac02f4b --- /dev/null +++ b/TLSharp.Core/Requests/GetUpdatesDifferenceRequest.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; +using TLSharp.Core.MTProto; + +namespace TLSharp.Core.Requests +{ + public class GetUpdatesDifferenceRequest : MTProtoRequest + { + public readonly int pts; + public readonly int date; + public readonly int qts; + + public GetUpdatesDifferenceRequest(int pts, int date, int qts) + { + this.pts = pts; + this.date = date; + this.qts = qts; + } + + public updates_Difference updatesDifference { get; private set; } + + public override void OnSend(BinaryWriter writer) + { + writer.Write(0xa041495); + writer.Write(pts); + writer.Write(date); + writer.Write(qts); + } + + public override void OnResponse(BinaryReader reader) + { + updatesDifference = TL.Parse(reader); + } + + public override void OnException(Exception exception) + { + throw new NotImplementedException(); + } + + public override bool Confirmed => true; + public override bool Responded { get; } + } +} diff --git a/TLSharp.Core/Requests/GetUpdatesStateRequest.cs b/TLSharp.Core/Requests/GetUpdatesStateRequest.cs new file mode 100644 index 0000000..48c9289 --- /dev/null +++ b/TLSharp.Core/Requests/GetUpdatesStateRequest.cs @@ -0,0 +1,29 @@ +using System; +using System.IO; +using TLSharp.Core.MTProto; + +namespace TLSharp.Core.Requests +{ + public class GetUpdatesStateRequest : MTProtoRequest + { + public updates_State updates { get; private set; } + + public override void OnSend(BinaryWriter writer) + { + writer.Write(0xedd4882a); + } + + public override void OnResponse(BinaryReader reader) + { + updates = TL.Parse(reader); + } + + public override void OnException(Exception exception) + { + throw new NotImplementedException(); + } + + public override bool Confirmed => true; + public override bool Responded { get; } + } +} \ No newline at end of file diff --git a/TLSharp.Core/TLSharp.Core.csproj b/TLSharp.Core/TLSharp.Core.csproj index 66a2d8f..1e6395d 100644 --- a/TLSharp.Core/TLSharp.Core.csproj +++ b/TLSharp.Core/TLSharp.Core.csproj @@ -69,11 +69,13 @@ + + diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index e7f2022..ad6b91a 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -278,7 +278,7 @@ namespace TLSharp.Core Messages = request.messages, Chats = request.chats, Users = request.users, - }; + }; } public async Task GetUserFull(int user_id) @@ -310,5 +310,24 @@ namespace TLSharp.Core }; } + public async Task GetUpdatesState() + { + var request = new GetUpdatesStateRequest(); + + await _sender.Send(request); + await _sender.Receive(request); + + return request.updates; + } + + public async Task GetUpdatesDifference(int lastPts, int lastDate, int lastQts) + { + var request = new GetUpdatesDifferenceRequest(lastPts, lastDate, lastQts); + + await _sender.Send(request); + await _sender.Receive(request); + + return request.updatesDifference; + } } } diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs index 5131ee7..49b9692 100644 --- a/TLSharp.Tests/TLSharpTests.cs +++ b/TLSharp.Tests/TLSharpTests.cs @@ -294,5 +294,42 @@ namespace TLSharp.Tests Assert.IsNotNull(userFull); } + + [TestMethod] + public async Task GetUpdates() + { + var store = new FileSessionStore(); + var client = new TelegramClient(store, "session", apiId, apiHash); + await client.Connect(); + + Assert.IsTrue(client.IsUserAuthorized()); + + var updatesState = await client.GetUpdatesState(); + var initialState = updatesState as Updates_stateConstructor; + + Assert.IsNotNull(initialState); + + var difference = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); + Assert.IsNotNull(difference); + Assert.AreEqual(difference.Constructor, Constructor.updates_differenceEmpty); + + var userIdToSendMessage = await client.ImportContactByPhoneNumber(NumberToSendMessage); + + await client.SendMessage(userIdToSendMessage.Value, "test"); + + var differenceAfterMessage = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); + + Assert.IsNotNull(differenceAfterMessage); + Assert.AreEqual(differenceAfterMessage.Constructor, Constructor.updates_difference); + + var differenceUpdate = differenceAfterMessage as Updates_differenceConstructor; + Assert.IsNotNull(differenceUpdate); + Assert.AreEqual(1, differenceUpdate.new_messages.Count); + + var messageUpdate = differenceUpdate.new_messages[0] as MessageConstructor; + Assert.IsNotNull(messageUpdate); + + Assert.AreEqual("test", messageUpdate.message); + } } }