コード例 #1
0
        public void ReadBytes(int length, IntrusiveByteArrayWriter writer)
        {
            if (length > 0)
            {
                writer.EnsureCapacity(length);

                var bytesRead = stream.Read(writer.Buffer, writer.Length, length);
                if (bytesRead == -1) throw new IOException("Could not read bytes from the stream");

                while (bytesRead < length)
                {
                    var t = stream.Read(writer.Buffer, writer.Length + bytesRead, length - bytesRead);
                    if (bytesRead == -1) throw new IOException("Could not read bytes from the stream");
                    bytesRead += t;
                }

                // TODO: *puke*
                writer.Length += bytesRead;
            }
        }
コード例 #2
0
 internal InputStreamBytes(IntrusiveByteArrayWriter writer)
 {
     this.Bytes = writer.Buffer;
     this.Length = writer.Length;
 }
コード例 #3
0
        public IResponseState Parse(Header header, IEndianAwareReader reader)
        {
            // How many bytes will we read from the stream?
            var numBytes = reader.ReadInt32();

            // Fill the byte array with bytes left from the previous read.
            // This is neccessary when reading chunks of data
            var writer = new IntrusiveByteArrayWriter();
            writer.Insert(previousState.BytesLeft);

            // Read the bytes into the intrusive byte array
            reader.ReadBytes(numBytes, writer);

            if (writer.Length > 0)
            {
                if (header.IsMultipart)
                    return ReadJournal(new InputStreamBytes(writer), false);
                else
                    return ReadJournal(new InputStreamBytes(writer), true);
            }
            else
                return new ReadJournalResponseState(0, new List<Event>(), true, new byte[0]);
        }