|
// 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
{
/// <summary>
/// A delegate representing factory methods used to re-create packets deserialized from a stream.
/// </summary>
/// <param name="translator">The translator containing the packet data.</param>
/// <returns>The packet reconstructed from the stream.</returns>
internal delegate INodePacket NodePacketFactoryMethod(ITranslator translator);
/// <summary>
/// This interface represents an object which is used to reconstruct packet objects from
/// binary data.
/// </summary>
internal interface INodePacketFactory
{
#region Methods
/// <summary>
/// Registers the specified handler for a particular packet type.
/// </summary>
/// <param name="packetType">The packet type.</param>
/// <param name="factory">The factory for packets of the specified type.</param>
/// <param name="handler">The handler to be called when packets of the specified type are received.</param>
void RegisterPacketHandler(NodePacketType packetType, NodePacketFactoryMethod factory, INodePacketHandler handler);
/// <summary>
/// Unregisters a packet handler.
/// </summary>
/// <param name="packetType">The packet type.</param>
void UnregisterPacketHandler(NodePacketType packetType);
/// <summary>
/// Takes a serializer, deserializes the packet and routes it to the appropriate handler.
/// </summary>
/// <param name="nodeId">The node from which the packet was received.</param>
/// <param name="packetType">The packet type.</param>
/// <param name="translator">The translator containing the data from which the packet should be reconstructed.</param>
void DeserializeAndRoutePacket(int nodeId, NodePacketType packetType, ITranslator translator);
/// <summary>
/// Routes the specified packet
/// </summary>
/// <param name="nodeId">The node from which the packet was received.</param>
/// <param name="packet">The packet to route.</param>
void RoutePacket(int nodeId, INodePacket packet);
#endregion
}
}
|