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.

Program.cs 5.0KB

11 maanden geleden
11 maanden geleden
11 maanden geleden
11 maanden geleden
11 maanden geleden
11 maanden geleden
11 maanden geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using DotNetty.Codecs;
  2. using DotNetty.Transport.Bootstrapping;
  3. using DotNetty.Transport.Channels;
  4. using DotNetty.Transport.Channels.Sockets;
  5. using Microsoft.Extensions.Configuration;
  6. using Microsoft.Extensions.DependencyInjection;
  7. using Microsoft.Extensions.Hosting;
  8. using NearCardAttendance.Common;
  9. using NearCardAttendance.Common.helper;
  10. using NearCardAttendance.Service.TcpServer.Handler;
  11. using NearCardAttendance.Service.TcpServer.Mapper;
  12. using NearCardAttendance.TcpServer.Config;
  13. using Serilog;
  14. using NearCardAttendance.Model;
  15. using TelpoDataService.Util.Clients;
  16. using System.Text;
  17. using NearCardAttendance.Service.MessageQueue.Kafka;
  18. using NearCardAttendance.Service.MessageQueue;
  19. namespace NearCardAttendance.TcpServer
  20. {
  21. internal class Program
  22. {
  23. static void Main(string[] args)
  24. {
  25. var config = new ConfigurationBuilder()
  26. .SetBasePath(Directory.GetCurrentDirectory())
  27. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  28. .Build();
  29. Log.Logger = new LoggerConfiguration()
  30. .ReadFrom.Configuration(config).Enrich.WithThreadInfo()
  31. .Filter.ByExcluding(logEvent => logEvent.Level == Serilog.Events.LogEventLevel.Verbose) // 过滤掉VRB级别的日志
  32. .CreateLogger();
  33. try
  34. {
  35. Log.Information("Starting up");
  36. CreateHostBuilder(args).Build().Run();
  37. }
  38. catch (Exception ex)
  39. {
  40. Log.Fatal(ex, "Application start-up failed");
  41. }
  42. finally
  43. {
  44. Log.CloseAndFlush();
  45. }
  46. }
  47. public static IHostBuilder CreateHostBuilder(string[] args) =>
  48. Host.CreateDefaultBuilder(args)
  49. .UseSerilog()
  50. .ConfigureServices((hostContext, services) => {
  51. var configuration = hostContext.Configuration;
  52. services.AddTelpoDataServices(opt =>
  53. {
  54. opt.TelpoDataUrl = configuration["ServiceConfig:TelpoDataUrl"];
  55. });
  56. #region 配置信息
  57. services
  58. .Configure<ServiceConfig>(configuration.GetSection("ServiceConfig"))
  59. ;
  60. #endregion
  61. #region Http请求
  62. services
  63. .AddSingleton<HttpHelper>()
  64. .AddHttpClient(Consts.DEFAULT_HTTPCLIENT_NAME, c =>
  65. {
  66. c.Timeout = TimeSpan.FromSeconds(10); //超时限制
  67. c.DefaultRequestHeaders.Add("Accept", "application/json");
  68. })
  69. ;
  70. #endregion
  71. #region TcpService
  72. services
  73. .AddSingleton<ServerBootstrap>(provider =>
  74. {
  75. var bossGroup = new MultithreadEventLoopGroup();
  76. var workerGroup = new MultithreadEventLoopGroup();
  77. var bootstrap = new ServerBootstrap();
  78. bootstrap.Group(bossGroup, workerGroup)
  79. .Channel<TcpServerSocketChannel>()
  80. .Option(ChannelOption.SoBacklog, 100)
  81. .ChildOption(ChannelOption.TcpNodelay, true) // 低延迟
  82. .ChildHandler(new ActionChannelInitializer<IChannel>(channel =>
  83. {
  84. // var handler = provider.GetRequiredService<ProtocolHandler>();
  85. // var handler = provider.GetRequiredService<SomeServerHandler>();
  86. var pipeline = channel.Pipeline;
  87. pipeline.AddLast(new StringEncoder(Encoding.ASCII));
  88. pipeline.AddLast(
  89. provider.GetRequiredService<ProtocolHandler>(),
  90. provider.GetRequiredService<RegisterHandler>()
  91. //provider.GetRequiredService<HeartBeatHandler>(),
  92. //provider.GetRequiredService<PassThroughHandler>()
  93. ); // Add the injected handler
  94. }));
  95. return bootstrap;
  96. })
  97. .AddSingleton<TcpClientsManager>()
  98. .AddSingleton<ScheduleResendManager>()
  99. .AddTransient<ProtocolHandler>()
  100. .AddTransient<RegisterHandler>()
  101. //.AddTransient<HeartBeatHandler>()
  102. //.AddTransient<PassThroughHandler>()
  103. .AddHostedService<Server>()
  104. ;
  105. #endregion
  106. services.AddSingleton<MqProcessLogic>();
  107. services.AddSingleton<KafkaService>();
  108. });
  109. }
  110. }