ILightManagerService.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using TeamAAS_VP.Core.Lights;
  7. using TeamAAS_VP.Models;
  8. using TeamAAS_VP.Models.Lights;
  9. namespace TeamAAS_VP.Interfaces
  10. {
  11. /// <summary>
  12. /// 管理整套灯控器与全局通道的服务接口。
  13. /// 提供控制器注册/注销、全局通道亮度与开关操作、连接管理以及配置持久化等功能。
  14. /// </summary>
  15. public interface ILightManagerService
  16. {
  17. /// <summary>
  18. /// 当新的灯控制器被注册并添加到管理器时触发。
  19. /// 事件参数包含被添加的控制器信息与对应 Id。
  20. /// </summary>
  21. event EventHandler<LightControllerEventArgs> ControllerAdded;
  22. /// <summary>
  23. /// 当已有的灯控制器被从管理器中移除时触发。
  24. /// 事件参数包含被移除的控制器信息与对应 Id。
  25. /// </summary>
  26. event EventHandler<LightControllerEventArgs> ControllerRemoved;
  27. /// <summary>
  28. /// 当任意全局通道的状态(例如亮度或开关状态)发生变化时触发。
  29. /// 事件参数包含受影响的通道信息与新状态。
  30. /// </summary>
  31. event EventHandler<LightChannelEventArgs> ChannelStatusChanged;
  32. /// <summary>
  33. /// 当前已注册的控制器集合(只读)。
  34. /// 键为控制器 Id,值为对应的 <see cref="ILightController"/> 实例。
  35. /// </summary>
  36. IReadOnlyDictionary<int, ILightController> Controllers { get; }
  37. /// <summary>
  38. /// 全局通道集合(只读)。
  39. /// 键为全局通道 Id,值为对应的 <see cref="ILightChannel"/> 实例。
  40. /// </summary>
  41. IReadOnlyDictionary<int, ILightChannel> GlobalChannels { get; }
  42. /// <summary>
  43. /// 异步注册并初始化一个新的灯控制器。
  44. /// </summary>
  45. /// <param name="id">要注册的控制器 Id,必须唯一。</param>
  46. /// <param name="configuration">该控制器的配置数据。</param>
  47. /// <returns>
  48. /// 返回已注册并初始化的 <see cref="ILightController"/> 实例。
  49. /// 如果注册失败,返回的任务可能抛出异常或返回 null(由具体实现决定)。
  50. /// </returns>
  51. Task<ILightController> RegisterControllerAsync(int id, LightControllerConfig configuration);
  52. /// <summary>
  53. /// 异步注销并移除指定 Id 的控制器。
  54. /// </summary>
  55. /// <param name="controllerId">要注销的控制器 Id。</param>
  56. /// <returns>操作成功返回 true;如果找不到控制器或注销失败则返回 false。</returns>
  57. Task<bool> UnregisterControllerAsync(int controllerId);
  58. /// <summary>
  59. /// 为指定的全局通道设置亮度值。
  60. /// </summary>
  61. /// <param name="globalChannelId">目标全局通道 Id。</param>
  62. /// <param name="brightness">亮度值,通常在 0 到 100 范围内(具体范围请参照实现)。</param>
  63. /// <returns>操作成功返回 true,否则返回 false。</returns>
  64. Task<bool> SetGlobalChannelBrightnessAsync(int globalChannelId, int brightness);
  65. /// <summary>
  66. /// 获取指定全局通道的亮度值。
  67. /// </summary>
  68. /// <param name="globalChannelId">目标全局通道 Id。</param>
  69. /// <param name="brightness">亮度值,通常在 0 到 100 范围内(具体范围请参照实现)。</param>
  70. /// <returns>操作成功返回 true,否则返回 false。</returns>
  71. Task<int> GetGlobalChannelBrightnessAsync(int globalChannelId);
  72. /// <summary>
  73. /// 打开指定的全局通道(将其置于开启状态)。
  74. /// </summary>
  75. /// <param name="globalChannelId">目标全局通道 Id。</param>
  76. /// <returns>操作成功返回 true,否则返回 false。</returns>
  77. Task<bool> TurnOnGlobalChannelAsync(int globalChannelId);
  78. /// <summary>
  79. /// 关闭指定的全局通道(将其置于关闭状态)。
  80. /// </summary>
  81. /// <param name="globalChannelId">目标全局通道 Id。</param>
  82. /// <returns>操作成功返回 true,否则返回 false。</returns>
  83. Task<bool> TurnOffGlobalChannelAsync(int globalChannelId);
  84. /// <summary>
  85. /// 尝试连接所有已注册的控制器并建立通信通道。
  86. /// </summary>
  87. /// <returns>所有连接成功则返回 true;若有失败则返回 false(或由实现抛出异常以提供详细错误)。</returns>
  88. Task<bool> ConnectAllAsync();
  89. /// <summary>
  90. /// 断开所有已连接的控制器并释放相关资源。
  91. /// </summary>
  92. /// <returns>所有断开成功则返回 true;若有失败则返回 false(或由实现抛出异常以提供详细错误)。returns>
  93. Task<bool> DisconnectAllAsync();
  94. /// <summary>
  95. /// 将当前管理器的配置(包括控制器和全局通道映射)保存到指定文件路径。
  96. /// </summary>
  97. /// <param name="filePath">目标文件路径,支持绝对或相对路径。</param>
  98. /// <returns>完成保存操作的任务。实现可能在 I/O 错误时抛出异常。</returns>
  99. Task SaveConfigurationAsync(string filePath);
  100. /// <summary>
  101. /// 从指定文件路径加载管理器配置并应用到当前实例。
  102. /// </summary>
  103. /// <param name="filePath">包含配置的文件路径。</param>
  104. /// <returns>完成加载操作的任务。实现可能在文件不存在或格式不正确时抛出异常。</returns>
  105. Task LoadConfigurationAsync(string filePath);
  106. }
  107. }