using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Team.FFFeederService.Interfaces { /// /// Feeder 管理服务接口。 /// 提供创建、查询、注销、移除和枚举 Feeder 的同步和异步操作。 /// 所有方法在实现中应保证线程安全并正确释放资源。 /// public interface IFeederService { /// /// 异步创建并注册一个新的 Feeder 实例。 /// /// Feeder 的唯一标识符 (GUID)。 /// Feeder 的编号索引(用于位置/槽位标识)。 /// Feeder 的显示名称。 /// Feeder 的网络 IP 地址或主机名。 /// Feeder 的网络端口号。 /// Feeder 的品牌枚举,用于创建特定实现。 /// 返回一个任务,任务结果为是否成功创建并注册 Feeder。 Task CreateFeederAsync(Guid id,int feederNo, string name, string ip, int port, FeederBrand feederBrand); /// /// 同步创建并注册一个新的 Feeder 实例。 /// /// Feeder 的唯一标识符 (GUID)。 /// Feeder 的编号索引(用于位置/槽位标识)。 /// Feeder 的显示名称。 /// Feeder 的网络 IP 地址或主机名。 /// Feeder 的网络端口号。 /// Feeder 的品牌枚举,用于创建特定实现。 /// 是否成功创建并注册 Feeder。 bool CreateFeeder(Guid id, int feederNo, string name, string ip, int port, FeederBrand feederBrand); /// /// 获取已注册的 Feeder(通过 id)。若未找到,可抛出或返回 null(由实现决定)。 /// /// 要获取的 Feeder 的唯一标识符。 /// 对应的 实例。 IVoiceCoilMotorFeeder GetFeeder(Guid id); /// /// 异步获取已注册的 Feeder(通过 id)。 /// /// 要获取的 Feeder 的唯一标识符。 /// 一个任务,任务结果为对应的 实例。 Task GetFeederAsync(Guid id); /// /// 通过 Feeder 编号(index)获取 Feeder。 /// /// Feeder 的编号索引。 /// 对应的 实例,若不存在返回 null(由实现决定)。 IVoiceCoilMotorFeeder GetFeederByIndex(int feederNo); /// /// 异步通过 Feeder 编号(index)获取 Feeder。 /// /// Feeder 的编号索引。 /// 一个任务,任务结果为对应的 实例。 Task GetFeederByIndexAsync(int feederNo); /// /// 注销并移除 Feeder(通过 id)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。 /// /// 要注销的 Feeder 的唯一标识符。 Task UnRegisterFeederAsync(Guid id); /// /// 同步注销并移除 Feeder(通过 id)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。 /// /// 要注销的 Feeder 的唯一标识符。 void UnRegisterFeeder(Guid id); /// /// 注销并移除 Feeder(通过 index)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。 /// /// 要注销的 Feeder 的编号索引。 Task UnRegisterFeederByIndexAsync(int feederNo); /// /// 同步注销并移除 Feeder(通过 index)。 /// /// 要注销的 Feeder 的编号索引。 void UnRegisterFeederByIndex(int feederNo); /// /// 获取所有已注册的 Feeder 的只读集合快照。 /// 返回的集合不应允许外部修改管理内部状态。 /// /// 只读集合,包含当前所有已注册的 Feeder 实例。 IReadOnlyCollection GetAllFeeders(); /// /// 异步获取所有已注册的 Feeder 的只读集合快照。 /// /// 一个任务,任务结果为只读集合,包含当前所有已注册的 Feeder 实例。 Task> GetAllFeedersAsync(); /// /// 尝试通过 id 获取 Feeder,避免抛出异常的安全访问方式。 /// /// 要查找的 Feeder 的唯一标识符。 /// 如果找到则输出对应的 Feeder 实例;否则为 null。 /// 如果找到则返回 true,否则返回 false。 bool TryGetFeeder(Guid id, out IVoiceCoilMotorFeeder feeder); /// /// 异步尝试通过 id 获取 Feeder,返回一个包含查找结果的元组。 /// /// 要查找的 Feeder 的唯一标识符。 /// 一个任务,任务结果为 (found, feeder),found 表示是否找到,feeder 为对应实例或 null。 Task<(bool found, IVoiceCoilMotorFeeder feeder)> TryGetFeederAsync(Guid id); /// /// 检查 Feeder 是否存在(通过 id)。 /// /// 要检查的 Feeder 的唯一标识符。 /// 存在则返回 true,否则返回 false。 bool ContainsFeeder(Guid id); /// /// 异步检查 Feeder 是否存在(通过 id)。 /// /// 要检查的 Feeder 的唯一标识符。 /// 一个任务,任务结果为是否存在。 Task ContainsFeederAsync(Guid id); /// /// 移除 Feeder(通过 id)并释放资源,返回是否成功移除。 /// 如果 Feeder 不存在则返回 false。 /// /// 要移除的 Feeder 的唯一标识符。 /// 是否成功移除并释放资源。 bool RemoveFeeder(Guid id); /// /// 异步移除 Feeder(通过 id)并释放资源,返回是否成功移除。 /// /// 要移除的 Feeder 的唯一标识符。 /// 一个任务,任务结果为是否成功移除并释放资源。 Task RemoveFeederAsync(Guid id); /// /// 移除并释放所有已注册的 Feeder。调用后管理集合应为空。 /// 实现应确保对每个 Feeder 的资源正确释放且保持原子性或可恢复性。 /// void RemoveAllFeeders(); /// /// 更新Feeder编号 /// /// /// void UpdateFeederNo(Guid id, int newFeederNo); } }