Exemple #1
0
        public async Task <WriteResult> WriteStreamAsync(
            StreamName stream,
            IEventSource source,
            Guid causation,
            Guid correlation,
            Metadata metadata    = null,
            CancellationToken ct = default(CancellationToken))
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            var resolvedStream = Configuration.Converter(stream);

            ct.ThrowIfCancellationRequested();
            var result = await Connection.AppendToStreamAsync(
                resolvedStream,
                source.ExpectedVersion,
                Configuration.Translator.Translate(
                    new EventSourceChangeset(
                        resolvedStream,
                        source.ExpectedVersion,
                        causation,
                        correlation,
                        metadata ?? Metadata.None,
                        source.TakeEvents()
                        )))
                         .ConfigureAwait(false);

            source.ExpectedVersion = result.NextExpectedVersion;
            return(result);
        }
Exemple #2
0
 public EventSourceChangeset(StreamName stream, long expectedVersion, Guid causation, Guid correlation, Metadata metadata, object[] events)
 {
     Stream          = stream;
     ExpectedVersion = expectedVersion;
     Causation       = causation;
     Correlation     = correlation;
     Metadata        = metadata;
     Events          = events;
 }
        public async Task <ReadResult> ReadStreamAsync(StreamName stream, CancellationToken ct = default(CancellationToken))
        {
            ct.ThrowIfCancellationRequested();
            var resolvedStream = Configuration.Converter(stream);
            var slice          = await Connection.ReadStreamEventsForwardAsync(
                resolvedStream,
                StreamPosition.Start,
                Configuration.SliceSize,
                false)
                                 .ConfigureAwait(false);

            switch (slice.Status)
            {
            case SliceReadStatus.StreamNotFound:
                return(ReadResult.NotFound);

            case SliceReadStatus.StreamDeleted:
                return(ReadResult.Deleted);
            }
            var eventSource = Factory();
            var translator  = Configuration.TranslatorFactory();

            eventSource.RestoreFromEvents(translator.Translate(slice));
            while (!slice.IsEndOfStream)
            {
                ct.ThrowIfCancellationRequested();
                slice = await Connection.ReadStreamEventsForwardAsync(
                    resolvedStream,
                    slice.NextEventNumber,
                    Configuration.SliceSize,
                    false)
                        .ConfigureAwait(false);

                switch (slice.Status)
                {
                case SliceReadStatus.StreamNotFound:
                    return(ReadResult.NotFound);

                case SliceReadStatus.StreamDeleted:
                    return(ReadResult.Deleted);
                }
                eventSource.RestoreFromEvents(translator.Translate(slice));
            }
            eventSource.ExpectedVersion = slice.LastEventNumber;
            return(ReadResult.Found(eventSource));
        }
Exemple #4
0
 public StreamNotFoundException(StreamName stream)
     : base($"The stream {stream} was not found.")
 {
     Stream = stream;
 }
Exemple #5
0
 public StreamDeletedException(StreamName stream)
     : base($"The stream {stream} was deleted.")
 {
     Stream = stream;
 }
Exemple #6
0
 public StreamDeletedException(StreamName stream, Exception innerException = null)
     : base($"The stream {stream} was deleted.", innerException)
 {
     Stream = stream;
 }
Exemple #7
0
 public StreamNotFoundException(string stream, Exception innerException = null)
     : base($"The stream {stream} was not found.", innerException)
 {
     Stream = new StreamName(stream);
 }