Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

65 righe
2.3 KiB

  1. using JT808.Gateway.Abstractions.Configurations;
  2. using JT808.Gateway.Session;
  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 JT808.Gateway.Services
  12. {
  13. internal class JT808UdpReceiveTimeoutHostedService : BackgroundService
  14. {
  15. private readonly ILogger Logger;
  16. private readonly JT808SessionManager SessionManager;
  17. private readonly JT808Configuration Configuration;
  18. public JT808UdpReceiveTimeoutHostedService(
  19. IOptions<JT808Configuration> jT808ConfigurationAccessor,
  20. ILoggerFactory loggerFactory,
  21. JT808SessionManager jT808SessionManager
  22. )
  23. {
  24. SessionManager = jT808SessionManager;
  25. Logger = loggerFactory.CreateLogger("JT808UdpReceiveTimeout");
  26. Configuration = jT808ConfigurationAccessor.Value;
  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.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.UdpReceiveTimeoutCheckTimeSeconds), stoppingToken);
  56. }
  57. }
  58. }
  59. }
  60. }