Ejemplo n.º 1
0
        public async Task <QueryState> ReadState(QueryETag etag)
        {
            var stream = etag.Key.GetCheckpointStream();

            var result = await _context.Connection.ReadEventAsync(stream, StreamPosition.End, resolveLinkTos : false);

            switch (result.Status)
            {
            case EventReadStatus.NoStream:
            case EventReadStatus.NotFound:
                return(new QueryState(etag.WithoutCheckpoint(), GetDefaultData(etag)));

            case EventReadStatus.Success:
                var number = result.Event?.Event.EventNumber;
                var data   = result.Event?.Event.Data;

                var checkpoint = new TimelinePosition(number);

                return(checkpoint == etag.Checkpoint
            ? new QueryState(etag)
            : new QueryState(etag.WithCheckpoint(checkpoint), new MemoryStream(data)));

            default:
                throw new Exception($"Unexpected result when reading {stream}: {result.Status}");
            }
        }
Ejemplo n.º 2
0
        QueryContent GetDefaultContent(QueryETag etag)
        {
            var defaultJson = _context.Json.ToJsonUtf8(etag.Key.Type.New());

            return(new QueryContent(etag.WithoutCheckpoint(), new MemoryStream(defaultJson)));
        }