コード例 #1
0
        public bool MoveNext()
        {
            if (!headerFound)
            {
                this.headerReader.Find(this.stream, out this.headerFound, out this.summaryOffset);

                this.kind = this.stream.ReadVarInt();
                this.tick = this.stream.ReadVarInt();
                this.size = this.stream.ReadVarInt();
                this.msg  = this.stream.ReadVarInt();

                var header = DemTypes.FromValue(msg).Descriptor.Parser.ParseDelimitedFrom(this.stream);
                header.MergeDelimitedFrom(this.stream);

                this.Current = header;
                return(this.Current != null);
            }

            this.kind = this.stream.ReadVarInt();
            this.tick = this.stream.ReadVarInt();
            this.size = this.stream.ReadVarInt();

            var buffer = new byte[size];

            this.stream.Read(buffer, 0, buffer.Length);

            var summaryComplete = this.stream.Position >= (long)this.summaryOffset;

            this.Current = !summaryComplete?GetMessage(buffer) : null;

            return(!summaryComplete);
        }
コード例 #2
0
        private IMessage GetMessage(byte[] buffer)
        {
            if (this.IsCompressed)
            {
                this.ResetCompression();

                buffer = SnappyCodec.Uncompress(buffer);

                var message = DemTypes.FromValue(kind).Descriptor.Parser.ParseFrom(buffer);

                message.MergeFrom(buffer);

                return(message);
            }
            else
            {
                var message = DemTypes.FromValue(kind).Descriptor.Parser.ParseFrom(buffer);

                return(message);
            }
        }