|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable disable
namespace Microsoft.Build.BackEnd
{
#region Enums
/// <summary>
/// Enumeration of all of the packet types used for communication.
/// </summary>
internal enum NodePacketType : byte
{
/// <summary>
/// Notifies the Node to set a configuration for a particular build. This is sent before
/// any BuildRequests are made and will not be sent again for a particular build. This instructs
/// the node to prepare to receive build requests.
///
/// Contains:
/// Build ID
/// Environment variables
/// Logging Services Configuration
/// Node ID
/// Default Global Properties
/// Toolset Definition Locations
/// Startup Directory
/// UI Culture Information
/// App Domain Configuration XML
/// </summary>
NodeConfiguration,
/// <summary>
/// A BuildRequestConfiguration object.
/// When sent TO a node, this informs the node of a build configuration.
/// When sent FROM a node, this requests a BuildRequestConfigurationResponse to map the configuration to the
/// appropriate global configuration ID.
///
/// Contents:
/// Configuration ID
/// Project Filename
/// Project Properties
/// Project Tools Version
/// </summary>
BuildRequestConfiguration,
/// <summary>
/// A response to a request to map a build configuration
///
/// Contents:
/// Node Configuration ID
/// Global Configuration ID
/// </summary>
BuildRequestConfigurationResponse,
/// <summary>
/// Information about a project that has been loaded by a node.
///
/// Contents:
/// Global Configuration ID
/// Initial Targets
/// Default Targets
/// </summary>
ProjectLoadInfo,
/// <summary>
/// Packet used to inform the scheduler that a node's active build request is blocked.
///
/// Contents:
/// Build Request ID
/// Active Targets
/// Blocked Target, if any
/// Child Requests, if any
/// </summary>
BuildRequestBlocker,
/// <summary>
/// Packet used to unblocked a blocked request on a node.
///
/// Contents:
/// Build Request ID
/// Build Results for child requests, if any.
/// </summary>
BuildRequestUnblocker,
/// <summary>
/// A BuildRequest object
///
/// Contents:
/// Build Request ID
/// Configuration ID
/// Project Instance ID
/// Targets
/// </summary>
BuildRequest,
/// <summary>
/// A BuildResult object
///
/// Contents:
/// Build ID
/// Project Instance ID
/// Targets
/// Outputs (per Target)
/// Results (per Target)
/// </summary>
BuildResult,
/// <summary>
/// A logging message.
///
/// Contents:
/// Build Event Type
/// Build Event Args
/// </summary>
LogMessage,
/// <summary>
/// Informs the node that the build is complete.
///
/// Contents:
/// Prepare For Reuse
/// </summary>
NodeBuildComplete,
/// <summary>
/// Reported by the node (or node provider) when a node has terminated. This is the final packet that will be received
/// from a node.
///
/// Contents:
/// Reason
/// </summary>
NodeShutdown,
/// <summary>
/// Notifies the task host to set the task-specific configuration for a particular task execution.
/// This is sent in place of NodeConfiguration and gives the task host all the information it needs
/// to set itself up and execute the task that matches this particular configuration.
///
/// Contains:
/// Node ID (of parent MSBuild node, to make the logging work out)
/// Startup directory
/// Environment variables
/// UI Culture information
/// App Domain Configuration XML
/// Task name
/// Task assembly location
/// Parameter names and values to set to the task prior to execution
/// </summary>
TaskHostConfiguration,
/// <summary>
/// Informs the parent node that the task host has finished executing a
/// particular task. Does not need to contain identifying information
/// about the task, because the task host will only ever be connected to
/// one parent node at a a time, and will only ever be executing one task
/// for that node at any one time.
///
/// Contents:
/// Task result (success / failure)
/// Resultant parameter values (for output gathering)
/// </summary>
TaskHostTaskComplete,
/// <summary>
/// Message sent from the node to its paired task host when a task that
/// supports ICancellableTask is cancelled.
///
/// Contents:
/// (nothing)
/// </summary>
TaskHostTaskCancelled,
/// <summary>
/// Message sent from a node when it needs to have an SDK resolved.
/// </summary>
ResolveSdkRequest,
/// <summary>
/// Message sent back to a node when an SDK has been resolved.
/// </summary>
ResolveSdkResponse,
/// <summary>
/// Message sent from a node when a task is requesting or returning resources from the scheduler.
/// </summary>
ResourceRequest,
/// <summary>
/// Message sent back to a node informing it about the resource that were granted by the scheduler.
/// </summary>
ResourceResponse,
/// <summary>
/// Message sent from a node reporting a file access.
/// </summary>
FileAccessReport,
/// <summary>
/// Message sent from a node reporting process data.
/// </summary>
ProcessReport,
/// <summary>
/// Command in form of MSBuild command line for server node - MSBuild Server.
/// Keep this enum value constant intact as this is part of contract with dotnet CLI
/// </summary>
ServerNodeBuildCommand = 0xF0,
/// <summary>
/// Response from server node command
/// Keep this enum value constant intact as this is part of contract with dotnet CLI
/// </summary>
ServerNodeBuildResult = 0xF1,
/// <summary>
/// Info about server console activity.
/// Keep this enum value constant intact as this is part of contract with dotnet CLI
/// </summary>
ServerNodeConsoleWrite = 0xF2,
/// <summary>
/// Command to cancel ongoing build.
/// Keep this enum value constant intact as this is part of contract with dotnet CLI
/// </summary>
ServerNodeBuildCancel = 0xF3,
}
#endregion
/// <summary>
/// This interface represents a packet which may be transmitted using an INodeEndpoint.
/// Implementations define the serialized form of the data.
/// </summary>
internal interface INodePacket : ITranslatable
{
#region Properties
/// <summary>
/// The type of the packet. Used to reconstitute the packet using the correct factory.
/// </summary>
NodePacketType Type
{
get;
}
#endregion
}
}
|