您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

60 行
2.1 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 JT808TcpReceiveTimeoutHostedService : BackgroundService
  14. {
  15. private readonly ILogger Logger;
  16. private readonly JT808SessionManager SessionManager;
  17. private readonly JT808Configuration Configuration;
  18. public JT808TcpReceiveTimeoutHostedService(
  19. IOptions<JT808Configuration> jT808ConfigurationAccessor,
  20. ILoggerFactory loggerFactory,
  21. JT808SessionManager jT808SessionManager
  22. )
  23. {
  24. SessionManager = jT808SessionManager;
  25. Logger = loggerFactory.CreateLogger("JT808TcpReceiveTimeout");
  26. Configuration = jT808ConfigurationAccessor.Value;
  27. }
  28. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  29. {
  30. while (!stoppingToken.IsCancellationRequested)
  31. {
  32. try
  33. {
  34. foreach (var item in SessionManager.GetTcpAll())
  35. {
  36. if (item.ActiveTime.AddSeconds(Configuration.TcpReaderIdleTimeSeconds) < DateTime.Now)
  37. {
  38. item.ReceiveTimeout.Cancel();
  39. }
  40. }
  41. Logger.LogInformation($"[Check Receive Timeout]");
  42. Logger.LogInformation($"[Session Online Count]:{SessionManager.TcpSessionCount}");
  43. }
  44. catch (Exception ex)
  45. {
  46. Logger.LogError(ex, $"[Receive Timeout]");
  47. }
  48. finally
  49. {
  50. await Task.Delay(TimeSpan.FromSeconds(Configuration.TcpReceiveTimeoutCheckTimeSeconds), stoppingToken);
  51. }
  52. }
  53. }
  54. }
  55. }