MockAutoTankGaugeController.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 Applications.UniversalApi_WebConsole_App
  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 async Task<IEnumerable<TankReadingDto>> GetTankReadingAsync(int? tankNumber)
  72. //{
  73. // List<TankReadingDto> tankReadings = new List<TankReadingDto>();
  74. // foreach (var tank in this.Tanks)
  75. // {
  76. // var reading = new TankReadingDto
  77. // {
  78. // tankNumber = tank.TankNumber,
  79. // Height = 1800 - new Random().Next(100, 1000),
  80. // Water = 0 + new Random().Next(10, 500),
  81. // Temperature = 20 + new Random().Next(1, 30),
  82. // Volume = 4000 + new Random().Next(100, 2000),
  83. // WaterVolume = 100 + new Random().Next(2, 200),
  84. // };
  85. // tankReadings.Add(reading);
  86. // };
  87. // if (tankNumber.HasValue)
  88. // return tankReadings.Where(r => r.tankNumber == tankNumber.Value);
  89. // else
  90. // return tankReadings;
  91. //}
  92. }
  93. }