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.

198 lines
7.2 KiB

  1. using JTNE.Protocol.Interfaces;
  2. using JTNE.Protocol.Internal;
  3. using JTNE.Protocol.MessageBody;
  4. using System;
  5. using System.Text;
  6. namespace JTNE.Protocol
  7. {
  8. /// <summary>
  9. ///
  10. /// </summary>
  11. public class JTNEGlobalConfigs
  12. {
  13. private static readonly Lazy<JTNEGlobalConfigs> instance = new Lazy<JTNEGlobalConfigs>(() => new JTNEGlobalConfigs());
  14. private JTNEGlobalConfigs()
  15. {
  16. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  17. Encoding = Encoding.GetEncoding("GB18030");
  18. SkipCRCCode = false;
  19. DeviceMsgSNDistributed = new DefaultDeviceMsgSNDistributedImpl();
  20. PlatformMsgSNDistributed = new DefaultPlatformMsgSNDistributedImpl();
  21. }
  22. /// <summary>
  23. /// 字符串编码,默认 GB18030
  24. /// </summary>
  25. public Encoding Encoding { get; }
  26. /// <summary>
  27. ///
  28. /// </summary>
  29. public static JTNEGlobalConfigs Instance
  30. {
  31. get
  32. {
  33. return instance.Value;
  34. }
  35. }
  36. /// <summary>
  37. /// 设备流水号
  38. /// </summary>
  39. public IDeviceMsgSNDistributed DeviceMsgSNDistributed { get; private set; }
  40. /// <summary>
  41. /// 平台流水号
  42. /// </summary>
  43. public IPlatformMsgSNDistributed PlatformMsgSNDistributed { get; private set; }
  44. /// <summary>
  45. /// 跳过校验码
  46. /// 测试的时候需要手动修改值,避免验证
  47. /// 默认:false
  48. /// </summary>
  49. public bool SkipCRCCode { get; private set; }
  50. /// <summary>
  51. /// 消息数据体加密算法
  52. /// RSA=>IJTNEEncryptImpl
  53. /// AES=>IJTNEEncryptImpl
  54. /// </summary>
  55. public Func<byte,IJTNEEncrypt> DataBodiesEncrypt { get; private set; }
  56. /// <summary>
  57. /// 平台登入加密算法
  58. /// RSA=>IJTNEEncryptImpl
  59. /// AES=>IJTNEEncryptImpl
  60. /// </summary>
  61. public Func<byte, IJTNEEncrypt> PlatformLoginEncrypt { get; private set; }
  62. /// <summary>
  63. /// 注册自定义消息
  64. /// </summary>
  65. /// <typeparam name="TJTNEBodies"></typeparam>
  66. /// <param name="msgId"></param>
  67. /// <returns></returns>
  68. public JTNEGlobalConfigs Register_CustomMsgId<TJTNEBodies>(byte customMsgId)
  69. where TJTNEBodies : JTNEBodies
  70. {
  71. JTNEMsgIdFactory.SetMap<TJTNEBodies>(customMsgId);
  72. return instance.Value;
  73. }
  74. /// <summary>
  75. /// 重写消息
  76. /// </summary>
  77. /// <typeparam name="TJTNEBodies"></typeparam>
  78. /// <param name="overwriteMsgId"></param>
  79. /// <returns></returns>
  80. public JTNEGlobalConfigs Overwrite_MsgId<TJTNEBodies>(byte overwriteMsgId)
  81. where TJTNEBodies : JTNEBodies
  82. {
  83. JTNEMsgIdFactory.ReplaceMap<TJTNEBodies>(overwriteMsgId);
  84. return instance.Value;
  85. }
  86. /// <summary>
  87. ///
  88. /// </summary>
  89. /// <param name="typeCode">自定义类型编码</param>
  90. /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x02_CustomBody</param>
  91. /// <returns></returns>
  92. public JTNEGlobalConfigs Register_JTNE0x02CustomBody(byte typeCode, Type type)
  93. {
  94. if (!JTNE_0x02_CustomBody.CustomTypeCodes.ContainsKey(typeCode))
  95. {
  96. JTNE_0x02_CustomBody.CustomTypeCodes.Add(typeCode, type);
  97. }
  98. return instance.Value;
  99. }
  100. /// <summary>
  101. ///
  102. /// </summary>
  103. /// <param name="typeCode">自定义类型编码</param>
  104. /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param>
  105. /// <returns></returns>
  106. public JTNEGlobalConfigs Register_JTNE0x81CustomBody(byte typeCode, Type type)
  107. {
  108. if (!JTNE_0x81_Body.JTNE_0x81Method.ContainsKey(typeCode))
  109. {
  110. JTNE_0x81_Body.JTNE_0x81Method.Add(typeCode, type);
  111. }
  112. return instance.Value;
  113. }
  114. /// <summary>
  115. ///
  116. /// </summary>
  117. /// <param name="typeCode">自定义类型编码</param>
  118. /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param>
  119. /// <returns></returns>
  120. public JTNEGlobalConfigs Register_JTNE0x81CustomDepenedBody(byte DependerParamId, byte DependedParamId)
  121. {
  122. if (!JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.ContainsKey(DependerParamId))
  123. {
  124. JTNE_0x81_Body.JTNE_0x81LengthOfADependOnValueOfB.Add(DependerParamId, DependedParamId);
  125. }
  126. return instance.Value;
  127. }
  128. /// <summary>
  129. ///
  130. /// </summary>
  131. /// <param name="typeCode">自定义类型编码</param>
  132. /// <param name="type">继承JTNE.Protocol.MessageBody.JTNE_0x81_Body</param>
  133. /// <returns></returns>
  134. public JTNEGlobalConfigs Register_JTNE0x82CustomBody(byte typeCode, Type type)
  135. {
  136. if (!JTNE_0x82_Body.JTNE_0x82Method.ContainsKey(typeCode))
  137. {
  138. JTNE_0x82_Body.JTNE_0x82Method.Add(typeCode, type);
  139. }
  140. return instance.Value;
  141. }
  142. /// <summary>
  143. /// 设置跳过校验码
  144. /// 场景:测试的时候,可能需要手动改数据,所以测试的时候有用
  145. /// </summary>
  146. /// <param name="skipCRCCode"></param>
  147. /// <returns></returns>
  148. public JTNEGlobalConfigs SetSkipCRCCode(bool skipCRCCode)
  149. {
  150. instance.Value.SkipCRCCode = skipCRCCode;
  151. return instance.Value;
  152. }
  153. /// <summary>
  154. /// 设置设备流水号
  155. /// </summary>
  156. /// <param name="deviceMsgSNDistributed"></param>
  157. /// <returns></returns>
  158. public JTNEGlobalConfigs SetDeviceMsgSNDistributed(IDeviceMsgSNDistributed deviceMsgSNDistributed)
  159. {
  160. instance.Value.DeviceMsgSNDistributed = deviceMsgSNDistributed;
  161. return instance.Value;
  162. }
  163. /// <summary>
  164. /// 设置平台流水号
  165. /// </summary>
  166. /// <param name="platformMsgSNDistributed"></param>
  167. /// <returns></returns>
  168. public JTNEGlobalConfigs SetPlatformMsgSNDistributed(IPlatformMsgSNDistributed platformMsgSNDistributed)
  169. {
  170. instance.Value.PlatformMsgSNDistributed = platformMsgSNDistributed;
  171. return instance.Value;
  172. }
  173. /// <summary>
  174. /// 设置消息数据体加密算法
  175. /// </summary>
  176. /// <param name="dataBodiesEncrypt"></param>
  177. /// <returns></returns>
  178. public JTNEGlobalConfigs SetDataBodiesEncrypt(Func<byte, IJTNEEncrypt> dataBodiesEncrypt)
  179. {
  180. instance.Value.DataBodiesEncrypt = dataBodiesEncrypt;
  181. return instance.Value;
  182. }
  183. /// <summary>
  184. /// 设置平台登入加密算法
  185. /// </summary>
  186. /// <param name="platformLoginEncrypt"></param>
  187. /// <returns></returns>
  188. public JTNEGlobalConfigs SetPlatformLoginEncrypt(Func<byte, IJTNEEncrypt> platformLoginEncrypt)
  189. {
  190. instance.Value.PlatformLoginEncrypt = platformLoginEncrypt;
  191. return instance.Value;
  192. }
  193. }
  194. }