将TL语言(mtproto)类型转换为C#

时间:2016-05-25 10:20:35

标签: c# telegram mtproto

我正在使用tl语言编译器来编译C#中https://core.telegram.org/mtproto中描述的Telegram Api TL语言的模式

有一个编译器可以将tl语言编译为C#类https://github.com/everbytes/SharpTL.Compiler

但它可以在这一行编译新的电报架构:

"params":[
    {"name":"flags","type":"#"},
    {"name":"report_spam","type":"flags.0?true"}]
,"type":"PeerSettings"}

并将其编译为错误的代码:

[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
    [TLProperty(1)]
    public I# Flags { get; set; }

    [TLProperty(2)]
    public IFlags0?true ReportSpam { get; set; }

}

C#代码中是否有任何解决方案?

我不知道这是什么类型"标志:#"在C#

此类型"#"在https://core.telegram.org/mtproto/TL-formal

中描述
user {flags:#} id:flags.0?string first_name:flags.1?string last_name:flags.2?string reserved3:flags.3?False reserved4:flags.4?False = User flags;

将来,在更改reserved3和reserved4字段的名称和类型后,flags字段中的第3位和第4位可用于传输新字段

2 个答案:

答案 0 :(得分:0)

根据TLGenerator

,这意味着int

答案 1 :(得分:0)

peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings  

深入搜索这个我认为这个哈希(#)意味着变量的动态值,在某些情况下它可以是真或假,另一种情况它可以是一个非负的整数序列:

matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;

以上我们得到M和N取整数随机值> 0

get_users req_fields:# ids:%(Vector int) = Vector %(User req_fields)

在另一种情况下,它可以假设条件值
req_fields变量仅转换为User对象,但在其他情况下,它可以转换为 到另一种对象。

c#中这个TLObject的正确方法可能是:

[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
    [TLProperty(1)]
    public int Flags { get; set; }

    [TLProperty(2)]
    public bool ReportSpam { get; set; }

}

道歉我的英语生锈了