コード例 #1
0
        public IDisposable Initialize(DatabaseSmugglerOptions options, SmugglerResult result, out long buildVersion)
        {
            _result       = result;
            _returnBuffer = _context.GetManagedBuffer(out _buffer);
            _state        = new JsonParserState();
            _parser       = new UnmanagedJsonParser(_context, _state, "file");

            if (UnmanagedJsonParserHelper.Read(_peepingTomStream, _parser, _state, _buffer) == false)
            {
                UnmanagedJsonParserHelper.ThrowInvalidJson("Unexpected end of json.", _peepingTomStream, _parser);
            }

            if (_state.CurrentTokenType != JsonParserToken.StartObject)
            {
                UnmanagedJsonParserHelper.ThrowInvalidJson("Expected start object, but got " + _state.CurrentTokenType, _peepingTomStream, _parser);
            }

            buildVersion      = ReadBuildVersion();
            _buildVersionType = BuildVersion.Type(buildVersion);
            _readLegacyEtag   = options.ReadLegacyEtag;

            return(new DisposableAction(() =>
            {
                _parser.Dispose();
                _returnBuffer.Dispose();
                _returnWriteBuffer.Dispose();
            }));
        }
コード例 #2
0
 public UnmanagedStreamBuffer(JsonOperationContext context, Stream stream)
 {
     _stream       = stream;
     _sizeInBytes  = 0;
     Used          = 0;
     _returnBuffer = context.GetManagedBuffer(out _buffer);
 }
コード例 #3
0
        public AbstractBlittableJsonTextWriter(JsonOperationContext context, Stream stream)
        {
            _context = context;
            _stream  = stream;

            _returnBuffer = context.GetManagedBuffer(out _pinnedBuffer);
            _buffer       = _pinnedBuffer.Pointer;

            _parserAuxiliarMemory = context.GetMemory(32);
        }
コード例 #4
0
            public async Task InitializeAsync()
            {
                AssertNotSync();

                try
                {
                    _initialized = true;

                    _state        = new JsonParserState();
                    _parser       = new UnmanagedJsonParser(_session.Context, _state, "stream contents");
                    _returnBuffer = _session.Context.GetManagedBuffer(out _buffer);

                    if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer).ConfigureAwait(false) == false)
                    {
                        UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream);
                    }

                    if (_state.CurrentTokenType != JsonParserToken.StartObject)
                    {
                        UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream);
                    }

                    if (_isQueryStream)
                    {
                        HandleStreamQueryStats(_session.Context, _response, _parser, _state, _buffer, _streamQueryStatistics);
                    }

                    var property = UnmanagedJsonParserHelper.ReadString(_session.Context, _peepingTomStream, _parser, _state, _buffer);

                    if (string.Equals(property, "Results") == false)
                    {
                        UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream);
                    }

                    if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer).ConfigureAwait(false) == false)
                    {
                        UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream);
                    }

                    if (_state.CurrentTokenType != JsonParserToken.StartArray)
                    {
                        UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream);
                    }
                }
                catch
                {
                    Dispose();

                    throw;
                }
            }
コード例 #5
0
        public unsafe void ProcessAttachmentStream(DocumentsOperationContext context, BlittableJsonReaderObject data, ref DocumentItem.AttachmentStream attachment)
        {
            if (data.TryGet(nameof(AttachmentName.Hash), out LazyStringValue hash) == false ||
                data.TryGet(nameof(AttachmentName.Size), out long size) == false ||
                data.TryGet(nameof(DocumentItem.AttachmentStream.Tag), out LazyStringValue tag) == false)
            {
                throw new ArgumentException($"Data of attachment stream is not valid: {data}");
            }

            if (_writeBuffer == null)
            {
                _returnWriteBuffer = _context.GetManagedBuffer(out _writeBuffer);
            }

            attachment.Data = data;
            attachment.Base64HashDispose = Slice.External(context.Allocator, hash, out attachment.Base64Hash);
            attachment.TagDispose        = Slice.External(context.Allocator, tag, out attachment.Tag);

            while (size > 0)
            {
                var sizeToRead = (int)Math.Min(_writeBuffer.Length, size);
                var read       = _parser.Copy(_writeBuffer.Pointer, sizeToRead);
                attachment.Stream.Write(_writeBuffer.Buffer.Array, _writeBuffer.Buffer.Offset, read.BytesRead);
                if (read.Done == false)
                {
                    var read2 = _peepingTomStream.Read(_buffer.Buffer.Array, _buffer.Buffer.Offset, _buffer.Length);
                    if (read2 == 0)
                    {
                        throw new EndOfStreamException("Stream ended without reaching end of stream content");
                    }

                    _parser.SetBuffer(_buffer, 0, read2);
                }
                size -= read.BytesRead;
            }
            attachment.Stream.Flush();
        }
コード例 #6
0
ファイル: PeepingTomStream.cs プロジェクト: ryanheath/ravendb
 public PeepingTomStream(Stream stream, JsonOperationContext context)
 {
     _stream         = stream;
     _returnedBuffer = context.GetManagedBuffer(out _bufferWindow);
 }