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;
}
}