in TeamCity.CSharpInteractive/MessagesReader.cs [33:66]
public IEnumerable<IServiceMessage> Read(string indicesFile, string messagesFile)
{
using var reader = _fileSystem.OpenReader(messagesFile);
var position = 0UL;
foreach (var index in _indicesReader.Read(indicesFile))
{
var size = (int)(index - position);
if (size <= 0)
{
_log.Warning($"Corrupted file \"{indicesFile}\", invalid index {index}.");
break;
}
using var owner = _memoryPool.Rent(size);
var buffer = owner.Memory[..size];
if (reader.Read(buffer, (long)position) != size)
{
_log.Warning($"Corrupted file \"{messagesFile}\", invalid size.");
break;
}
position = index;
var line = _encoding.GetString(buffer);
if (string.IsNullOrWhiteSpace(line))
{
continue;
}
foreach (var message in _serviceMessageParser.ParseServiceMessages(line).Where(message => message != default))
{
yield return message;
}
}
}