예제 #1
0
        private bool HandleContainer(long messageId, int sequence, TBinaryReader messageReader, MTProtoRequest request)
        {
            uint code = messageReader.ReadUInt32();
            int  size = messageReader.ReadInt32();

            for (int i = 0; i < size; i++)
            {
                long innerMessageId = messageReader.ReadInt64();
                int  innerSequence  = messageReader.ReadInt32();
                int  innerLength    = messageReader.ReadInt32();
                long beginPosition  = messageReader.BaseStream.Position;
                try
                {
                    if (!processMessage(innerMessageId, sequence, messageReader, request))
                    {
                        messageReader.BaseStream.Position = beginPosition + innerLength;
                    }
                }
                catch (Exception e)
                {
                    //	logger.error("failed to process message in contailer: {0}", e);
                    messageReader.BaseStream.Position = beginPosition + innerLength;
                }
            }

            return(false);
        }
예제 #2
0
파일: Session.cs 프로젝트: DrEhsan/TeleTurk
        public static Session FromBytes(byte[] buffer, ISessionStore store, string sessionUserId)
        {
            using (var stream = new MemoryStream(buffer))
                using (var reader = new TBinaryReader(stream))
                {
                    var id            = reader.ReadUInt64();
                    var sequence      = reader.ReadInt32();
                    var salt          = reader.ReadUInt64();
                    var lastMessageId = reader.ReadInt64();
                    var timeOffset    = reader.ReadInt32();
                    var serverAddress = reader.ReadString();
                    var port          = reader.ReadInt32();

                    User user = null;
                    if (reader.ReadBoolean())
                    {
                        user = reader.Read <User>();
                    }

                    var authData = reader.ReadBytes();

                    return(new Session(store)
                    {
                        AuthKey = new AuthKey(authData),
                        Id = id,
                        Salt = salt,
                        Sequence = sequence,
                        LastMessageId = lastMessageId,
                        TimeOffset = timeOffset,
                        User = user,
                        SessionUserId = sessionUserId,
                        ServerAddress = serverAddress,
                        Port = port
                    });
                }
        }