Ejemplo n.º 1
0
        internal void Update(IBuildStuff _builder, ICanBeSharded lastEvent, int index)
        {
            Index = index;
            Timestamp = DateTime.Now;

            if (lastEvent != null)
            {
                LastEventTimestamp = lastEvent.Timestamp;
                LastEventValue = lastEvent.Value;
            }
        }
        public async Task AppendValues(ICanBeSharded[] values)
        {
            foreach (var shard in _sharding.Shard(values))
            {
                var group = shard.GetValues();
                var name = shard.GetName();
                var header = ReadHeader(name);
                DateTime lastEventTimestamp = header.LastEventTimestamp;
                ICanBeSharded lastEvent = null;

                using (var stream = Open_Stream_For_Writing(name))
                {
                    var tail = header.Index;

                    using (var buffer = CreateMemoryStream())
                    {
                        using (var writer = new BinaryWriter(buffer, Encoding.Default, true))
                            foreach (var value in group)
                            {
                                _builder.Serialize(value, writer);
                                if(value.Timestamp > lastEventTimestamp)
                                {
                                    lastEvent = value;
                                    lastEventTimestamp = value.Timestamp;
                                }
                            }
                        stream.Seek(tail, SeekOrigin.Begin);
                        buffer.Seek(0, SeekOrigin.Begin);
                        int writtenBytes = group.Count() * _builder.SingleElementSizeInBytes();
                        await buffer.CopyToAsync(stream);
                        stream.Flush();

                        tail = tail + writtenBytes;
                    }

                    header.Update(_builder, lastEvent, tail);
                }
                await WriteHeader(header, name);
            }
        }