Files
I150/srcs/RobotNet10/FleetManager/RobotNet10.FleetManager/Services/TrafficControl/Models/RouteSegment.cs
2026-07-03 16:37:12 +07:00

72 lines
2.2 KiB
C#

using RobotNet.VDA5050.Order;
namespace RobotNet10.FleetManager.Services.TrafficControl.Models;
/// <summary>
/// Represents a segment in a robot route (either a node or an edge)
/// Uses VDA5050.Order.Node and VDA5050.Order.Edge to store full information
/// </summary>
public class RouteSegment
{
// Internal properties needed for traffic control logic
/// <summary>
/// Node ID (Guid from database) - for conflict detection and edge reservation
/// </summary>
public Guid NodeId { get; set; }
/// <summary>
/// Edge ID (Guid from database) - Null if this is a node-only segment
/// </summary>
public Guid? EdgeId { get; set; }
/// <summary>
/// Start Node ID of the edge (Guid from database) - for conflict detection
/// </summary>
public Guid? StartNodeId { get; set; }
/// <summary>
/// End Node ID of the edge (Guid from database) - for conflict detection
/// </summary>
public Guid? EndNodeId { get; set; }
/// <summary>
/// Whether this segment has been released into base
/// </summary>
public bool Released { get; set; }
/// <summary>
/// Time until which this edge is reserved
/// </summary>
public DateTime? ReservedUntil { get; set; }
// VDA5050 Order objects containing full information from MapEditor
/// <summary>
/// VDA5050 Node with full information (NodeId, NodeDescription, NodePosition, Actions, etc.)
/// </summary>
public Node? VdaNode { get; set; }
/// <summary>
/// VDA5050 Edge with full information (EdgeId, EdgeDescription, MaxSpeed, Trajectory, Actions, etc.)
/// Null if this is a node-only segment
/// </summary>
public Edge? VdaEdge { get; set; }
/// <summary>
/// Get SequenceId from VdaNode or VdaEdge
/// </summary>
public int SequenceId => VdaNode?.SequenceId ?? VdaEdge?.SequenceId ?? 0;
/// <summary>
/// Check if this segment is a node segment
/// </summary>
public bool IsNode => VdaNode != null;
/// <summary>
/// Check if this segment is an edge segment
/// </summary>
public bool IsEdge => VdaEdge != null;
}