using System; namespace TrajectoryPlanningVisualization; public sealed class PlanningVisualizationOptions { public int Port { get; set; } = 0; public int RefreshRateHz { get; set; } = 10; public int HistoryCycleLimit { get; set; } = 60; public PlanningVisualizationOptionsSnapshot CreateValidatedSnapshot() { if (Port < 0 || Port > 65535) { throw new ArgumentOutOfRangeException(nameof(Port), "Port must be in the range 0 to 65535."); } if (RefreshRateHz <= 0) { throw new ArgumentOutOfRangeException(nameof(RefreshRateHz), "Refresh rate must be positive."); } if (HistoryCycleLimit <= 0) { throw new ArgumentOutOfRangeException(nameof(HistoryCycleLimit), "History cycle limit must be positive."); } return new PlanningVisualizationOptionsSnapshot(Port, RefreshRateHz, HistoryCycleLimit); } } public sealed class PlanningVisualizationOptionsSnapshot { internal PlanningVisualizationOptionsSnapshot(int port, int refreshRateHz, int historyCycleLimit) { Port = port; RefreshRateHz = refreshRateHz; HistoryCycleLimit = historyCycleLimit; } public int Port { get; } public int RefreshRateHz { get; } public int HistoryCycleLimit { get; } public int MaximumClients => 2; }