Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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)));
        }
Exemple #4
0
        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]));
        }