PublishResultsTimer.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System.Timers;
  2. using Microsoft.AspNetCore.SignalR;
  3. using Microsoft.Extensions.Configuration;
  4. using Result.Data;
  5. using Result.Hubs;
  6. namespace Result.Timers
  7. {
  8. public class PublishResultsTimer
  9. {
  10. private readonly IHubContext<ResultsHub> _hubContext;
  11. private readonly IResultData _resultData;
  12. private readonly Timer _timer;
  13. public PublishResultsTimer(IHubContext<ResultsHub> hubContext, IResultData resultData, IConfiguration configuration)
  14. {
  15. _hubContext = hubContext;
  16. _resultData = resultData;
  17. var publishMilliseconds = configuration.GetValue<int>("ResultsTimer:PublishMilliseconds");
  18. _timer = new Timer(publishMilliseconds)
  19. {
  20. Enabled = false
  21. };
  22. _timer.Elapsed += PublishResults;
  23. }
  24. public void Start()
  25. {
  26. if (!_timer.Enabled)
  27. {
  28. _timer.Start();
  29. }
  30. }
  31. private void PublishResults(object sender, ElapsedEventArgs e)
  32. {
  33. var model = _resultData.GetResults();
  34. _hubContext.Clients.All.SendAsync("UpdateResults", model);
  35. }
  36. }
  37. }