-
Notifications
You must be signed in to change notification settings - Fork 0
/
TLObject.cs
50 lines (47 loc) · 1.34 KB
/
TLObject.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TLSchema;
namespace TLSchema
{
public class TLObjectAttribute : Attribute
{
public int Constructor { get; private set; }
public TLObjectAttribute(int Constructor)
{
this.Constructor = Constructor;
}
}
public abstract class TLObject
{
public abstract int Constructor { get; }
public abstract void SerializeBody(BinaryWriter bw);
public abstract void DeserializeBody(BinaryReader br);
public byte[] Serialize()
{
using (MemoryStream m = new MemoryStream())
using (BinaryWriter bw = new BinaryWriter(m))
{
Serialize(bw);
bw.Close();
m.Close();
return m.ToArray();
}
}
public void Serialize(BinaryWriter writer)
{
writer.Write(Constructor);
SerializeBody(writer);
}
public void Deserialize(BinaryReader reader)
{
int constructorId = reader.ReadInt32();
if (constructorId != Constructor)
throw new InvalidDataException("Constructor Invalid");
DeserializeBody(reader);
}
}
}