protected void ReadChanges(Stream stream, CloudChangeResult result) { try { using (var reader = new StreamReader(stream, Encoding.UTF8)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); if (line.StartsWith("{\"end\"")) { result.AddResults(new List <CloudNode>(), false); return; } var data = Deserialize <CloudChangesResultData>(line); if (data.HasError) { result.SetError(data.StatusCode, data.Error, data.ErrorDescription); return; } result.AddResults(data.Nodes, true); } } } catch (Exception ex) { result.SetError(ex); } }
public async Task <CloudChangeResult> GetChanges(CloudChangesRequest parameters = null) { const string path = "changes"; try { var url = CreateMetaUrl(path); var postData = parameters == null || parameters.IsEmpty() ? "" : this.SerializeObject(parameters); var message = await PostMessage(url, new StringContent(postData, Encoding.UTF8, "text/json")); var stream = await message.Content.ReadAsStreamAsync(); var gZip = new GZipStream(stream, CompressionMode.Decompress); var result = new CloudChangeResult { HasMore = true, }; Task.Run(() => ReadChanges(gZip, result)); return(result); } catch (Exception ex) { return(new CloudChangeResult { Error = ex.ToString(), ErrorDescription = ex.Message.ToString(), }); } }