namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Helpers; /// /// Parses and normalizes failover URL sets for redundant OPC UA connections. /// public static class FailoverUrlParser { /// /// Parses a comma-separated failover URL string, prepending the primary URL. /// Trims whitespace and deduplicates. /// /// The primary endpoint URL. /// Optional comma-separated failover URLs. /// An array with the primary URL first, followed by unique failover URLs. public static string[] Parse(string primaryUrl, string? failoverCsv) { if (string.IsNullOrWhiteSpace(failoverCsv)) return [primaryUrl]; var urls = new List { primaryUrl }; foreach (var url in failoverCsv.Split(',', StringSplitOptions.RemoveEmptyEntries)) { var trimmed = url.Trim(); if (!string.IsNullOrEmpty(trimmed) && !urls.Contains(trimmed, StringComparer.OrdinalIgnoreCase)) urls.Add(trimmed); } return urls.ToArray(); } /// /// Builds a failover URL set from the primary URL and an optional array of failover URLs. /// /// The primary endpoint URL. /// Optional failover URLs. /// An array with the primary URL first, followed by unique failover URLs. public static string[] Parse(string primaryUrl, string[]? failoverUrls) { if (failoverUrls == null || failoverUrls.Length == 0) return [primaryUrl]; var urls = new List { primaryUrl }; foreach (var url in failoverUrls) { var trimmed = url?.Trim(); if (!string.IsNullOrEmpty(trimmed) && !urls.Contains(trimmed, StringComparer.OrdinalIgnoreCase)) urls.Add(trimmed); } return urls.ToArray(); } }