IPlcService.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using TeamAAS_VP.Models;
  5. namespace TeamAAS_VP.Interfaces
  6. {
  7. /// <summary>
  8. /// 提供 PLC 生命周期管理的接口,包括创建、获取、初始化及注销 PLC 实例。
  9. /// </summary>
  10. public interface IPlcService : IDisposable
  11. {
  12. /// <summary>
  13. /// 异步创建并注册一个新的 PLC 实例。
  14. /// </summary>
  15. /// <param name="id">PLC 唯一标识。</param>
  16. /// <param name="plcInfo">PLC 的配置信息。</param>
  17. /// <returns>创建是否成功。</returns>
  18. Task<bool> CreatePlcAsync(Guid id, PlcInfo plcInfo);
  19. /// <summary>
  20. /// 同步创建并注册一个新的 PLC 实例。
  21. /// </summary>
  22. /// <param name="id">PLC 唯一标识。</param>
  23. /// <param name="plcInfo">PLC 的配置信息。</param>
  24. /// <returns>创建是否成功。</returns>
  25. bool CreatePlc(Guid id, PlcInfo plcInfo);
  26. /// <summary>
  27. /// 初始化所有PLC实例(同步)。
  28. /// </summary>
  29. /// <param name="plcs"></param>
  30. /// <returns></returns>
  31. (bool IsSucceed, string Message) InitializePlc(PlcInfo[] plcs);
  32. /// <summary>
  33. /// 初始化所有PLC实例(异步)。
  34. /// </summary>
  35. /// <param name="plcs"></param>
  36. /// <returns></returns>
  37. Task<(bool IsSucceed, string Message)> InitializePlcAsync(PlcInfo[] plcs);
  38. /// <summary>
  39. /// 获取指定 ID 的 PLC 实例(同步),如果不存在可返回 null 或抛出异常,视实现而定。
  40. /// </summary>
  41. /// <param name="id">PLC 唯一标识。</param>
  42. /// <returns>对应的 <see cref="IPlc"/> 实例。</returns>
  43. IPlc GetPlc(Guid id);
  44. /// <summary>
  45. /// 异步获取指定 ID 的 PLC 实例。
  46. /// </summary>
  47. /// <param name="id">PLC 唯一标识。</param>
  48. /// <returns>对应的 <see cref="IPlc"/> 实例的任务。</returns>
  49. Task<IPlc> GetPlcAsync(Guid id);
  50. /// <summary>
  51. /// 获取当前所有已注册的 PLC(只读集合,同步)。
  52. /// </summary>
  53. /// <returns>只读的 PLC 实例集合。</returns>
  54. IReadOnlyCollection<IPlc> GetAllPlcs();
  55. /// <summary>
  56. /// 异步获取当前所有已注册的 PLC(只读集合)。
  57. /// </summary>
  58. /// <returns>只读的 PLC 实例集合的任务。</returns>
  59. Task<IReadOnlyCollection<IPlc>> GetAllPlcsAsync();
  60. /// <summary>
  61. /// 尝试根据 ID 获取 PLC(同步),若存在则返回 true 并通过 out 参数返回实例。
  62. /// </summary>
  63. /// <param name="id">PLC 唯一标识。</param>
  64. /// <param name="plc">输出的 PLC 实例(若找到)。</param>
  65. /// <returns>是否找到。</returns>
  66. bool TryGetPlc(Guid id, out IPlc plc);
  67. /// <summary>
  68. /// 尝试根据 ID 异步获取 PLC,返回是否找到及实例的元组。
  69. /// </summary>
  70. /// <param name="id">PLC 唯一标识。</param>
  71. /// <returns>包含是否找到与实例的元组。</returns>
  72. Task<(bool found, IPlc plc)> TryGetPlcAsync(Guid id);
  73. /// <summary>
  74. /// 判断是否包含指定 ID 的 PLC(同步)。
  75. /// </summary>
  76. /// <param name="id">PLC 唯一标识。</param>
  77. /// <returns>是否包含。</returns>
  78. bool ContainsPlc(Guid id);
  79. /// <summary>
  80. /// 判断是否包含指定 ID 的 PLC(异步)。
  81. /// </summary>
  82. /// <param name="id">PLC 唯一标识。</param>
  83. /// <returns>是否包含的任务。</returns>
  84. Task<bool> ContainsPlcAsync(Guid id);
  85. /// <summary>
  86. /// 移除指定 ID 的 PLC(同步),并释放其资源。
  87. /// </summary>
  88. /// <param name="id">PLC 唯一标识。</param>
  89. /// <returns>移除是否成功。</returns>
  90. bool RemovePlc(Guid id);
  91. /// <summary>
  92. /// 异步移除指定 ID 的 PLC,并释放其资源。
  93. /// </summary>
  94. /// <param name="id">PLC 唯一标识。</param>
  95. /// <returns>移除是否成功的任务。</returns>
  96. Task<bool> RemovePlcAsync(Guid id);
  97. /// <summary>
  98. /// 移除所有已注册的 PLC(同步),并释放相关资源。
  99. /// </summary>
  100. /// <returns>是否全部成功移除;若部分失败则返回 false。</returns>
  101. bool RemoveAllPlcs();
  102. /// <summary>
  103. /// 异步移除所有已注册的 PLC,并释放相关资源。
  104. /// </summary>
  105. /// <returns>是否全部成功移除的任务;若部分失败则返回 false。</returns>
  106. Task<bool> RemoveAllPlcsAsync();
  107. /// <summary>
  108. /// 异步注销指定的 PLC(例如注销事件、断开连接等),不一定会立即从集合中移除,具体行为由实现决定。
  109. /// </summary>
  110. /// <param name="id">PLC 唯一标识。</param>
  111. /// <returns>任务。</returns>
  112. Task UnRegisterPlcAsync(Guid id);
  113. /// <summary>
  114. /// 同步注销指定的 PLC(例如注销事件、断开连接等),不一定会立即从集合中移除,具体行为由实现决定。
  115. /// </summary>
  116. /// <param name="id">PLC 唯一标识。</param>
  117. void UnRegisterPlc(Guid id);
  118. /// <summary>
  119. /// 根据 PLC 编号获取 PLC 实例(同步)。
  120. /// </summary>
  121. /// <param name="number">PLC 编号。</param>
  122. /// <returns>对应的 <see cref="IPlc"/> 实例。</returns>
  123. IPlc GetPlcByNumber(int number);
  124. /// <summary>
  125. /// 根据 PLC 编号异步获取 PLC 实例。
  126. /// </summary>
  127. /// <param name="number">PLC 编号。</param>
  128. /// <returns>对应的 <see cref="IPlc"/> 实例的任务。</returns>
  129. Task<IPlc> GetPlcByNumberAsync(int number);
  130. /// <summary>
  131. /// 根据 PLC 编号异步注销 PLC(例如注销事件、断开连接等)。
  132. /// </summary>
  133. /// <param name="number">PLC 编号。</param>
  134. /// <returns>任务。</returns>
  135. Task UnRegisterPlcByNumberAsync(int number);
  136. /// <summary>
  137. /// 根据 PLC 编号同步注销 PLC(例如注销事件、断开连接等)。
  138. /// </summary>
  139. /// <param name="number">PLC 编号。</param>
  140. void UnRegisterPlcByNumber(int number);
  141. /// <summary>
  142. /// 更新PLC编号
  143. /// </summary>
  144. /// <param name="id"></param>
  145. /// <param name="newNumber"></param>
  146. void UpdatePlcNumber(Guid id, int newNumber);
  147. }
  148. }