public async Task <CloudEventStreamSegment> GetStreamSegmentedAsync(CloudEventStreamSequence next, int takeCount = 1000, CancellationToken cancellationToken = default(CancellationToken)) { var results1 = await _tableClient.GetStreamSegmentedAsync(next, takeCount, cancellationToken); var results2 = await _blobClient.FetchAsync(results1.Results); var results3 = new List <CloudEvent>(); byte[] scratch = null; foreach (var item in results2) { var e = new CloudEvent(); e.Id = new CloudEventLogPosition(item.Log, item.Position).Value; e.ReadFrom(item.Data.GetStream(), ref scratch); results3.Add(e); } CloudEventStreamSequence next2 = next; if (0 < results3.Count) { next2 = new CloudEventStreamSequence(next.StreamId, results3[results3.Count - 1].SequenceNumber + 1); } return(new CloudEventStreamSegment(results3, next2)); }
public async Task <CloudEventLogPositionLengthSegment> GetStreamSegmentedAsync(CloudEventStreamSequence next, int takeCount, CancellationToken cancellationToken) { var table = await _table; // min/max var streamId32 = next.StreamId.ToByteArray().Encode32(); var min = CloudEventTransaction.RowKeyStreamPrefix + streamId32 + "-" + ((long)next.SequenceNumber).ToFixed(10); var max = CloudEventTransaction.RowKeyStreamPrefix + streamId32 + "-" + ((long)(next.SequenceNumber + takeCount)).ToFixed(10); var q = new TableQuery <CloudEventStreamEntity> { FilterString = TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, CloudEventTransaction.PartitionKey), TableOperators.And, TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, min), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThan, max) ) ), TakeCount = takeCount }; var querySegment = await table.ExecuteQuerySegmentedAsync(q, null); var results2 = new List <CloudEventLogPositionLength>(); foreach (var item in querySegment.Results) { results2.Add(new CloudEventLogPositionLength(item.Log, item.Position, item.Length)); } return(new CloudEventLogPositionLengthSegment(results2, querySegment.ContinuationToken)); }
public CloudEventStreamSegment(List <CloudEvent> results, CloudEventStreamSequence next) { this.Results = results; this.Next = next; }