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.
 
 
 

96 lines
5.3 KiB

  1. using JT808.DotNetty.Abstractions;
  2. using JT808.DotNetty.Core.Configurations;
  3. using JT808.DotNetty.Core.Converters;
  4. using JT808.DotNetty.Core.Impls;
  5. using JT808.DotNetty.Core.Interfaces;
  6. using JT808.DotNetty.Core.Services;
  7. using JT808.DotNetty.Internal;
  8. using JT808.Protocol;
  9. using Microsoft.Extensions.Configuration;
  10. using Microsoft.Extensions.DependencyInjection;
  11. using Microsoft.Extensions.DependencyInjection.Extensions;
  12. using Microsoft.Extensions.Options;
  13. using Newtonsoft.Json;
  14. using System;
  15. using System.Runtime.CompilerServices;
  16. [assembly: InternalsVisibleTo("JT808.DotNetty.Core.Test")]
  17. [assembly: InternalsVisibleTo("JT808.DotNetty.Tcp.Test")]
  18. [assembly: InternalsVisibleTo("JT808.DotNetty.Udp.Test")]
  19. [assembly: InternalsVisibleTo("JT808.DotNetty.WebApi.Test")]
  20. [assembly: InternalsVisibleTo("JT808.DotNetty.Tcp")]
  21. [assembly: InternalsVisibleTo("JT808.DotNetty.Udp")]
  22. [assembly: InternalsVisibleTo("JT808.DotNetty.WebApi")]
  23. namespace JT808.DotNetty.Core
  24. {
  25. public static class JT808CoreDotnettyExtensions
  26. {
  27. static JT808CoreDotnettyExtensions()
  28. {
  29. JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
  30. {
  31. Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings();
  32. //日期类型默认格式化处理
  33. settings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
  34. settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
  35. //空值处理
  36. settings.NullValueHandling = NullValueHandling.Ignore;
  37. settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
  38. settings.Converters.Add(new JsonIPAddressConverter());
  39. settings.Converters.Add(new JsonIPEndPointConverter());
  40. settings.Converters.Add(new ByteArrayHexConverter());
  41. return settings;
  42. });
  43. }
  44. public static IJT808NettyBuilder AddJT808NettyCore(this IJT808Builder jt808Builder, IConfiguration configuration, Newtonsoft.Json.JsonSerializerSettings settings=null)
  45. {
  46. if (settings != null)
  47. {
  48. JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
  49. {
  50. settings.Converters.Add(new JsonIPAddressConverter());
  51. settings.Converters.Add(new JsonIPEndPointConverter());
  52. settings.Converters.Add(new ByteArrayHexConverter());
  53. settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
  54. return settings;
  55. });
  56. }
  57. IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder);
  58. nettyBuilder.JT808Builder.Services.Configure<JT808Configuration>(configuration.GetSection("JT808Configuration"));
  59. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SessionPublishing, JT808SessionPublishingEmptyImpl>();
  60. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DownlinkPacket, JT808DownlinkPacketEmptyImpl>();
  61. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UplinkPacket, JT808UplinkPacketEmptyImpl>();
  62. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherEmptyImpl>();
  63. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>();
  64. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TrafficServiceFactory>();
  65. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808SimpleSystemCollectService>();
  66. return nettyBuilder;
  67. }
  68. public static IJT808NettyBuilder AddJT808NettyCore(this IJT808Builder jt808Builder, Action<JT808Configuration> jt808Options, Newtonsoft.Json.JsonSerializerSettings settings = null)
  69. {
  70. if (settings != null)
  71. {
  72. JsonConvert.DefaultSettings = new Func<JsonSerializerSettings>(() =>
  73. {
  74. settings.Converters.Add(new JsonIPAddressConverter());
  75. settings.Converters.Add(new JsonIPEndPointConverter());
  76. settings.Converters.Add(new ByteArrayHexConverter());
  77. settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
  78. return settings;
  79. });
  80. }
  81. IJT808NettyBuilder nettyBuilder = new JT808NettyBuilderDefault(jt808Builder);
  82. nettyBuilder.JT808Builder.Services.Configure(jt808Options);
  83. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SessionPublishing, JT808SessionPublishingEmptyImpl>();
  84. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808DownlinkPacket, JT808DownlinkPacketEmptyImpl>();
  85. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808UplinkPacket, JT808UplinkPacketEmptyImpl>();
  86. nettyBuilder.JT808Builder.Services.TryAddSingleton<IJT808SourcePackageDispatcher, JT808SourcePackageDispatcherEmptyImpl>();
  87. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808AtomicCounterServiceFactory>();
  88. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808TrafficServiceFactory>();
  89. nettyBuilder.JT808Builder.Services.TryAddSingleton<JT808SimpleSystemCollectService>();
  90. return nettyBuilder;
  91. }
  92. }
  93. }