예제 #1
0
        public static Session Deserialize(BinaryReader br)
        {
            var version = TgMarshal.ReadInt(br);

            if (version != Version)
            {
                throw new TgInternalException($"Invalid session file version, got {version}, expected {Version}.", None);
            }

            var apiId         = TgMarshal.ReadInt(br);
            var id            = TgMarshal.ReadLong(br);
            var sequence      = TgMarshal.ReadInt(br);
            var salt          = TgMarshal.ReadLong(br);
            var lastMessageId = TgMarshal.ReadLong(br);
            var timeOffset    = TgMarshal.ReadInt(br);

            var serverAddress = TgMarshal.ReadBytes(br).ToArrayUnsafe().Apply(bts => new IPAddress(bts));
            var port          = TgMarshal.ReadInt(br);
            var ep            = new IPEndPoint(serverAddress, port);

            var authData     = TgMarshal.ReadBytes(br);
            var isAuthorized = TgMarshal.ReadBool(br);

            return(new Session(
                       apiId: apiId,
                       id: id,
                       salt: salt,
                       sequence: sequence,
                       lastMessageId: lastMessageId,
                       timeOffset: timeOffset,
                       endpoint: ep,
                       authKey: AuthKey.Deserialize(authData),
                       isAuthorized: isAuthorized
                       ));
        }
예제 #2
0
 public void Serialize(BinaryWriter bw)
 {
     TgMarshal.WriteInt(bw, Version);
     TgMarshal.WriteInt(bw, ApiId);
     TgMarshal.WriteLong(bw, Id);
     TgMarshal.WriteInt(bw, Sequence);
     TgMarshal.WriteLong(bw, Salt);
     TgMarshal.WriteLong(bw, LastMessageId);
     TgMarshal.WriteInt(bw, TimeOffset);
     TgMarshal.WriteBytes(bw, Endpoint.Address.GetAddressBytes().ToBytesUnsafe());
     TgMarshal.WriteInt(bw, Endpoint.Port);
     TgMarshal.WriteBytes(bw, AuthKey.Key);
     TgMarshal.WriteBool(bw, IsAuthorized);
 }