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.

185 lines
7.1 KiB

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