Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

271 righe
11 KiB

  1. using JT808.DotNetty.Abstractions.Dtos;
  2. using JT808.DotNetty.Core.Handlers;
  3. using JT808.DotNetty.Core.Interfaces;
  4. using JT808.DotNetty.Core.Metadata;
  5. using JT808.DotNetty.Core.Services;
  6. using Newtonsoft.Json;
  7. namespace JT808.DotNetty.WebApi.Handlers
  8. {
  9. /// <summary>
  10. /// 默认消息处理业务实现
  11. /// </summary>
  12. public class JT808MsgIdDefaultWebApiHandler : JT808MsgIdHttpHandlerBase
  13. {
  14. private const string sessionRoutePrefix = "Session";
  15. private const string transmitPrefix = "Transmit";
  16. private readonly JT808TcpAtomicCounterService jT808TcpAtomicCounterService;
  17. private readonly JT808UdpAtomicCounterService jT808UdpAtomicCounterService;
  18. private readonly JT808TransmitAddressFilterService jT808TransmitAddressFilterService;
  19. private readonly IJT808TcpSessionService jT808TcpSessionService;
  20. private readonly IJT808UdpSessionService jT808UdpSessionService;
  21. private readonly IJT808UnificationTcpSendService jT808UnificationTcpSendService;
  22. private readonly IJT808UnificationUdpSendService jT808UnificationUdpSendService;
  23. /// <summary>
  24. /// TCP一套注入
  25. /// </summary>
  26. /// <param name="jT808TcpAtomicCounterService"></param>
  27. public JT808MsgIdDefaultWebApiHandler(
  28. IJT808UnificationTcpSendService jT808UnificationTcpSendService,
  29. IJT808TcpSessionService jT808TcpSessionService,
  30. JT808TransmitAddressFilterService jT808TransmitAddressFilterService,
  31. JT808TcpAtomicCounterService jT808TcpAtomicCounterService
  32. )
  33. {
  34. this.jT808UnificationTcpSendService = jT808UnificationTcpSendService;
  35. this.jT808TcpSessionService = jT808TcpSessionService;
  36. this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
  37. this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService;
  38. InitTcpRoute();
  39. }
  40. /// <summary>
  41. /// UDP一套注入
  42. /// </summary>
  43. /// <param name="jT808UdpAtomicCounterService"></param>
  44. public JT808MsgIdDefaultWebApiHandler(
  45. IJT808UdpSessionService jT808UdpSessionService,
  46. IJT808UnificationUdpSendService jT808UnificationUdpSendService,
  47. JT808UdpAtomicCounterService jT808UdpAtomicCounterService
  48. )
  49. {
  50. this.jT808UdpSessionService = jT808UdpSessionService;
  51. this.jT808UnificationUdpSendService = jT808UnificationUdpSendService;
  52. this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService;
  53. InitUdpRoute();
  54. }
  55. /// <summary>
  56. /// 统一的一套注入
  57. /// </summary>
  58. /// <param name="jT808TcpAtomicCounterService"></param>
  59. /// <param name="jT808UdpAtomicCounterService"></param>
  60. public JT808MsgIdDefaultWebApiHandler(
  61. IJT808UnificationTcpSendService jT808UnificationTcpSendService,
  62. IJT808UnificationUdpSendService jT808UnificationUdpSendService,
  63. IJT808TcpSessionService jT808TcpSessionService,
  64. IJT808UdpSessionService jT808UdpSessionService,
  65. JT808TransmitAddressFilterService jT808TransmitAddressFilterService,
  66. JT808TcpAtomicCounterService jT808TcpAtomicCounterService,
  67. JT808UdpAtomicCounterService jT808UdpAtomicCounterService
  68. )
  69. {
  70. this.jT808UdpSessionService = jT808UdpSessionService;
  71. this.jT808UnificationTcpSendService = jT808UnificationTcpSendService;
  72. this.jT808UnificationUdpSendService = jT808UnificationUdpSendService;
  73. this.jT808TcpSessionService = jT808TcpSessionService;
  74. this.jT808TransmitAddressFilterService = jT808TransmitAddressFilterService;
  75. this.jT808TcpAtomicCounterService = jT808TcpAtomicCounterService;
  76. this.jT808UdpAtomicCounterService = jT808UdpAtomicCounterService;
  77. InitTcpRoute();
  78. InitUdpRoute();
  79. }
  80. /// <summary>
  81. /// 会话服务集合
  82. /// </summary>
  83. /// <param name="request"></param>
  84. /// <returns></returns>
  85. public JT808HttpResponse GetTcpSessionAll(JT808HttpRequest request)
  86. {
  87. var result = jT808TcpSessionService.GetAll();
  88. return CreateJT808HttpResponse(result);
  89. }
  90. /// <summary>
  91. /// 会话服务-通过设备终端号移除对应会话
  92. /// </summary>
  93. /// <param name="request"></param>
  94. /// <returns></returns>
  95. public JT808HttpResponse RemoveTcpSessionByTerminalPhoneNo(JT808HttpRequest request)
  96. {
  97. if (string.IsNullOrEmpty(request.Json))
  98. {
  99. return EmptyHttpResponse();
  100. }
  101. var result = jT808TcpSessionService.RemoveByTerminalPhoneNo(request.Json);
  102. return CreateJT808HttpResponse(result);
  103. }
  104. /// <summary>
  105. /// 会话服务集合
  106. /// </summary>
  107. /// <param name="request"></param>
  108. /// <returns></returns>
  109. public JT808HttpResponse GetUdpSessionAll(JT808HttpRequest request)
  110. {
  111. var result = jT808UdpSessionService.GetAll();
  112. return CreateJT808HttpResponse(result);
  113. }
  114. /// <summary>
  115. /// 会话服务-通过设备终端号移除对应会话
  116. /// </summary>
  117. /// <param name="request"></param>
  118. /// <returns></returns>
  119. public JT808HttpResponse RemoveUdpSessionByTerminalPhoneNo(JT808HttpRequest request)
  120. {
  121. if (string.IsNullOrEmpty(request.Json))
  122. {
  123. return EmptyHttpResponse();
  124. }
  125. var result = jT808UdpSessionService.RemoveByTerminalPhoneNo(request.Json);
  126. return CreateJT808HttpResponse(result);
  127. }
  128. /// <summary>
  129. /// 添加转发过滤地址
  130. /// </summary>
  131. /// <param name="request"></param>
  132. /// <returns></returns>
  133. public JT808HttpResponse AddTransmitAddress(JT808HttpRequest request)
  134. {
  135. if (string.IsNullOrEmpty(request.Json))
  136. {
  137. return EmptyHttpResponse();
  138. }
  139. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  140. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Add(jT808IPAddressDto));
  141. }
  142. /// <summary>
  143. /// 删除转发过滤地址(不能删除在网关服务器配置文件配的地址)
  144. /// </summary>
  145. /// <param name="request"></param>
  146. /// <returns></returns>
  147. public JT808HttpResponse RemoveTransmitAddress(JT808HttpRequest request)
  148. {
  149. if (string.IsNullOrEmpty(request.Json))
  150. {
  151. return EmptyHttpResponse();
  152. }
  153. JT808IPAddressDto jT808IPAddressDto = JsonConvert.DeserializeObject<JT808IPAddressDto>(request.Json);
  154. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.Remove(jT808IPAddressDto));
  155. }
  156. /// <summary>
  157. /// 获取转发过滤地址信息集合
  158. /// </summary>
  159. /// <param name="request"></param>
  160. /// <returns></returns>
  161. public JT808HttpResponse GetTransmitAll(JT808HttpRequest request)
  162. {
  163. return CreateJT808HttpResponse(jT808TransmitAddressFilterService.GetAll());
  164. }
  165. /// <summary>
  166. /// 获取Tcp包计数器
  167. /// </summary>
  168. /// <param name="request"></param>
  169. /// <returns></returns>
  170. public JT808HttpResponse GetTcpAtomicCounter(JT808HttpRequest request)
  171. {
  172. JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto();
  173. jT808AtomicCounterDto.MsgFailCount = jT808TcpAtomicCounterService.MsgFailCount;
  174. jT808AtomicCounterDto.MsgSuccessCount = jT808TcpAtomicCounterService.MsgSuccessCount;
  175. return CreateJT808HttpResponse(new JT808ResultDto<JT808AtomicCounterDto>
  176. {
  177. Code = JT808ResultCode.Ok,
  178. Data = jT808AtomicCounterDto
  179. });
  180. }
  181. /// <summary>
  182. /// 获取Udp包计数器
  183. /// </summary>
  184. /// <param name="request"></param>
  185. /// <returns></returns>
  186. public JT808HttpResponse GetUdpAtomicCounter(JT808HttpRequest request)
  187. {
  188. JT808AtomicCounterDto jT808AtomicCounterDto = new JT808AtomicCounterDto();
  189. jT808AtomicCounterDto.MsgFailCount = jT808UdpAtomicCounterService.MsgFailCount;
  190. jT808AtomicCounterDto.MsgSuccessCount = jT808UdpAtomicCounterService.MsgSuccessCount;
  191. return CreateJT808HttpResponse(new JT808ResultDto<JT808AtomicCounterDto>
  192. {
  193. Code = JT808ResultCode.Ok,
  194. Data = jT808AtomicCounterDto
  195. });
  196. }
  197. /// <summary>
  198. /// 基于Tcp的统一下发信息
  199. /// </summary>
  200. /// <param name="request"></param>
  201. /// <returns></returns>
  202. public JT808HttpResponse UnificationTcpSend(JT808HttpRequest request)
  203. {
  204. if (string.IsNullOrEmpty(request.Json))
  205. {
  206. return EmptyHttpResponse();
  207. }
  208. JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject<JT808UnificationSendRequestDto>(request.Json);
  209. var result = jT808UnificationTcpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data);
  210. return CreateJT808HttpResponse(result);
  211. }
  212. /// <summary>
  213. /// 基于Udp的统一下发信息
  214. /// </summary>
  215. /// <param name="request"></param>
  216. /// <returns></returns>
  217. public JT808HttpResponse UnificationUdpSend(JT808HttpRequest request)
  218. {
  219. if (string.IsNullOrEmpty(request.Json))
  220. {
  221. return EmptyHttpResponse();
  222. }
  223. JT808UnificationSendRequestDto jT808UnificationSendRequestDto = JsonConvert.DeserializeObject<JT808UnificationSendRequestDto>(request.Json);
  224. var result = jT808UnificationUdpSendService.Send(jT808UnificationSendRequestDto.TerminalPhoneNo, jT808UnificationSendRequestDto.Data);
  225. return CreateJT808HttpResponse(result);
  226. }
  227. protected virtual void InitTcpRoute()
  228. {
  229. CreateRoute($"{transmitPrefix}/Add", AddTransmitAddress);
  230. CreateRoute($"{transmitPrefix}/Remove", RemoveTransmitAddress);
  231. CreateRoute($"{transmitPrefix}/GetAll", GetTransmitAll);
  232. CreateRoute($"GetTcpAtomicCounter", GetTcpAtomicCounter);
  233. CreateRoute($"{sessionRoutePrefix}/Tcp/GetAll", GetTcpSessionAll);
  234. CreateRoute($"{sessionRoutePrefix}/Tcp/RemoveByTerminalPhoneNo", RemoveTcpSessionByTerminalPhoneNo);
  235. CreateRoute($"UnificationTcpSend", UnificationTcpSend);
  236. }
  237. protected virtual void InitUdpRoute()
  238. {
  239. CreateRoute($"GetUdpAtomicCounter", GetUdpAtomicCounter);
  240. CreateRoute($"UnificationUdpSend", UnificationUdpSend);
  241. CreateRoute($"{sessionRoutePrefix}/Udp/GetAll", GetUdpSessionAll);
  242. CreateRoute($"{sessionRoutePrefix}/Udp/RemoveByTerminalPhoneNo", RemoveUdpSessionByTerminalPhoneNo);
  243. }
  244. }
  245. }