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.
 
 

181 rivejä
7.2 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using JT809.DotNetty.Core.Configurations;
  4. using JT809.DotNetty.Core.Interfaces;
  5. using JT809.DotNetty.Core.Clients;
  6. using JT809.DotNetty.Core.Metadata;
  7. using JT809.Protocol.Enums;
  8. using JT809.Protocol.Extensions;
  9. using JT809.Protocol.MessageBody;
  10. using Microsoft.Extensions.Logging;
  11. using Microsoft.Extensions.Options;
  12. using Newtonsoft.Json;
  13. namespace JT809.DotNetty.Core.Handlers
  14. {
  15. /// <summary>
  16. /// 上级平台
  17. /// 主从链路接收消息处理程序
  18. /// </summary>
  19. public abstract class JT809SuperiorMsgIdReceiveHandlerBase
  20. {
  21. protected IJT809VerifyCodeGenerator VerifyCodeGenerator { get; }
  22. protected JT809SubordinateClient SubordinateLinkClient { get; }
  23. protected JT809Configuration Configuration { get; }
  24. protected ILogger Logger { get; }
  25. /// <summary>
  26. /// 初始化消息处理业务
  27. /// </summary>
  28. protected JT809SuperiorMsgIdReceiveHandlerBase(
  29. ILoggerFactory loggerFactory,
  30. IOptions<JT809Configuration> jT809ConfigurationAccessor,
  31. IJT809VerifyCodeGenerator verifyCodeGenerator,
  32. JT809SubordinateClient subordinateLinkClient)
  33. {
  34. this.Logger = loggerFactory.CreateLogger<JT809SuperiorMsgIdReceiveHandlerBase>();
  35. this.VerifyCodeGenerator = verifyCodeGenerator;
  36. this.SubordinateLinkClient = subordinateLinkClient;
  37. HandlerDict = new Dictionary<JT809BusinessType, Func<JT809Request, JT809Response>>
  38. {
  39. {JT809BusinessType.主链路登录请求消息, Msg0x1001},
  40. {JT809BusinessType.主链路注销请求消息, Msg0x1003},
  41. {JT809BusinessType.主链路连接保持请求消息, Msg0x1005},
  42. {JT809BusinessType.主链路断开通知消息,Msg0x1007 },
  43. {JT809BusinessType.主链路动态信息交换消息, Msg0x1200},
  44. {JT809BusinessType.下级平台主动关闭链路通知消息, Msg0x1008},
  45. {JT809BusinessType.从链路连接应答消息, Msg0x9002},
  46. {JT809BusinessType.从链路注销应答消息, Msg0x9004},
  47. {JT809BusinessType.从链路连接保持应答消息, Msg0x9006},
  48. };
  49. SubHandlerDict = new Dictionary<JT809SubBusinessType, Func<JT809Request, JT809Response>>
  50. {
  51. //{JT809SubBusinessType.实时上传车辆定位信息, Msg0x1200_0x1202},
  52. };
  53. }
  54. public Dictionary<JT809BusinessType, Func<JT809Request, JT809Response>> HandlerDict { get; protected set; }
  55. public Dictionary<JT809SubBusinessType, Func<JT809Request, JT809Response>> SubHandlerDict { get; protected set; }
  56. /// <summary>
  57. /// 主链路登录请求消息
  58. /// </summary>
  59. /// <param name="request"></param>
  60. /// <returns>主链路登录应答消息</returns>
  61. public virtual JT809Response Msg0x1001(JT809Request request)
  62. {
  63. var verifyCode = VerifyCodeGenerator.Create();
  64. Logger.LogInformation($"主链路登录请求消息:VerifyCode-{verifyCode}");
  65. var package = JT809BusinessType.主链路登录应答消息.Create(new JT809_0x1002()
  66. {
  67. Result = JT809_0x1002_Result.成功,
  68. VerifyCode = verifyCode
  69. });
  70. if (Configuration.SubordinateClientEnable)
  71. {
  72. var jT809_0x1001 = request.Package.Bodies as JT809_0x1001;
  73. SubordinateLinkClient.ConnectAsync(jT809_0x1001.DownLinkIP, jT809_0x1001.DownLinkPort, verifyCode);
  74. }
  75. return new JT809Response(package, 100);
  76. }
  77. /// <summary>
  78. /// 主链路注销请求消息
  79. /// </summary>
  80. /// <param name="request"></param>
  81. /// <returns>主链路注销应答消息</returns>
  82. public virtual JT809Response Msg0x1003(JT809Request request)
  83. {
  84. var jT809_0x1003 = request.Package.Bodies as JT809_0x1003;
  85. Logger.LogInformation(JsonConvert.SerializeObject(jT809_0x1003));
  86. var package = JT809BusinessType.主链路注销应答消息.Create();
  87. return new JT809Response(package, 100);
  88. }
  89. /// <summary>
  90. /// 主链路连接保持请求消息
  91. /// </summary>
  92. /// <param name="request"></param>
  93. /// <returns>主链路连接保持应答消息</returns>
  94. public virtual JT809Response Msg0x1005(JT809Request request)
  95. {
  96. var package = JT809BusinessType.主链路连接保持应答消息.Create();
  97. return new JT809Response(package, 100);
  98. }
  99. /// <summary>
  100. /// 主链路断开通知消息
  101. /// </summary>
  102. /// <param name="request"></param>
  103. /// <returns>本条消息无需被通知方应答</returns>
  104. public virtual JT809Response Msg0x1007(JT809Request request)
  105. {
  106. var jT809_0x1007 = request.Package.Bodies as JT809_0x1007;
  107. Logger.LogInformation($"主链路断开通知消息:{jT809_0x1007.ErrorCode.ToString()}-{jT809_0x1007.ErrorCode}");
  108. return null;
  109. }
  110. /// <summary>
  111. /// 下级平台主动关闭链路通知消息
  112. /// </summary>
  113. /// <param name="request"></param>
  114. /// <returns>本条消息无需被通知方应答</returns>
  115. public virtual JT809Response Msg0x1008(JT809Request request)
  116. {
  117. var jT809_0x1008 = request.Package.Bodies as JT809_0x1008;
  118. Logger.LogInformation($"下级平台主动关闭链路通知消息:{jT809_0x1008.ReasonCode.ToString()}-{jT809_0x1008.ReasonCode}");
  119. return null;
  120. }
  121. /// <summary>
  122. /// 从链路连接应答消息
  123. /// </summary>
  124. /// <param name="request"></param>
  125. /// <returns>本条消息无需被通知方应答</returns>
  126. public virtual JT809Response Msg0x9002(JT809Request request)
  127. {
  128. var jT809_0x9002 = request.Package.Bodies as JT809_0x9002;
  129. Logger.LogInformation($"从链路连接应答消息:{jT809_0x9002.Result.ToString()}-{jT809_0x9002.Result}");
  130. return null;
  131. }
  132. /// <summary>
  133. /// 从链路注销应答消息
  134. /// </summary>
  135. /// <param name="request"></param>
  136. /// <returns>本条消息无需被通知方应答</returns>
  137. public virtual JT809Response Msg0x9004(JT809Request request)
  138. {
  139. Logger.LogInformation("从链路注销应答消息");
  140. return null;
  141. }
  142. /// <summary>
  143. /// 从链路连接保持应答消息
  144. /// </summary>
  145. /// <param name="request"></param>
  146. /// <returns>本条消息无需被通知方应答</returns>
  147. public virtual JT809Response Msg0x9006(JT809Request request)
  148. {
  149. Logger.LogInformation("从链路连接保持应答消息");
  150. return null;
  151. }
  152. /// <summary>
  153. /// 主链路动态信息交换消息
  154. /// </summary>
  155. /// <param name="request"></param>
  156. /// <returns></returns>
  157. public virtual JT809Response Msg0x1200(JT809Request request)
  158. {
  159. return null;
  160. }
  161. }
  162. }