コード例 #1
0
        private AppendResult AppendToStreamInternal(
            string streamId,
            int expectedVersion,
            NewStreamMessage[] messages)
        {
            InMemoryStream inMemoryStream;

            if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any)
            {
                if (_streams.TryGetValue(streamId, out inMemoryStream))
                {
                    inMemoryStream.AppendToStream(expectedVersion, messages);
                }
                else
                {
                    inMemoryStream = new InMemoryStream(
                        streamId,
                        _allStream,
                        _getUtcNow,
                        _onStreamAppended,
                        () => _currentPosition++);
                    inMemoryStream.AppendToStream(expectedVersion, messages);
                    _streams.Add(streamId, inMemoryStream);
                }
                return(new AppendResult(inMemoryStream.CurrentVersion));
            }

            if (!_streams.TryGetValue(streamId, out inMemoryStream))
            {
                throw new WrongExpectedVersionException(
                          ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion));
            }
            inMemoryStream.AppendToStream(expectedVersion, messages);
            return(new AppendResult(inMemoryStream.CurrentVersion));
        }
コード例 #2
0
        private void DeleteStream(string streamId, int expectedVersion)
        {
            if (!_streams.ContainsKey(streamId))
            {
                if (expectedVersion >= 0)
                {
                    throw new WrongExpectedVersionException(
                              ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion));
                }
                return;
            }
            if (expectedVersion != ExpectedVersion.Any &&
                _streams[streamId].Messages.Last().StreamVersion != expectedVersion)
            {
                throw new WrongExpectedVersionException(
                          ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion));
            }
            InMemoryStream inMemoryStream = _streams[streamId];

            _streams.Remove(streamId);
            inMemoryStream.DeleteAllEvents(ExpectedVersion.Any);

            var streamDeletedEvent = CreateStreamDeletedMessage(streamId);

            AppendToStreamInternal(DeletedStreamId, ExpectedVersion.Any, new[] { streamDeletedEvent });
        }
コード例 #3
0
        protected override Task AppendToStreamInternal(
            string streamId,
            int expectedVersion,
            NewStreamEvent[] events,
            CancellationToken cancellationToken = new CancellationToken())
        {
            if (_isDisposed)
            {
                throw new ObjectDisposedException(nameof(InMemoryEventStore));
            }

            _lock.EnterWriteLock();
            try
            {
                InMemoryStream inMemoryStream;
                // Should only add stream if NoStream
                if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any)
                {
                    if (_streams.TryGetValue(streamId, out inMemoryStream))
                    {
                        inMemoryStream.AppendToStream(expectedVersion, events);
                    }
                    else
                    {
                        inMemoryStream = new InMemoryStream(
                            streamId,
                            _allStream,
                            _getUtcNow,
                            _onStreamAppended);
                        inMemoryStream.AppendToStream(expectedVersion, events);
                        _streams.TryAdd(streamId, inMemoryStream);
                    }
                    return(Task.FromResult(0));
                }

                if (!_streams.TryGetValue(streamId, out inMemoryStream))
                {
                    throw new WrongExpectedVersionException(
                              Messages.AppendFailedWrongExpectedVersion(streamId, expectedVersion));
                }
                inMemoryStream.AppendToStream(expectedVersion, events);

                return(Task.FromResult(0));
            }
            finally
            {
                _lock.ExitWriteLock();
            }
        }