private async Task <GremlinResponse <T> > ReceiveAsync <T>() { ResponseStatus status; IAggregator aggregator = null; var isAggregatingSideEffects = false; var result = new List <T>(); List <int> statusCodes = new List <int>(); List <Dictionary <string, object> > attributes = new List <Dictionary <string, object> >(); do { var received = await _webSocketConnection.ReceiveMessageAsync().ConfigureAwait(false); var receivedMsg = _messageSerializer.DeserializeMessage <ResponseMessage <JToken> >(received); status = receivedMsg.Status; status.ThrowIfStatusIndicatesError(); if (status.Code == ResponseStatusCode.Authenticate) { await AuthenticateAsync().ConfigureAwait(false); } else { statusCodes.Add((int)status.Code); attributes.Add(status.Attributes); if (status.Code != ResponseStatusCode.NoContent) { var receivedData = _graphSONReader.ToObject(receivedMsg.Result.Data); foreach (var d in receivedData) { if (receivedMsg.Result.Meta.ContainsKey(Tokens.ArgsSideEffectKey)) { if (aggregator == null) { aggregator = new AggregatorFactory().GetAggregatorFor( (string)receivedMsg.Result.Meta[Tokens.ArgsAggregateTo]); } aggregator.Add(d); isAggregatingSideEffects = true; } else { result.Add(d); } } } } } while (status.Code == ResponseStatusCode.PartialContent || status.Code == ResponseStatusCode.Authenticate); List <T> resultsToReturn = isAggregatingSideEffects ? new List <T> { (T)aggregator.GetAggregatedResult() } : result; return(new GremlinResponse <T>(resultsToReturn, attributes, statusCodes)); }
private async Task <IReadOnlyCollection <T> > ReceiveAsync <T>() { ResponseStatus status; IAggregator aggregator = null; var isAggregatingSideEffects = false; var result = new List <T>(); do { var received = await _webSocketConnection.ReceiveMessageAsync().ConfigureAwait(false); var receivedMsg = _messageSerializer.DeserializeMessage <ResponseMessage <JToken> >(received); status = receivedMsg.Status; status.ThrowIfStatusIndicatesError(); if (status.Code == ResponseStatusCode.Authenticate) { await AuthenticateAsync().ConfigureAwait(false); } else if (status.Code != ResponseStatusCode.NoContent) { var receivedData = _graphSONReader.ToObject(receivedMsg.Result.Data); foreach (var d in receivedData) { if (receivedMsg.Result.Meta.ContainsKey(Tokens.ArgsSideEffectKey)) { if (aggregator == null) { aggregator = new AggregatorFactory().GetAggregatorFor( (string)receivedMsg.Result.Meta[Tokens.ArgsAggregateTo]); } aggregator.Add(d); isAggregatingSideEffects = true; } else { result.Add(d); } } } } while (status.Code == ResponseStatusCode.PartialContent || status.Code == ResponseStatusCode.Authenticate); if (isAggregatingSideEffects) { return new List <T> { (T)aggregator.GetAggregatedResult() } } ; return(result); }
private void Parse(byte[] received) { var receivedMsg = _messageSerializer.DeserializeMessage <ResponseMessage <JToken> >(received); try { TryParseResponseMessage(receivedMsg); } catch (Exception e) { if (_callbackByRequestId.TryRemove(receivedMsg.RequestId, out var responseHandler)) { responseHandler.HandleFailure(e); } } }