IFeederService.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Team.FFFeederService.Interfaces
  7. {
  8. /// <summary>
  9. /// Feeder 管理服务接口。
  10. /// 提供创建、查询、注销、移除和枚举 Feeder 的同步和异步操作。
  11. /// 所有方法在实现中应保证线程安全并正确释放资源。
  12. /// </summary>
  13. public interface IFeederService
  14. {
  15. /// <summary>
  16. /// 异步创建并注册一个新的 Feeder 实例。
  17. /// </summary>
  18. /// <param name="id">Feeder 的唯一标识符 (GUID)。</param>
  19. /// <param name="feederNo">Feeder 的编号索引(用于位置/槽位标识)。</param>
  20. /// <param name="name">Feeder 的显示名称。</param>
  21. /// <param name="ip">Feeder 的网络 IP 地址或主机名。</param>
  22. /// <param name="port">Feeder 的网络端口号。</param>
  23. /// <param name="feederBrand">Feeder 的品牌枚举,用于创建特定实现。</param>
  24. /// <returns>返回一个任务,任务结果为是否成功创建并注册 Feeder。</returns>
  25. Task<bool> CreateFeederAsync(Guid id,int feederNo, string name, string ip, int port, FeederBrand feederBrand);
  26. /// <summary>
  27. /// 同步创建并注册一个新的 Feeder 实例。
  28. /// </summary>
  29. /// <param name="id">Feeder 的唯一标识符 (GUID)。</param>
  30. /// <param name="feederNo">Feeder 的编号索引(用于位置/槽位标识)。</param>
  31. /// <param name="name">Feeder 的显示名称。</param>
  32. /// <param name="ip">Feeder 的网络 IP 地址或主机名。</param>
  33. /// <param name="port">Feeder 的网络端口号。</param>
  34. /// <param name="feederBrand">Feeder 的品牌枚举,用于创建特定实现。</param>
  35. /// <returns>是否成功创建并注册 Feeder。</returns>
  36. bool CreateFeeder(Guid id, int feederNo, string name, string ip, int port, FeederBrand feederBrand);
  37. /// <summary>
  38. /// 获取已注册的 Feeder(通过 id)。若未找到,可抛出或返回 null(由实现决定)。
  39. /// </summary>
  40. /// <param name="id">要获取的 Feeder 的唯一标识符。</param>
  41. /// <returns>对应的 <see cref="IVoiceCoilMotorFeeder"/> 实例。</returns>
  42. IVoiceCoilMotorFeeder GetFeeder(Guid id);
  43. /// <summary>
  44. /// 异步获取已注册的 Feeder(通过 id)。
  45. /// </summary>
  46. /// <param name="id">要获取的 Feeder 的唯一标识符。</param>
  47. /// <returns>一个任务,任务结果为对应的 <see cref="IVoiceCoilMotorFeeder"/> 实例。</returns>
  48. Task<IVoiceCoilMotorFeeder> GetFeederAsync(Guid id);
  49. /// <summary>
  50. /// 通过 Feeder 编号(index)获取 Feeder。
  51. /// </summary>
  52. /// <param name="feederNo">Feeder 的编号索引。</param>
  53. /// <returns>对应的 <see cref="IVoiceCoilMotorFeeder"/> 实例,若不存在返回 null(由实现决定)。</returns>
  54. IVoiceCoilMotorFeeder GetFeederByIndex(int feederNo);
  55. /// <summary>
  56. /// 异步通过 Feeder 编号(index)获取 Feeder。
  57. /// </summary>
  58. /// <param name="feederNo">Feeder 的编号索引。</param>
  59. /// <returns>一个任务,任务结果为对应的 <see cref="IVoiceCoilMotorFeeder"/> 实例。</returns>
  60. Task<IVoiceCoilMotorFeeder> GetFeederByIndexAsync(int feederNo);
  61. /// <summary>
  62. /// 注销并移除 Feeder(通过 id)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。
  63. /// </summary>
  64. /// <param name="id">要注销的 Feeder 的唯一标识符。</param>
  65. Task UnRegisterFeederAsync(Guid id);
  66. /// <summary>
  67. /// 同步注销并移除 Feeder(通过 id)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。
  68. /// </summary>
  69. /// <param name="id">要注销的 Feeder 的唯一标识符。</param>
  70. void UnRegisterFeeder(Guid id);
  71. /// <summary>
  72. /// 注销并移除 Feeder(通过 index)。调用后应释放与该 Feeder 相关的所有资源并从管理集合中移除。
  73. /// </summary>
  74. /// <param name="feederNo">要注销的 Feeder 的编号索引。</param>
  75. Task UnRegisterFeederByIndexAsync(int feederNo);
  76. /// <summary>
  77. /// 同步注销并移除 Feeder(通过 index)。
  78. /// </summary>
  79. /// <param name="feederNo">要注销的 Feeder 的编号索引。</param>
  80. void UnRegisterFeederByIndex(int feederNo);
  81. /// <summary>
  82. /// 获取所有已注册的 Feeder 的只读集合快照。
  83. /// 返回的集合不应允许外部修改管理内部状态。
  84. /// </summary>
  85. /// <returns>只读集合,包含当前所有已注册的 Feeder 实例。</returns>
  86. IReadOnlyCollection<IVoiceCoilMotorFeeder> GetAllFeeders();
  87. /// <summary>
  88. /// 异步获取所有已注册的 Feeder 的只读集合快照。
  89. /// </summary>
  90. /// <returns>一个任务,任务结果为只读集合,包含当前所有已注册的 Feeder 实例。</returns>
  91. Task<IReadOnlyCollection<IVoiceCoilMotorFeeder>> GetAllFeedersAsync();
  92. /// <summary>
  93. /// 尝试通过 id 获取 Feeder,避免抛出异常的安全访问方式。
  94. /// </summary>
  95. /// <param name="id">要查找的 Feeder 的唯一标识符。</param>
  96. /// <param name="feeder">如果找到则输出对应的 Feeder 实例;否则为 null。</param>
  97. /// <returns>如果找到则返回 true,否则返回 false。</returns>
  98. bool TryGetFeeder(Guid id, out IVoiceCoilMotorFeeder feeder);
  99. /// <summary>
  100. /// 异步尝试通过 id 获取 Feeder,返回一个包含查找结果的元组。
  101. /// </summary>
  102. /// <param name="id">要查找的 Feeder 的唯一标识符。</param>
  103. /// <returns>一个任务,任务结果为 (found, feeder),found 表示是否找到,feeder 为对应实例或 null。</returns>
  104. Task<(bool found, IVoiceCoilMotorFeeder feeder)> TryGetFeederAsync(Guid id);
  105. /// <summary>
  106. /// 检查 Feeder 是否存在(通过 id)。
  107. /// </summary>
  108. /// <param name="id">要检查的 Feeder 的唯一标识符。</param>
  109. /// <returns>存在则返回 true,否则返回 false。</returns>
  110. bool ContainsFeeder(Guid id);
  111. /// <summary>
  112. /// 异步检查 Feeder 是否存在(通过 id)。
  113. /// </summary>
  114. /// <param name="id">要检查的 Feeder 的唯一标识符。</param>
  115. /// <returns>一个任务,任务结果为是否存在。</returns>
  116. Task<bool> ContainsFeederAsync(Guid id);
  117. /// <summary>
  118. /// 移除 Feeder(通过 id)并释放资源,返回是否成功移除。
  119. /// 如果 Feeder 不存在则返回 false。
  120. /// </summary>
  121. /// <param name="id">要移除的 Feeder 的唯一标识符。</param>
  122. /// <returns>是否成功移除并释放资源。</returns>
  123. bool RemoveFeeder(Guid id);
  124. /// <summary>
  125. /// 异步移除 Feeder(通过 id)并释放资源,返回是否成功移除。
  126. /// </summary>
  127. /// <param name="id">要移除的 Feeder 的唯一标识符。</param>
  128. /// <returns>一个任务,任务结果为是否成功移除并释放资源。</returns>
  129. Task<bool> RemoveFeederAsync(Guid id);
  130. /// <summary>
  131. /// 移除并释放所有已注册的 Feeder。调用后管理集合应为空。
  132. /// 实现应确保对每个 Feeder 的资源正确释放且保持原子性或可恢复性。
  133. /// </summary>
  134. void RemoveAllFeeders();
  135. /// <summary>
  136. /// 更新Feeder编号
  137. /// </summary>
  138. /// <param name="id"></param>
  139. /// <param name="newFeederNo"></param>
  140. void UpdateFeederNo(Guid id, int newFeederNo);
  141. }
  142. }