File: TelemetryEventArgs.cs
Web Access
Project: ..\..\..\src\Framework\Microsoft.Build.Framework.csproj (Microsoft.Build.Framework)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Build.Shared;
 
namespace Microsoft.Build.Framework
{
    /// <summary>
    /// Arguments for telemetry events.
    /// </summary>
    [Serializable]
    public sealed class TelemetryEventArgs : BuildEventArgs
    {
        /// <summary>
        /// Gets or sets the name of the event.
        /// </summary>
        public string? EventName { get; set; }
 
        /// <summary>
        /// Gets or sets a list of properties associated with the event.
        /// </summary>
        public IDictionary<string, string?> Properties { get; set; } = new Dictionary<string, string?>();
 
        internal override void WriteToStream(BinaryWriter writer)
        {
            base.WriteToStream(writer);
 
            writer.WriteOptionalString(EventName);
            int count = Properties?.Count ?? 0;
            writer.Write7BitEncodedInt(count);
 
            if (Properties == null)
            {
                return;
            }
 
            foreach (var kvp in Properties)
            {
                writer.Write(kvp.Key);
                writer.WriteOptionalString(kvp.Value);
            }
        }
        internal override void CreateFromStream(BinaryReader reader, int version)
        {
            base.CreateFromStream(reader, version);
 
            EventName = reader.ReadOptionalString();
            int count = reader.Read7BitEncodedInt();
 
            for (int i = 0; i < count; i++)
            {
                string key = reader.ReadString();
                string? value = reader.ReadOptionalString();
                Properties.Add(key, value);
            }
        }
    }
}