public IEnumerator <BlittableJsonReaderObject> SetResult(StreamResult response) { if (response == null) { throw new InvalidOperationException("The index does not exists, failed to stream results"); } var state = new JsonParserState(); JsonOperationContext.ManagedPinnedBuffer buffer; using (response.Response) using (response.Stream) using (var parser = new UnmanagedJsonParser(_session.Context, state, "stream contents")) using (_session.Context.GetManagedBuffer(out buffer)) using (var peepingTomStream = new PeepingTomStream(response.Stream, _session.Context)) { if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.StartObject) { UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); } if (_isQueryStream) { HandleStreamQueryStats(_session.Context, response, parser, state, buffer, _statistics); } var property = UnmanagedJsonParserHelper.ReadString(_session.Context, peepingTomStream, parser, state, buffer); if (string.Equals(property, "Results") == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); } foreach (var result in UnmanagedJsonParserHelper.ReadArrayToMemory(_session.Context, peepingTomStream, parser, state, buffer)) { yield return(result); } if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.EndObject) { UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); } } }
public override void SetResponseRaw(HttpResponseMessage response, Stream stream, JsonOperationContext context) { var state = new JsonParserState(); using (var parser = new UnmanagedJsonParser(context, state, "multi_get/response")) using (context.GetMemoryBuffer(out var buffer)) using (var peepingTomStream = new PeepingTomStream(stream, context)) using (_cached) { if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { ThrowInvalidJsonResponse(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.StartObject) { ThrowInvalidJsonResponse(peepingTomStream); } var property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (property != nameof(BlittableArrayResult.Results)) { ThrowInvalidJsonResponse(peepingTomStream); } var i = 0; Result = new List <GetResponse>(_commands.Count); foreach (var getResponse in ReadResponses(context, peepingTomStream, parser, state, buffer)) { var command = _commands[i]; MaybeSetCache(getResponse, command); Result.Add(_cached != null && getResponse.StatusCode == HttpStatusCode.NotModified ? new GetResponse { Result = _cached.Values[i].Cached.Clone(context), StatusCode = HttpStatusCode.NotModified } : getResponse); i++; } if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { ThrowInvalidJsonResponse(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.EndObject) { ThrowInvalidJsonResponse(peepingTomStream); } } }
public async Task InitializeAsync() { var property = UnmanagedJsonParserHelper.ReadString(_context, _peepingTomStream, _parser, _state, _buffer); if (property.StartsWith(Constants.TimeSeries.QueryFunction) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer, _token).ConfigureAwait(false) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (_state.CurrentTokenType != JsonParserToken.StartArray) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); }
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; } }
private static void HandleStreamQueryStats(JsonOperationContext context, StreamResult response, UnmanagedJsonParser parser, JsonParserState state, JsonOperationContext.MemoryBuffer buffer, StreamQueryStatistics streamQueryStatistics = null) { using (var peepingTomStream = new PeepingTomStream(response.Stream, context)) { var property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (string.Equals(property, nameof(StreamQueryStatistics.ResultEtag)) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); var resultEtag = UnmanagedJsonParserHelper.ReadLong(context, peepingTomStream, parser, state, buffer); property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (string.Equals(property, nameof(StreamQueryStatistics.IsStale)) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); if (state.CurrentTokenType != JsonParserToken.False && state.CurrentTokenType != JsonParserToken.True) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); var isStale = state.CurrentTokenType != JsonParserToken.False; property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (string.Equals(property, nameof(StreamQueryStatistics.IndexName)) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); var indexName = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (string.Equals(property, nameof(StreamQueryStatistics.TotalResults)) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); var totalResults = (int)UnmanagedJsonParserHelper.ReadLong(context, peepingTomStream, parser, state, buffer); property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (string.Equals(property, nameof(StreamQueryStatistics.IndexTimestamp)) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); var indexTimestamp = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (streamQueryStatistics == null) return; streamQueryStatistics.IndexName = indexName; streamQueryStatistics.IsStale = isStale; streamQueryStatistics.TotalResults = totalResults; streamQueryStatistics.ResultEtag = resultEtag; if (DateTime.TryParseExact(indexTimestamp, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out DateTime timeStamp) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(peepingTomStream); streamQueryStatistics.IndexTimestamp = timeStamp; } }
public override void SetResponseRaw(HttpResponseMessage response, Stream stream, JsonOperationContext context) { var state = new JsonParserState(); using (var parser = new UnmanagedJsonParser(context, state, "multi_get/response")) using (context.GetManagedBuffer(out JsonOperationContext.ManagedPinnedBuffer buffer)) using (var peepingTomStream = new PeepingTomStream(stream, context)) { if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { ThrowInvalidJsonResponse(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.StartObject) { ThrowInvalidJsonResponse(peepingTomStream); } var property = UnmanagedJsonParserHelper.ReadString(context, peepingTomStream, parser, state, buffer); if (property != nameof(BlittableArrayResult.Results)) { ThrowInvalidJsonResponse(peepingTomStream); } var i = 0; Result = new List <GetResponse>(); foreach (var getResponse in ReadResponses(context, peepingTomStream, parser, state, buffer)) { var command = _commands[i]; MaybeSetCache(getResponse, command); MaybeReadFromCache(getResponse, command, context); Result.Add(getResponse); i++; } if (UnmanagedJsonParserHelper.Read(peepingTomStream, parser, state, buffer) == false) { ThrowInvalidJsonResponse(peepingTomStream); } if (state.CurrentTokenType != JsonParserToken.EndObject) { ThrowInvalidJsonResponse(peepingTomStream); } } }
public async Task InitializeAsync() { AssertNotSync(); try { _initialized = true; _state = new JsonParserState(); _parser = new UnmanagedJsonParser(_session.Context, _state, "stream contents"); _builder = new BlittableJsonDocumentBuilder(_builderContext, BlittableJsonDocumentBuilder.UsageMode.ToDisk, "readArray/singleResult", _parser, _state); _returnBuffer = _session.Context.GetMemoryBuffer(out _buffer); if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer, _token).ConfigureAwait(false) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (_state.CurrentTokenType != JsonParserToken.StartObject) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (_isQueryStream) HandleStreamQueryStats(_builderContext, _response, _parser, _state, _buffer, _streamQueryStatistics); var property = UnmanagedJsonParserHelper.ReadString(_builderContext, _peepingTomStream, _parser, _state, _buffer); if (string.Equals(property, "Results") == false) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (await UnmanagedJsonParserHelper.ReadAsync(_peepingTomStream, _parser, _state, _buffer, _token).ConfigureAwait(false) == false) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); if (_state.CurrentTokenType != JsonParserToken.StartArray) UnmanagedJsonParserHelper.ThrowInvalidJson(_peepingTomStream); } catch { await DisposeAsync().ConfigureAwait(false); throw; } }