private void GetHighestSequenceNumber(AsyncWriteTarget.ReadHighestSequenceNr rhsn) { LinkedList<IPersistentRepresentation> list; Sender.Tell(_messages.TryGetValue(rhsn.PersistenceId, out list) ? list.Last.Value.SequenceNr : 0L); }
private void Read(AsyncWriteTarget.ReplayMessages replay) { LinkedList<IPersistentRepresentation> list; if (_messages.TryGetValue(replay.PersistenceId, out list)) { var filtered = list .Where(x => x.SequenceNr >= replay.FromSequenceNr && x.SequenceNr <= replay.ToSequenceNr) .Take(replay.Max >= int.MaxValue ? int.MaxValue : (int)replay.Max); foreach (var persistent in filtered) { Sender.Tell(persistent); } } Sender.Tell(AsyncWriteTarget.ReplaySuccess.Instance); }
private void Delete(AsyncWriteTarget.DeleteMessagesTo deleteCommand) { LinkedList<IPersistentRepresentation> list; if (_messages.TryGetValue(deleteCommand.PersistenceId, out list)) { var node = list.First; if (deleteCommand.IsPermanent) { DeletePermanently(deleteCommand, node, list); } else { MarkAsDeleted(deleteCommand, node); } } Sender.Tell(new object()); }
private static void MarkAsDeleted(AsyncWriteTarget.DeleteMessagesTo deleteCommand, LinkedListNode<IPersistentRepresentation> node) { while (node != null) { if (node.Value.SequenceNr <= deleteCommand.ToSequenceNr) { var curr = node.Value; node.Value = curr.Update(sequenceNr: curr.SequenceNr, persistenceId: curr.PersistenceId, isDeleted: true, sender: curr.Sender); } node = node.Next; } }
private void Add(AsyncWriteTarget.WriteMessages writeMessages) { foreach (var persistent in writeMessages.Messages) { var list = _messages.GetOrAdd(persistent.PersistenceId, new LinkedList<IPersistentRepresentation>()); list.AddLast(persistent); } Sender.Tell(new object()); }
private static void DeletePermanently(AsyncWriteTarget.DeleteMessagesTo deleteCommand, LinkedListNode<IPersistentRepresentation> node, LinkedList<IPersistentRepresentation> list) { while (node != null) { if (node.Value.SequenceNr <= deleteCommand.ToSequenceNr) { var deleted = node; node = node.Next; list.Remove(deleted); } else node = node.Next; } }