using System; using CommunityToolkit.Mvvm.ComponentModel; namespace Plugin.DeviceConfig.Entity { /// /// 设备种类枚举 /// public enum DeviceKind { PowerSupply, CanDevice, PlcDevice, Chamber, DAQ } /// /// V3.0 执行位置枚举:Local=进程独占直连;Broker=跨进程共享,由 DeviceBroker 宿主代理 /// public enum ExecutionModeKind { Local, Broker } /// /// 传输方式枚举 /// public enum TransportType { Tcp, Serial, Visa, SDK, Can } /// /// 设备定义实体 /// public partial class DeviceDefinition : ObservableObject { /// /// 无参构造函数(用于数据绑定) /// public DeviceDefinition() { } /// /// 设备唯一标识(主键) /// [ObservableProperty] private string deviceId = string.Empty; /// /// 设备种类: PowerSupply / CanDevice / PlcDevice / Chamber / DAQ /// [ObservableProperty] private DeviceKind kind; /// /// 驱动类型名称 /// [ObservableProperty] private string driverType = string.Empty; /// /// 传输方式: Tcp / Serial / Visa / SDK /// [ObservableProperty] private TransportType transport; /// /// 连接端点(IP:Port 或 COM口) /// [ObservableProperty] private string endpoint = string.Empty; /// /// 执行位置: Local / Broker(V3.0 §05,默认 Local) /// [ObservableProperty] private ExecutionModeKind executionMode = ExecutionModeKind.Local; /// /// 仲裁域标识(必填,候选值由配置枚举;同一 PhysicalSessionKey 只能归属一个仲裁域宿主) /// [ObservableProperty] private string authorityId = string.Empty; /// /// Broker 宿主标识(仅 Broker 模式;须与仲裁域一致) /// [ObservableProperty] private string brokerId = string.Empty; /// /// Broker 宿主进程号(仅 Broker 记录用,运行期以 Broker 实际 PID 为准;MVP 占位当前进程) /// [ObservableProperty] private string ownerProcessId = string.Empty; /// /// 物理会话键(仅 Broker;地址规范化后的固定字符串,如 can/CAN_BUS_1/main) /// [ObservableProperty] private string physicalSessionKey = string.Empty; /// /// 访问控制策略:只读派生,不可手工编辑(V3.0 §05) /// public string AccessPolicy => ExecutionMode switch { ExecutionModeKind.Broker => "共享仲裁 · Broker SessionGate 代理", _ => "独占直连 · 本进程持有物理会话" }; /// /// 生效版本号 /// [ObservableProperty] private string effectiveVersion = string.Empty; /// /// 创建时间 /// [ObservableProperty] private DateTime createdAt = DateTime.Now; /// /// 更新时间 /// [ObservableProperty] private DateTime updatedAt = DateTime.Now; } }