Пример #1
0
        /// <inheritdoc />
        public Task <MessageJournalPosition> GetBeginningOfJournal(CancellationToken cancellationToken = new CancellationToken())
        {
            var id  = new ObjectId(0, 0, 0, 0);
            var pos = new MongoDBMessageJournalPosition(id);

            return(Task.FromResult <MessageJournalPosition>(pos));
        }
Пример #2
0
        /// <inheritdoc />
        public async Task <MessageJournalReadResult> Read(MessageJournalPosition start, int count, MessageJournalFilter filter = null,
                                                          CancellationToken cancellationToken = new CancellationToken())
        {
            var fb        = Builders <MessageJournalEntryDocument> .Filter;
            var filterDef = fb.Gte(mje => mje.Id, ((MongoDBMessageJournalPosition)start).Id);

            filterDef = BuildFilter(filter, filterDef, fb);

            var options = new FindOptions();

            if (_collationSupported)
            {
                options.Collation = _collation;
            }

            var entryDocuments = await _messageJournalEntries.Find(filterDef, options)
                                 .Limit(count + 1)
                                 .ToListAsync(cancellationToken);

            var endOfJournal = entryDocuments.Count <= count;
            var nextId       = entryDocuments.Select(e => e.Id).LastOrDefault();

            if (endOfJournal)
            {
                nextId = new ObjectId(nextId.Timestamp, nextId.Machine, nextId.Pid, nextId.Increment + 1);
            }

            var nextPosition = new MongoDBMessageJournalPosition(nextId);
            var entries      = new List <MessageJournalEntry>();

            foreach (var entryDocument in entryDocuments.Take(count))
            {
                var position  = new MongoDBMessageJournalPosition(entryDocument.Id);
                var timestamp = entryDocument.Timestamp;
                var category  = entryDocument.Category;
                var headers   = new MessageHeaders(entryDocument.Headers);
                var message   = new Message(headers, entryDocument.Content);
                entries.Add(new MessageJournalEntry(category, position, timestamp, message));
            }

            return(new MessageJournalReadResult(start, nextPosition, endOfJournal, entries));
        }
Пример #3
0
 /// <inheritdoc />
 public MessageJournalPosition ParsePosition(string str)
 {
     return(MongoDBMessageJournalPosition.Parse(str));
 }