bool Process(BlockType blockType, ByteBuffer block, IEventStoreObserver observer)
{
if ((blockType & BlockType.Compressed) != 0)
{
CompressionStrategy.Decompress(ref block);
}
var reader = new ByteBufferReader(block);
if ((blockType & BlockType.HasTypeDeclaration) != 0)
{
Mapping.LoadTypeDescriptors(reader);
}
var metadata = (blockType & BlockType.HasMetadata) != 0 ? Mapping.LoadObject(reader) : null;
uint eventCount;
if ((blockType & BlockType.HasOneEvent) != 0)
{
eventCount = 1;
}
else if ((blockType & BlockType.HasMoreEvents) != 0)
{
eventCount = reader.ReadVUInt32();
}
else
{
eventCount = 0;
}
var readEvents = observer.ObservedMetadata(metadata, eventCount);
if (!readEvents) return observer.ShouldStopReadingNextEvents();
var events = new object[eventCount];
for (var i = 0; i < eventCount; i++)
{
events[i] = Mapping.LoadObject(reader);
}
observer.ObservedEvents(events);
return observer.ShouldStopReadingNextEvents();
}