【发布时间】:2016-08-24 12:35:34
【问题描述】:
我正在尝试利用 C# 的 API 层 54 为 Telegram 编写一个简单的客户端。
我在这里遵循计划:https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/scheme.tl
我是从 Sochix 之前的工作开始的:https://github.com/sochix/TLSharp,但是这个实现是指 API 第 23 层,基本上几乎所有对象的解析都是不同的。
现在,由于没有关于第 54 层的文档(或者至少我在网上找不到任何东西),而且主站点上的文档不太好,我有几个问题:
1- 使用我通过“invokeWithLayer”请求指定的 InitConnection 方法,我将使用第 54 层。鉴于此,我希望以下所有答案都返回尊重第 54 层方案中指定的代码的对象,但有时会发生Telegram 服务器用旧 API 层的对象代码回答我,有人知道为什么会发生这种情况吗?
2-关于诸如用户/消息等标记的对象...,我找到了这个旧答案Handling "flags" types in telegram's TL schema language,但是是否有关于如何解码和编码此类对象的官方文档?此外,按照查尔斯提出的答案,不应该是 BAND(flags,1^2) == flags == true 来检查是否已发送标记字段?
3- 在开发这样的库期间,我必须进行大量测试以了解我的代码是否正常工作,如何避免“请求过多”错误?我尝试重用 TLSharp 创建的 session.dat,但似乎不起作用。
非常感谢
【问题讨论】:
-
响应的哪些部分在旧 API 层中?
-
嗨,查尔斯,很高兴见到你! :-) 我在公式上粘贴了错误(显然是 2^N 而不是 1^2 ),我的意思是检查是否应该是 BAND(flags,2^N) === flags 而不是 BAND(flags ,2^N) === 真。 sentCode 对象和 auth.Authroization 对象来自旧层,这似乎也是随机发生的......
-
好吧,sentCode 和 auth.Authorization 肯定是不同的: auth.sentCode#2215bcbd 用于第 2 层 auth.sentCode#5e002502 第 54 层 如前所述,有时它会使用第 2 层代码回复我,而其他时候使用层54 码...可能是 dc?
-
@3 为什么会出现“请求过多”错误?
-
您的问题的第 2 点)在标志上...