using System; using System.Collections.Generic; using System.Threading.Tasks; using TeamAAS_VP.Models; namespace TeamAAS_VP.Interfaces { /// /// 提供 PLC 生命周期管理的接口,包括创建、获取、初始化及注销 PLC 实例。 /// public interface IPlcService : IDisposable { /// /// 异步创建并注册一个新的 PLC 实例。 /// /// PLC 唯一标识。 /// PLC 的配置信息。 /// 创建是否成功。 Task CreatePlcAsync(Guid id, PlcInfo plcInfo); /// /// 同步创建并注册一个新的 PLC 实例。 /// /// PLC 唯一标识。 /// PLC 的配置信息。 /// 创建是否成功。 bool CreatePlc(Guid id, PlcInfo plcInfo); /// /// 初始化所有PLC实例(同步)。 /// /// /// (bool IsSucceed, string Message) InitializePlc(PlcInfo[] plcs); /// /// 初始化所有PLC实例(异步)。 /// /// /// Task<(bool IsSucceed, string Message)> InitializePlcAsync(PlcInfo[] plcs); /// /// 获取指定 ID 的 PLC 实例(同步),如果不存在可返回 null 或抛出异常,视实现而定。 /// /// PLC 唯一标识。 /// 对应的 实例。 IPlc GetPlc(Guid id); /// /// 异步获取指定 ID 的 PLC 实例。 /// /// PLC 唯一标识。 /// 对应的 实例的任务。 Task GetPlcAsync(Guid id); /// /// 获取当前所有已注册的 PLC(只读集合,同步)。 /// /// 只读的 PLC 实例集合。 IReadOnlyCollection GetAllPlcs(); /// /// 异步获取当前所有已注册的 PLC(只读集合)。 /// /// 只读的 PLC 实例集合的任务。 Task> GetAllPlcsAsync(); /// /// 尝试根据 ID 获取 PLC(同步),若存在则返回 true 并通过 out 参数返回实例。 /// /// PLC 唯一标识。 /// 输出的 PLC 实例(若找到)。 /// 是否找到。 bool TryGetPlc(Guid id, out IPlc plc); /// /// 尝试根据 ID 异步获取 PLC,返回是否找到及实例的元组。 /// /// PLC 唯一标识。 /// 包含是否找到与实例的元组。 Task<(bool found, IPlc plc)> TryGetPlcAsync(Guid id); /// /// 判断是否包含指定 ID 的 PLC(同步)。 /// /// PLC 唯一标识。 /// 是否包含。 bool ContainsPlc(Guid id); /// /// 判断是否包含指定 ID 的 PLC(异步)。 /// /// PLC 唯一标识。 /// 是否包含的任务。 Task ContainsPlcAsync(Guid id); /// /// 移除指定 ID 的 PLC(同步),并释放其资源。 /// /// PLC 唯一标识。 /// 移除是否成功。 bool RemovePlc(Guid id); /// /// 异步移除指定 ID 的 PLC,并释放其资源。 /// /// PLC 唯一标识。 /// 移除是否成功的任务。 Task RemovePlcAsync(Guid id); /// /// 移除所有已注册的 PLC(同步),并释放相关资源。 /// /// 是否全部成功移除;若部分失败则返回 false。 bool RemoveAllPlcs(); /// /// 异步移除所有已注册的 PLC,并释放相关资源。 /// /// 是否全部成功移除的任务;若部分失败则返回 false。 Task RemoveAllPlcsAsync(); /// /// 异步注销指定的 PLC(例如注销事件、断开连接等),不一定会立即从集合中移除,具体行为由实现决定。 /// /// PLC 唯一标识。 /// 任务。 Task UnRegisterPlcAsync(Guid id); /// /// 同步注销指定的 PLC(例如注销事件、断开连接等),不一定会立即从集合中移除,具体行为由实现决定。 /// /// PLC 唯一标识。 void UnRegisterPlc(Guid id); /// /// 根据 PLC 编号获取 PLC 实例(同步)。 /// /// PLC 编号。 /// 对应的 实例。 IPlc GetPlcByNumber(int number); /// /// 根据 PLC 编号异步获取 PLC 实例。 /// /// PLC 编号。 /// 对应的 实例的任务。 Task GetPlcByNumberAsync(int number); /// /// 根据 PLC 编号异步注销 PLC(例如注销事件、断开连接等)。 /// /// PLC 编号。 /// 任务。 Task UnRegisterPlcByNumberAsync(int number); /// /// 根据 PLC 编号同步注销 PLC(例如注销事件、断开连接等)。 /// /// PLC 编号。 void UnRegisterPlcByNumber(int number); /// /// 更新PLC编号 /// /// /// void UpdatePlcNumber(Guid id, int newNumber); } }