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.

175 line
7.1 KiB

  1. using System.Reflection;
  2. using System.Text;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Internal;
  5. namespace JT808.Protocol.Interfaces
  6. {
  7. /// <summary>
  8. /// 全局配置基类
  9. /// </summary>
  10. public abstract class GlobalConfigBase : IJT808Config
  11. {
  12. /// <summary>
  13. ///
  14. /// </summary>
  15. protected GlobalConfigBase()
  16. {
  17. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  18. MsgSNDistributed = new DefaultMsgSNDistributedImpl();
  19. Compress = new JT808GZipCompressImpl();
  20. SplitPackageStrategy = new DefaultSplitPackageStrategyImpl();
  21. SkipCRCCode = false;
  22. MsgIdFactory = new JT808MsgIdFactory();
  23. Encoding = Encoding.GetEncoding("GBK");
  24. FormatterFactory = new JT808FormatterFactory();
  25. JT808_0X0200_Custom_Factory = new JT808_0x0200_Custom_Factory();
  26. JT808_0X0200_Factory = new JT808_0x0200_Factory();
  27. JT808_0X8103_Custom_Factory = new JT808_0x8103_Custom_Factory();
  28. JT808_0X8103_Factory = new JT808_0x8103_Factory();
  29. JT808_0x0900_Custom_Factory = new JT808_0x0900_Custom_Factory();
  30. JT808_0x8900_Custom_Factory = new JT808_0x8900_Custom_Factory();
  31. JT808_0x8500_2019_Factory = new JT808_0x8500_2019_Factory();
  32. JT808_CarDVR_Up_Factory = new JT808_CarDVR_Up_Factory();
  33. JT808_CarDVR_Down_Factory = new JT808_CarDVR_Down_Factory();
  34. JT808_0x8105_Cusotm_Factory = new JT808_0x8105_Cusotm_Factory();
  35. TerminalPhoneNoLength = 12;
  36. Trim = true;
  37. }
  38. /// <summary>
  39. /// 配置Id
  40. /// </summary>
  41. public abstract string ConfigId { get; protected set; }
  42. /// <summary>
  43. /// 分布式消息自增流水号
  44. /// </summary>
  45. public virtual IJT808MsgSNDistributed MsgSNDistributed { get; set; }
  46. /// <summary>
  47. /// 压缩
  48. /// </summary>
  49. public virtual IJT808Compress Compress { get; set; }
  50. /// <summary>
  51. /// 808分包策略
  52. /// </summary>
  53. public virtual IJT808SplitPackageStrategy SplitPackageStrategy { get; set; }
  54. /// <summary>
  55. /// 808消息Id工厂
  56. /// </summary>
  57. public virtual IJT808MsgIdFactory MsgIdFactory { get; set; }
  58. /// <summary>
  59. /// GBK编码
  60. /// </summary>
  61. public virtual Encoding Encoding { get; set; }
  62. /// <summary>
  63. /// 跳过校验码验证
  64. /// 默认false
  65. /// </summary>
  66. public virtual bool SkipCRCCode { get; set; }
  67. /// <summary>
  68. /// 序列化器工厂
  69. /// </summary>
  70. public virtual IJT808FormatterFactory FormatterFactory { get; set; }
  71. /// <summary>
  72. /// 0x0200自定义附加信息工厂
  73. /// </summary>
  74. public virtual IJT808_0x0200_Custom_Factory JT808_0X0200_Custom_Factory { get; set; }
  75. /// <summary>
  76. /// 0x0200附加信息工厂
  77. /// </summary>
  78. public virtual IJT808_0x0200_Factory JT808_0X0200_Factory { get; set; }
  79. /// <summary>
  80. /// 0x8103自定义终端参数设置自定义消息工厂
  81. /// </summary>
  82. public virtual IJT808_0x8103_Custom_Factory JT808_0X8103_Custom_Factory { get; set; }
  83. /// <summary>
  84. /// 0x8103终端参数设置消息工厂
  85. /// </summary>
  86. public virtual IJT808_0x8103_Factory JT808_0X8103_Factory { get; set; }
  87. /// <summary>
  88. /// 终端SIM卡长度
  89. /// </summary>
  90. public virtual int TerminalPhoneNoLength { get; set; }
  91. /// <summary>
  92. /// 是否去掉头尾空格
  93. /// </summary>
  94. public virtual bool Trim { get; set; }
  95. /// <summary>
  96. /// 自定义数据上行透传消息工厂
  97. /// </summary>
  98. public virtual IJT808_0x0900_Custom_Factory JT808_0x0900_Custom_Factory { get; set; }
  99. /// <summary>
  100. /// 自定义数据下行透传消息工厂
  101. /// </summary>
  102. public virtual IJT808_0x8900_Custom_Factory JT808_0x8900_Custom_Factory { get; set; }
  103. /// <summary>
  104. /// 车辆控制消息工厂
  105. /// </summary>
  106. public virtual IJT808_0x8500_2019_Factory JT808_0x8500_2019_Factory { get; set; }
  107. /// <summary>
  108. /// JT19056上行消息工厂
  109. /// </summary>
  110. public IJT808_CarDVR_Up_Factory JT808_CarDVR_Up_Factory { get; set; }
  111. /// <summary>
  112. /// JT19056下行消息工厂
  113. /// </summary>
  114. public IJT808_CarDVR_Down_Factory JT808_CarDVR_Down_Factory { get; set; }
  115. /// <summary>
  116. /// 跳过校验码验证
  117. /// 默认false
  118. /// </summary>
  119. public bool SkipCarDVRCRCCode { get; set; }
  120. /// <summary>
  121. /// 终端控制自定义参数命令工厂
  122. /// </summary>
  123. public virtual IJT808_0x8105_Cusotm_Factory JT808_0x8105_Cusotm_Factory { get; set; }
  124. /// <inheritdoc/>
  125. public virtual bool EnableAutoMerge { get; set; }
  126. /// <inheritdoc/>
  127. public double AutoMergeTimeoutSecond { get; set; } = 300;
  128. /// <inheritdoc/>
  129. public IMerger Jt808PackageMerger { get; set; } = new DefaultMerger();
  130. /// <summary>
  131. /// 外部扩展程序集注册
  132. /// </summary>
  133. /// <param name="externalAssemblies"></param>
  134. /// <returns></returns>
  135. public virtual IJT808Config Register(params Assembly[] externalAssemblies)
  136. {
  137. if (externalAssemblies != null)
  138. {
  139. foreach (var easb in externalAssemblies)
  140. {
  141. MsgIdFactory.Register(easb);
  142. FormatterFactory.Register(easb);
  143. JT808_0X0200_Factory.Register(easb);
  144. JT808_0X0200_Custom_Factory.Register(easb);
  145. JT808_0X8103_Factory.Register(easb);
  146. JT808_0X8103_Custom_Factory.Register(easb);
  147. JT808_0x0900_Custom_Factory.Register(easb);
  148. JT808_0x8900_Custom_Factory.Register(easb);
  149. JT808_0x8500_2019_Factory.Register(easb);
  150. JT808_CarDVR_Up_Factory.Register(easb);
  151. JT808_CarDVR_Down_Factory.Register(easb);
  152. JT808_0x8105_Cusotm_Factory.Register(easb);
  153. }
  154. }
  155. return this;
  156. }
  157. /// <summary>
  158. /// 替换原有消息
  159. /// </summary>
  160. /// <typeparam name="TSourceJT808Bodies"></typeparam>
  161. /// <typeparam name="TTargetJT808Bodies"></typeparam>
  162. public void ReplaceMsgId<TSourceJT808Bodies, TTargetJT808Bodies>()
  163. where TSourceJT808Bodies : JT808Bodies
  164. where TTargetJT808Bodies : JT808Bodies, new()
  165. {
  166. TTargetJT808Bodies bodies = new TTargetJT808Bodies();
  167. MsgIdFactory.Map[bodies.MsgId] = bodies;
  168. FormatterFactory.FormatterDict.Remove(typeof(TSourceJT808Bodies).GUID);
  169. FormatterFactory.FormatterDict.Add(typeof(TTargetJT808Bodies).GUID, (IJT808MessagePackFormatter)bodies);
  170. }
  171. }
  172. }