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.
 
 
 

87 regels
3.3 KiB

  1. using JT808.Gateway.Abstractions;
  2. using JT808.Gateway.MsgLogging;
  3. using JT808.Gateway.Traffic;
  4. using JT808.Gateway.Transmit;
  5. using JT808.Protocol;
  6. using Microsoft.Extensions.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. namespace JT808.Gateway.SimpleServer.Impl
  11. {
  12. public class JT808NormalReplyMessageHandlerImpl : JT808NormalReplyMessageHandler
  13. {
  14. private readonly ILogger logger;
  15. private readonly IJT808Traffic jT808Traffic;
  16. private readonly IJT808MsgLogging jT808MsgLogging;
  17. private readonly JT808TransmitService jT808TransmitService;
  18. public JT808NormalReplyMessageHandlerImpl(
  19. JT808TransmitService jT808TransmitService,
  20. IJT808MsgLogging jT808MsgLogging,
  21. IJT808Traffic jT808Traffic,
  22. ILoggerFactory loggerFactory,
  23. IJT808Config jT808Config) : base(jT808Config)
  24. {
  25. this.jT808TransmitService = jT808TransmitService;
  26. this.jT808Traffic = jT808Traffic;
  27. this.jT808MsgLogging = jT808MsgLogging;
  28. logger =loggerFactory.CreateLogger("JT808NormalReplyMessageHandlerImpl");
  29. //添加自定义消息
  30. HandlerDict.Add(0x9999, Msg0x9999);
  31. }
  32. /// <summary>
  33. /// 重写消息处理器
  34. /// </summary>
  35. /// <param name="request"></param>
  36. /// <param name="session"></param>
  37. public override byte[] Processor(JT808HeaderPackage request, IJT808Session session)
  38. {
  39. //AOP 可以自定义添加一些东西:上下行日志、数据转发
  40. logger.LogDebug("可以自定义添加一些东西:上下行日志、数据转发");
  41. //流量
  42. jT808Traffic.Increment(request.Header.TerminalPhoneNo, DateTime.Now.ToString("yyyyMMdd"), request.OriginalData.Length);
  43. var parameter = (request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
  44. //转发数据(可同步也可以使用队列进行异步)
  45. try
  46. {
  47. jT808TransmitService.Send(parameter);
  48. }
  49. catch (Exception ex)
  50. {
  51. logger.LogError(ex,"");
  52. }
  53. //上行日志(可同步也可以使用队列进行异步)
  54. jT808MsgLogging.Processor(parameter, JT808MsgLoggingType.up);
  55. //处理上行消息
  56. var down= base.Processor(request, session);
  57. //下行日志(可同步也可以使用队列进行异步)
  58. jT808MsgLogging.Processor((request.Header.TerminalPhoneNo, down), JT808MsgLoggingType.down);
  59. return down;
  60. }
  61. /// <summary>
  62. /// 重写自带的消息
  63. /// </summary>
  64. /// <param name="request"></param>
  65. /// <param name="session"></param>
  66. public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
  67. {
  68. logger.LogDebug("重写自带Msg0x0200的消息");
  69. return base.Msg0x0200(request, session);
  70. }
  71. /// <summary>
  72. /// 自定义消息
  73. /// </summary>
  74. /// <param name="request"></param>
  75. /// <returns></returns>
  76. public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
  77. {
  78. logger.LogDebug("自定义消息");
  79. return default;
  80. }
  81. }
  82. }