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.
 
 
 

83 lines
3.4 KiB

  1. using JT808.Gateway.CleintBenchmark.Configs;
  2. using JT808.Gateway.Client;
  3. using JT808.Protocol.MessageBody;
  4. using Microsoft.Extensions.Hosting;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.Extensions.Options;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. namespace JT808.Gateway.CleintBenchmark.Services
  13. {
  14. public class CleintBenchmarkHostedService : IHostedService
  15. {
  16. private readonly ClientBenchmarkOptions clientBenchmarkOptions;
  17. private readonly ILogger logger;
  18. private readonly IJT808TcpClientFactory jT808TcpClientFactory;
  19. private CancellationTokenSource cts=new CancellationTokenSource();
  20. private TaskFactory taskFactory;
  21. public CleintBenchmarkHostedService(
  22. ILoggerFactory loggerFactory,
  23. IJT808TcpClientFactory jT808TcpClientFactory,
  24. IOptions<ClientBenchmarkOptions> clientBenchmarkOptionsAccessor)
  25. {
  26. this.jT808TcpClientFactory = jT808TcpClientFactory;
  27. clientBenchmarkOptions = clientBenchmarkOptionsAccessor.Value;
  28. logger = loggerFactory.CreateLogger("CleintBenchmarkHostedService");
  29. taskFactory = new TaskFactory();
  30. }
  31. public Task StartAsync(CancellationToken cancellationToken)
  32. {
  33. logger.LogInformation("StartAsync...");
  34. ThreadPool.GetMinThreads(out var minWorkerThreads, out var minCompletionPortThreads);
  35. ThreadPool.GetMaxThreads(out var maxWorkerThreads, out var maxCompletionPortThreads);
  36. logger.LogInformation($"GetMinThreads:{minWorkerThreads}-{minCompletionPortThreads}");
  37. logger.LogInformation($"GetMaxThreads:{maxWorkerThreads}-{maxCompletionPortThreads}");
  38. //ThreadPool.SetMaxThreads(20, 20);
  39. //ThreadPool.GetMaxThreads(out var setMaxWorkerThreads, out var setMaxCompletionPortThreads);
  40. //logger.LogInformation($"SetMaxThreads:{setMaxWorkerThreads}-{setMaxCompletionPortThreads}");
  41. for (int i=0;i< clientBenchmarkOptions.DeviceCount; i++)
  42. {
  43. taskFactory.StartNew((item) =>
  44. {
  45. var client = jT808TcpClientFactory.Create(new DeviceConfig(((int)item).ToString(), clientBenchmarkOptions.IP, clientBenchmarkOptions.Port));
  46. int lat = new Random(1000).Next(100000, 180000);
  47. int Lng = new Random(1000).Next(100000, 180000);
  48. while (!cts.IsCancellationRequested)
  49. {
  50. client.Send(new JT808_0x0200()
  51. {
  52. Lat = lat,
  53. Lng = Lng,
  54. GPSTime = DateTime.Now,
  55. Speed = 50,
  56. Direction = 30,
  57. AlarmFlag = 5,
  58. Altitude = 50,
  59. StatusFlag = 10
  60. });
  61. Thread.Sleep(clientBenchmarkOptions.Interval);
  62. }
  63. }, i,cts.Token);
  64. }
  65. return Task.CompletedTask;
  66. }
  67. public Task StopAsync(CancellationToken cancellationToken)
  68. {
  69. cts.Cancel();
  70. logger.LogInformation("StopAsync...");
  71. return Task.CompletedTask;
  72. }
  73. }
  74. }