Beispiel #1
0
        public override int Read(byte[] buffer, int offset, int count)
        {
            _pipe.RaiseOnRead(count);

            var remainingCount = count;

            while (remainingCount > 0)
            {
                if (_currentData == null)
                {
                    _currentData    = _pipe.ReceiveSync();
                    _currentDataPos = 0;

                    if (_currentData == null)
                    {
                        break;   // No more bytes will be available. Finished.
                    }
                }

                var remainingBufferSize = _currentData.WrittenLength - _currentDataPos;
                var readCount           = remainingCount > remainingBufferSize ? remainingBufferSize : remainingCount;

                _currentData.Read(_currentDataPos, buffer, offset, readCount);
                _currentDataPos += readCount;

                if (_currentData.WrittenLength == _currentDataPos)
                {
                    _currentData    = null;
                    _currentDataPos = 0;
                }

                offset         += readCount;
                remainingCount -= readCount;
            }

            var bytesRead = count - remainingCount;

            _position += bytesRead;

            return(bytesRead);
        }