public IEnumerable <GlobalSequenceRecord> Read(long lastCommittedGlobalSequenceNumber, long offset) { using (var readStream = new FileStream(_seqFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 100 * SizeofSeqRecord, FileOptions.None)) using (var reader = new BinaryReader(readStream, Encoding.ASCII)) { readStream.Seek(offset * SizeofSeqRecord, SeekOrigin.Begin); while (readStream.Position + SizeofSeqRecord <= readStream.Length) { var record = new GlobalSequenceRecord { GlobalSequenceNumber = reader.ReadInt64(), AggregateRootId = ReadFixedLengthString(reader), LocalSequenceNumber = reader.ReadInt64(), }; if (record.GlobalSequenceNumber > lastCommittedGlobalSequenceNumber) { break; } yield return(record); } } }
public void Write(GlobalSequenceRecord record) { _writer.Write(record.GlobalSequenceNumber); var keyAsBytes = Encoding.UTF8.GetBytes(record.AggregateRootId); var length = keyAsBytes.Length; Array.Resize(ref keyAsBytes, 255); _writer.Write((byte)length); _writer.Write(keyAsBytes); _writer.Write(record.LocalSequenceNumber); _writer.Flush(); }
public IEnumerable<GlobalSequenceRecord> Read(long lastCommittedGlobalSequenceNumber, long offset) { using (var readStream = new FileStream(_seqFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 100 * SizeofSeqRecord, FileOptions.None)) using (var reader = new BinaryReader(readStream, Encoding.ASCII)) { readStream.Seek(offset * SizeofSeqRecord, SeekOrigin.Begin); while (readStream.Position + SizeofSeqRecord <= readStream.Length) { var record = new GlobalSequenceRecord { GlobalSequenceNumber = reader.ReadInt64(), AggregateRootId = ReadFixedLengthString(reader), LocalSequenceNumber = reader.ReadInt64(), }; if (record.GlobalSequenceNumber > lastCommittedGlobalSequenceNumber) break; yield return record; } } }