PublishResultsTimer.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.Timers;
  3. using Microsoft.AspNetCore.SignalR;
  4. using Microsoft.Extensions.Configuration;
  5. using Result.Hubs;
  6. using Result.Models;
  7. namespace Result.Timers
  8. {
  9. public class PublishResultsTimer
  10. {
  11. private readonly IHubContext<ResultsHub> _hubContext;
  12. private readonly Timer _timer;
  13. //TODO- temp
  14. private static Random _Random = new Random();
  15. public PublishResultsTimer(IHubContext<ResultsHub> hubContext, IConfiguration configuration)
  16. {
  17. _hubContext = hubContext;
  18. var publishMilliseconds = configuration.GetValue<int>("ResultsTimer:PublishMilliseconds");
  19. _timer = new Timer(publishMilliseconds)
  20. {
  21. Enabled = false
  22. };
  23. _timer.Elapsed += PublishResults;
  24. }
  25. public void Start()
  26. {
  27. if (!_timer.Enabled)
  28. {
  29. _timer.Start();
  30. }
  31. }
  32. private void PublishResults(object sender, ElapsedEventArgs e)
  33. {
  34. var model = new ResultsModel
  35. {
  36. OptionA = _Random.Next(0, 100),
  37. OptionB = _Random.Next(0, 100)
  38. };
  39. model.VoteCount = model.OptionA + model.OptionB;
  40. _hubContext.Clients.All.SendAsync("UpdateResults", model);
  41. }
  42. }
  43. }