internal class StdOutMessageWriterWithBackup()

in TeamCity.VSTest.TestLogger/MessageWriters/StdOutMessageWriterWithBackup.cs [7:40]


internal class StdOutMessageWriterWithBackup(IBytesWriter indicesWriter, IBytesWriter messagesWriter) : IMessageWriter
{
    private bool _allowServiceMessageBackup = true;
    private ulong _position;

    public void Write(string message)
    {
        var messageToWrite = message + Environment.NewLine;
        if (_allowServiceMessageBackup)
        {
            try
            {
                var messageBytes = Encoding.UTF8.GetBytes(messageToWrite);
                messagesWriter.Write(messageBytes);
                messagesWriter.Flush();
                _position += (ulong)messageBytes.Length;

                // Write ulong in Java style
                var positionBytes = BitConverter.GetBytes(_position);
                Array.Reverse(positionBytes);
                indicesWriter.Write(positionBytes);
                indicesWriter.Flush();
            }
            catch
            {
                _allowServiceMessageBackup = false;
            }
        }

        Console.Write(messageToWrite);
    }

    public void Dispose() { }
}