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);
}
}
}