MockAutoTankGaugeController.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using Edge.Core.IndustryStandardInterface.ATG;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. namespace Edge.WebHost
  7. {
  8. public class MockAutoTankGaugeController : IAutoTankGaugeController
  9. {
  10. public string MetaConfigName => "I'm a mock controller";
  11. public int DeviceId => 999;
  12. //private List<Tank> tanks;
  13. public IEnumerable<Tank> Tanks { get; }
  14. public SystemUnit SystemUnit { get; }
  15. public AtgState State => throw new NotImplementedException();
  16. public event EventHandler<AtgStateChangeEventArg> OnStateChange;
  17. public event EventHandler<AtgAlarmEventArg> OnAlarm;
  18. public MockAutoTankGaugeController(List<Tank> tanks, SystemUnit systemUnit)
  19. {
  20. this.Tanks = tanks;
  21. this.SystemUnit = systemUnit;
  22. }
  23. public void FireOnStateChangeEvent(AtgState state)
  24. {
  25. var safe = this.OnStateChange;
  26. safe?.Invoke(this, new AtgStateChangeEventArg(state,""));
  27. }
  28. public Task<IEnumerable<Delivery>> GetTankDeliveryAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null)
  29. {
  30. //if (tankNumber.HasValue)
  31. // if (!this.Tanks.Select(t => t.TankNumber).Contains((byte)tankNumber)) throw new ArgumentException("Controller does not have such a tank with number: " + tankNumber.Value);
  32. if (tankNumber == null)
  33. {
  34. return Task.FromResult(this.Tanks.Select(t => new Edge.Core.IndustryStandardInterface.ATG.Delivery()
  35. {
  36. TankNumber = t.TankNumber,
  37. StartingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 0, 0)),
  38. EndingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 10, 0)),
  39. }));
  40. }
  41. else
  42. {
  43. return Task.FromResult(this.Tanks.Where(t => t.TankNumber == tankNumber)
  44. .Select(t => new Edge.Core.IndustryStandardInterface.ATG.Delivery()
  45. {
  46. TankNumber = t.TankNumber,
  47. StartingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 0, 0)),
  48. EndingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 10, 0)),
  49. }));
  50. }
  51. }
  52. public async Task<TankReading> GetTankReadingAsync(int tankNumber)
  53. {
  54. return new TankReading()
  55. {
  56. Height = 1800 - new Random().Next(100, 1000),
  57. Water = 0 + new Random().Next(10, 500),
  58. Temperature = 20 + new Random().Next(1, 30),
  59. Volume = 4000 + new Random().Next(100, 2000),
  60. WaterVolume = 100 + new Random().Next(2, 200),
  61. };
  62. }
  63. public Task<IEnumerable<Inventory>> GetTankInventoryAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null)
  64. {
  65. throw new NotImplementedException();
  66. }
  67. public Task<IEnumerable<Alarm>> GetTankAlarmAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null)
  68. {
  69. throw new NotImplementedException();
  70. }
  71. public Task<IEnumerable<TankReading>> GetTanksReadingAsync()
  72. {
  73. throw new NotImplementedException();
  74. }
  75. //public async Task<IEnumerable<TankReadingDto>> GetTankReadingAsync(int? tankNumber)
  76. //{
  77. // List<TankReadingDto> tankReadings = new List<TankReadingDto>();
  78. // foreach (var tank in this.Tanks)
  79. // {
  80. // var reading = new TankReadingDto
  81. // {
  82. // tankNumber = tank.TankNumber,
  83. // Height = 1800 - new Random().Next(100, 1000),
  84. // Water = 0 + new Random().Next(10, 500),
  85. // Temperature = 20 + new Random().Next(1, 30),
  86. // Volume = 4000 + new Random().Next(100, 2000),
  87. // WaterVolume = 100 + new Random().Next(2, 200),
  88. // };
  89. // tankReadings.Add(reading);
  90. // };
  91. // if (tankNumber.HasValue)
  92. // return tankReadings.Where(r => r.tankNumber == tankNumber.Value);
  93. // else
  94. // return tankReadings;
  95. //}
  96. }
  97. }