You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

65 line
2.3 KiB

  1. using JT1078.Gateway.Configurations;
  2. using JT1078.Gateway.Sessions;
  3. using Microsoft.Extensions.Hosting;
  4. using Microsoft.Extensions.Logging;
  5. using Microsoft.Extensions.Options;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace JT1078.Gateway.Jobs
  12. {
  13. internal class JT1078UdpReceiveTimeoutJob : BackgroundService
  14. {
  15. private readonly ILogger Logger;
  16. private readonly JT1078SessionManager SessionManager;
  17. private readonly IOptionsMonitor<JT1078Configuration> Configuration;
  18. public JT1078UdpReceiveTimeoutJob(
  19. IOptionsMonitor<JT1078Configuration> jT1078ConfigurationAccessor,
  20. ILoggerFactory loggerFactory,
  21. JT1078SessionManager jT1078SessionManager
  22. )
  23. {
  24. SessionManager = jT1078SessionManager;
  25. Logger = loggerFactory.CreateLogger<JT1078UdpReceiveTimeoutJob>();
  26. Configuration = jT1078ConfigurationAccessor;
  27. }
  28. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  29. {
  30. while (!stoppingToken.IsCancellationRequested)
  31. {
  32. try
  33. {
  34. List<string> sessionIds = new List<string>();
  35. foreach (var item in SessionManager.GetUdpAll())
  36. {
  37. if (item.ActiveTime.AddSeconds(Configuration.CurrentValue.UdpReaderIdleTimeSeconds) < DateTime.Now)
  38. {
  39. sessionIds.Add(item.SessionID);
  40. }
  41. }
  42. foreach (var item in sessionIds)
  43. {
  44. SessionManager.RemoveBySessionId(item);
  45. }
  46. Logger.LogInformation($"[Check Receive Timeout]");
  47. Logger.LogInformation($"[Session Online Count]:{SessionManager.UdpSessionCount}");
  48. }
  49. catch (Exception ex)
  50. {
  51. Logger.LogError(ex, $"[Receive Timeout]");
  52. }
  53. finally
  54. {
  55. await Task.Delay(TimeSpan.FromSeconds(Configuration.CurrentValue.UdpReceiveTimeoutCheckTimeSeconds), stoppingToken);
  56. }
  57. }
  58. }
  59. }
  60. }