Exemplo n.º 1
0
        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);
                    }
                }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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;
                }
            }
        }