using System;
|
using System.Configuration;
|
using System.Linq;
|
|
namespace Plugin.DeviceConfig
|
{
|
/// <summary>
|
/// V3.0 仲裁域 / Broker 宿主候选枚举。
|
/// 候选值从宿主配置文件 appSettings 读取(键:V3.AuthorityIds / V3.BrokerIds,分号分隔),
|
/// 未配置时回退内置默认值,与 InfrastructureBootstrapper 的本地仲裁域 "local-main" 保持一致。
|
/// </summary>
|
public static class V3AuthorityCatalog
|
{
|
private const string FallbackAuthorityIds = "local-main;broker-b01";
|
private const string FallbackBrokerIds = "broker-b01";
|
|
/// <summary>全部合法仲裁域标识(Local 域以 local- 前缀标识,Broker 域即各 Broker 自身)</summary>
|
public static string[] AuthorityIds => Read("V3.AuthorityIds", FallbackAuthorityIds);
|
|
/// <summary>全部合法 Broker 宿主标识</summary>
|
public static string[] BrokerIds => Read("V3.BrokerIds", FallbackBrokerIds);
|
|
/// <summary>本机默认 Local 仲裁域(候选枚举中第一个 local- 前缀项)</summary>
|
public static string LocalAuthorityId =>
|
AuthorityIds.FirstOrDefault(a => a.StartsWith("local-", StringComparison.OrdinalIgnoreCase))
|
?? AuthorityIds[0];
|
|
/// <summary>判断给定标识是否为 Local 仲裁域</summary>
|
public static bool IsLocalAuthority(string? authorityId) =>
|
!string.IsNullOrWhiteSpace(authorityId) &&
|
authorityId!.StartsWith("local-", StringComparison.OrdinalIgnoreCase);
|
|
private static string[] Read(string key, string fallback)
|
{
|
string? raw = null;
|
try
|
{
|
raw = ConfigurationManager.AppSettings[key];
|
}
|
catch
|
{
|
// 宿主未提供配置文件时静默回退默认枚举
|
}
|
// net472 引用程序集无 NotNullWhen 标注,显式回退后解引用
|
var value = string.IsNullOrWhiteSpace(raw) ? fallback : raw!;
|
return value.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
|
.Select(s => s.Trim())
|
.Where(s => s.Length > 0)
|
.ToArray();
|
}
|
}
|
}
|