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}"); } }
QueryContent GetCheckpointContent(QueryETag etag, ResolvedEvent e) { var metadata = _context.ReadCheckpointMetadata(e); if (metadata.ErrorPosition.IsSome) { throw new Exception($"Query is stopped at {metadata.ErrorPosition} with the following error: {metadata.ErrorMessage}"); } var checkpoint = new TimelinePosition(e.Event.EventNumber); return(checkpoint == etag.Checkpoint ? new QueryContent(etag) : new QueryContent(etag.WithCheckpoint(checkpoint), new MemoryStream(e.Event.Data))); }