using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TeamAAS_VP.Core.Lights { /// /// 光源控制器基类 /// public abstract class LightControllerBase : ILightController { public int Id { get; } public string Name { get; set; } public LightModel Model { get; } public int ChannelCount { get; } public bool IsConnected { get; protected set; } protected List ChannelsInternal { get; } public IReadOnlyList Channels => ChannelsInternal; protected LightControllerBase(int id,int channelCount) { Id = id; ChannelCount = channelCount; ChannelsInternal = new List(); InitializeChannels(); } private void InitializeChannels() { for (int i = 0; i < ChannelCount; i++) { ChannelsInternal.Add(CreateChannel(i)); } } protected abstract ILightChannel CreateChannel(int index); public abstract Task ConnectAsync(); public abstract Task DisconnectAsync(); public abstract Task InitializeAsync(); public abstract Task TurnOnAllAsync(); public abstract Task TurnOffAllAsync(); protected virtual void Dispose(bool disposing) { if (disposing) { foreach (var channel in ChannelsInternal) { (channel as IDisposable)?.Dispose(); } ChannelsInternal.Clear(); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } }