Exemplo n.º 1
0
        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));
        }
Exemplo n.º 3
0
 public CloudEventStreamSegment(List <CloudEvent> results, CloudEventStreamSequence next)
 {
     this.Results = results;
     this.Next    = next;
 }