Exemplo n.º 1
0
        public override async Task <ReadModelEnvelope <TReadModel> > GetAsync(string id, CancellationToken cancellationToken)
        {
            var readModelType = typeof(TReadModel);

            var stream = id == "null"
              ? readModelType.Name.ToLowerInvariant()
              : $"{readModelType.Name.ToLowerInvariant()}-{id}";

            var(lastMessage, found) = await _client.DB().ReadLastMessageFromStream(stream);

            if (!found)
            {
                Log.Verbose(() => $"Could not find any StreamsDb read model '{readModelType.PrettyPrint()}' with ID '{id}'");
                return(ReadModelEnvelope <TReadModel> .Empty(id));
            }

            var json      = Encoding.UTF8.GetString(lastMessage.Value);
            var readModel = JsonConvert.DeserializeObject <TReadModel>(json);

            var readModelVersion = lastMessage.Position;

            Log.Verbose(() => $"Found StreamsDb read model '{readModelType.PrettyPrint()}' with ID '{id}' and version '{readModelVersion}'");

            return(ReadModelEnvelope <TReadModel> .With(id, readModel, readModelVersion));
        }
Exemplo n.º 2
0
        public async Task <AllCommittedEventsPage> LoadAllCommittedEvents(GlobalPosition globalPosition, int pageSize, CancellationToken cancellationToken)
        {
            var streamsDbMessages = new List <Message>();

            IGlobalSlice currentSlice;
            var          from = globalPosition.IsStart
                                ? StreamsDB.Driver.GlobalPosition.Begin
                                : StreamsDB.Driver.GlobalPosition.Begin.Parse(globalPosition.Value);

            do
            {
                currentSlice = await _client.DB().ReadGlobalForward(from, pageSize).ConfigureAwait(false);

                from = currentSlice.Next;
                streamsDbMessages.AddRange(currentSlice.Messages);
            }while (streamsDbMessages.Count < pageSize && currentSlice.HasNext);

            var eventFlowEvents = Map(streamsDbMessages);

            return(new AllCommittedEventsPage(new GlobalPosition(currentSlice.Next.ToString()), eventFlowEvents));
        }
Exemplo n.º 3
0
        private async Task InitializeCursors()
        {
            var(message, found) = await _client.DB().ReadLastMessageFromStream(_cursorsStream);

            _cursor = found ? JsonConvert.DeserializeObject <long>(Encoding.UTF8.GetString(message.Value)) : 0;
        }