public async Task CommitStreamReaderPositionAsync( string streamName, EventStreamReaderId readerId, StreamVersion readerVersion) { Require.NotEmpty(streamName, "streamName"); Require.NotNull(readerId, "readerId"); var properties = await m_table.ReadStreamReaderPropertiesAsync(streamName, readerId); if (properties == null) { await m_table.InserStreamReaderPropertiesAsync( streamName, readerId, readerVersion); } else { var readerVersionValue = (int)readerVersion; var savedVersionValue = (int)properties[EventJournalTableRowPropertyNames.Version]; var etag = (string)properties[KnownProperties.ETag]; Ensure.True(savedVersionValue <= readerVersionValue, "Saved reader stream version is greater then passed value."); if (readerVersionValue != savedVersionValue) { await m_table.UpdateStreamReaderPropertiesAsync(streamName, readerId, readerVersion, etag); } } }
public async Task <IEnumerable <StreamReaderDescription> > GetStreamReadersDescriptionsAsync(string streamName) { Require.NotEmpty(streamName, nameof(streamName)); var streamReadersProperties = await m_table.ReadAllStreamReadersPropertiesAsync(streamName); var descriptions = streamReadersProperties.Select(streamReaderProperties => new StreamReaderDescription( streamName, EventStreamReaderId.Parse(streamReaderProperties[KnownProperties.RowKey].ToString().Split('|').Last()), StreamVersion.Create((int)streamReaderProperties[EventJournalTableRowPropertyNames.Version]))); return(descriptions); }
public async Task <IEventStreamCursor> OpenEventStreamCursorAsync(string streamName, EventStreamReaderId readerId, int sliceSize) { Require.NotEmpty(streamName, "streamName"); Require.Positive(sliceSize, "sliceSize"); var fromVersion = await ReadStreamReaderPositionAsync(streamName, readerId); var header = await ReadStreamHeaderAsync(streamName); if (header == EventStreamHeader.Unknown) { return(EventStreamCursor.UninitializedStream); } if (header.Version <= fromVersion) { return(EventStreamCursor.CreateEmptyCursor(header, fromVersion)); } return(EventStreamCursor.CreateActiveCursor( header, fromVersion.Increment(), from => m_table.FetchStreamEvents(streamName, header, from, sliceSize))); }
public async Task <StreamVersion> ReadStreamReaderPositionAsync(string streamName, EventStreamReaderId readerId) { Require.NotEmpty(streamName, "streamName"); Require.NotNull(readerId, "readerId"); var properties = await m_table.ReadStreamReaderPropertiesAsync(streamName, readerId); if (properties == null) { return(StreamVersion.Unknown); } return(StreamVersion.Create((int)properties[EventJournalTableRowPropertyNames.Version])); }