您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

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