namespace MinicsConsole.Helper.RawDataFilter; public class Mini8Provider : IMini8Provider, IMini8DataFilter, IDisposable { public Mini8Provider(byte mini8Index, ILog log, BasicInfo basicInfo, IDictionary channels, Mini8DataDispatcher dataDispatcher) { _log = log; _channels = channels; _mini8Index = mini8Index; _dataDispatcher = dataDispatcher; _Mini8DataQueue = new(); _DataBaseHelper = new(mini8Index, log); _ApplyAutoTurnLayer = new(mini8Index, log); _DataRecorderLayer = new(mini8Index, log, dataDispatcher); _AlarmLayer = new(mini8Index, log, basicInfo, dataDispatcher) { DataBaseHelper = _DataBaseHelper }; _DataRecorderLayer.DataBaseHelper = _DataBaseHelper; _ = (IMini8DataFilter)this >> _Mini8DataQueue >> _DataRecorderLayer >> _ApplyAutoTurnLayer >> _AlarmLayer; } private readonly ILog _log; private readonly byte _mini8Index; private readonly Mini8DataDispatcher _dataDispatcher; private readonly IDictionary _channels; private readonly ChannelDataBaseHelper _DataBaseHelper; private readonly AlarmHelperLayer _AlarmLayer; private readonly Mini8DataQueue _Mini8DataQueue; private readonly Mini8DataRecorderLayer _DataRecorderLayer; private readonly AutoApplyAutoTurnLayer _ApplyAutoTurnLayer; public bool IsConnect { get; private set; } = false; public IDataSender? NextSender { get; set; } public IORM ORM { set { _DataBaseHelper.SetORM(value); } } public IMini8Communicator Mini8Communicator { set { _ApplyAutoTurnLayer.Sender = value; } } void IMini8Provider.ChannelInfoNotify(byte channel, Mini8Output mini8Output) { if (!_channels.TryGetValue(channel, out ChannelData? channelData) || channelData is null) return; NextSender?.Send(mini8Output, channelData, default); } void IMini8ConnectNotify.OnConnected(string IP, int port) { IsConnect = true; _log.Info($"{IP}:{port} Connected"); _dataDispatcher.Mini8Connect(_mini8Index); } void IMini8ConnectNotify.OnDisconnected(string IP, int port) { IsConnect = false; _log.Warning($"{IP}:{port} Disconnected"); _dataDispatcher.Mini8Disconnect(_mini8Index); } public void Dispose() { _Mini8DataQueue?.Dispose(); } }