Mini8Provider.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. namespace MinicsConsole.Helper.RawDataFilter;
  2. public class Mini8Provider : IMini8Provider, IMini8DataFilter, IDisposable
  3. {
  4. public Mini8Provider(byte mini8Index, ILog log, BasicInfo basicInfo, IDictionary<byte, ChannelData> channels, Mini8DataDispatcher dataDispatcher)
  5. {
  6. _log = log;
  7. _channels = channels;
  8. _mini8Index = mini8Index;
  9. _dataDispatcher = dataDispatcher;
  10. _Mini8DataQueue = new();
  11. _DataBaseHelper = new(mini8Index, log);
  12. _ApplyAutoTurnLayer = new(mini8Index, log);
  13. _DataRecorderLayer = new(mini8Index, log, dataDispatcher);
  14. _AlarmLayer = new(mini8Index, log, basicInfo, dataDispatcher)
  15. {
  16. DataBaseHelper = _DataBaseHelper
  17. };
  18. _DataRecorderLayer.DataBaseHelper = _DataBaseHelper;
  19. _ = (IMini8DataFilter)this >> _Mini8DataQueue >> _DataRecorderLayer >> _ApplyAutoTurnLayer >> _AlarmLayer;
  20. }
  21. private readonly ILog _log;
  22. private readonly byte _mini8Index;
  23. private readonly Mini8DataDispatcher _dataDispatcher;
  24. private readonly IDictionary<byte, ChannelData> _channels;
  25. private readonly ChannelDataBaseHelper _DataBaseHelper;
  26. private readonly AlarmHelperLayer _AlarmLayer;
  27. private readonly Mini8DataQueue _Mini8DataQueue;
  28. private readonly Mini8DataRecorderLayer _DataRecorderLayer;
  29. private readonly AutoApplyAutoTurnLayer _ApplyAutoTurnLayer;
  30. public bool IsConnect { get; private set; } = false;
  31. public IDataSender? NextSender { get; set; }
  32. public IORM ORM { set { _DataBaseHelper.SetORM(value); } }
  33. public IMini8Communicator Mini8Communicator { set { _ApplyAutoTurnLayer.Sender = value; } }
  34. void IMini8Provider.ChannelInfoNotify(byte channel, Mini8Output mini8Output)
  35. {
  36. if (!_channels.TryGetValue(channel, out ChannelData? channelData) || channelData is null)
  37. return;
  38. NextSender?.Send(mini8Output, channelData, default);
  39. }
  40. void IMini8ConnectNotify.OnConnected(string IP, int port)
  41. {
  42. IsConnect = true;
  43. _log.Info($"{IP}:{port} Connected");
  44. _dataDispatcher.Mini8Connect(_mini8Index);
  45. }
  46. void IMini8ConnectNotify.OnDisconnected(string IP, int port)
  47. {
  48. IsConnect = false;
  49. _log.Warning($"{IP}:{port} Disconnected");
  50. _dataDispatcher.Mini8Disconnect(_mini8Index);
  51. }
  52. public void Dispose()
  53. {
  54. _Mini8DataQueue?.Dispose();
  55. }
  56. }