2016-09-24 15:38:26 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
|
|
namespace TeleSharp.TL
|
|
|
|
|
|
{
|
|
|
|
|
|
public class TLObjectAttribute : Attribute
|
|
|
|
|
|
{
|
|
|
|
|
|
public TLObjectAttribute(int Constructor)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.Constructor = Constructor;
|
|
|
|
|
|
}
|
2017-04-13 08:38:01 +02:00
|
|
|
|
|
|
|
|
|
|
public int Constructor { get; }
|
2016-09-24 15:38:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public abstract class TLObject
|
|
|
|
|
|
{
|
|
|
|
|
|
public abstract int Constructor { get; }
|
|
|
|
|
|
public abstract void SerializeBody(BinaryWriter bw);
|
|
|
|
|
|
public abstract void DeserializeBody(BinaryReader br);
|
2017-04-13 08:38:01 +02:00
|
|
|
|
|
2016-09-24 15:38:26 +02:00
|
|
|
|
public byte[] Serialize()
|
|
|
|
|
|
{
|
2017-04-13 08:38:01 +02:00
|
|
|
|
using (var m = new MemoryStream())
|
|
|
|
|
|
using (var bw = new BinaryWriter(m))
|
2016-09-24 15:38:26 +02:00
|
|
|
|
{
|
|
|
|
|
|
Serialize(bw);
|
|
|
|
|
|
bw.Close();
|
|
|
|
|
|
m.Close();
|
|
|
|
|
|
return m.GetBuffer();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-04-13 08:38:01 +02:00
|
|
|
|
|
2016-09-24 15:38:26 +02:00
|
|
|
|
public void Serialize(BinaryWriter writer)
|
|
|
|
|
|
{
|
|
|
|
|
|
writer.Write(Constructor);
|
|
|
|
|
|
SerializeBody(writer);
|
|
|
|
|
|
}
|
2017-04-13 08:38:01 +02:00
|
|
|
|
|
2016-09-24 15:38:26 +02:00
|
|
|
|
public void Deserialize(BinaryReader reader)
|
|
|
|
|
|
{
|
2017-04-13 08:38:01 +02:00
|
|
|
|
var constructorId = reader.ReadInt32();
|
2016-09-24 15:38:26 +02:00
|
|
|
|
if (constructorId != Constructor)
|
|
|
|
|
|
throw new InvalidDataException("Constructor Invalid");
|
|
|
|
|
|
DeserializeBody(reader);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-04-13 08:38:01 +02:00
|
|
|
|
}
|