/// <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)); }
/// <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)); }
/// <inheritdoc /> public MessageJournalPosition ParsePosition(string str) { return(MongoDBMessageJournalPosition.Parse(str)); }