選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

87 行
3.5 KiB

  1. using JT808.Gateway.Abstractions;
  2. using JT808.Gateway.Abstractions.Configurations;
  3. using JT808.Gateway.MsgLogging;
  4. using JT808.Gateway.Transmit;
  5. using JT808.Protocol;
  6. using JT808.Protocol.Extensions;
  7. using Microsoft.Extensions.Logging;
  8. using Microsoft.Extensions.Options;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Text;
  12. namespace JT808.Gateway.SimpleServer.Impl
  13. {
  14. public class JT808MessageHandlerImpl : JT808MessageHandler
  15. {
  16. private readonly ILogger logger;
  17. private readonly IJT808MsgLogging jT808MsgLogging;
  18. private readonly JT808TransmitService jT808TransmitService;
  19. public JT808MessageHandlerImpl(
  20. ILoggerFactory loggerFactory,
  21. JT808TransmitService jT808TransmitService,
  22. IJT808MsgLogging jT808MsgLogging,
  23. IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor, IJT808MsgProducer msgProducer, IJT808MsgReplyLoggingProducer msgReplyLoggingProducer, IJT808Config jT808Config)
  24. : base(jT808ConfigurationOptionsMonitor, msgProducer, msgReplyLoggingProducer, jT808Config)
  25. {
  26. this.jT808TransmitService = jT808TransmitService;
  27. this.jT808MsgLogging = jT808MsgLogging;
  28. logger = loggerFactory.CreateLogger<JT808MessageHandlerImpl>();
  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. var parameter = (request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
  42. //转发数据(可同步也可以使用队列进行异步)
  43. try
  44. {
  45. jT808TransmitService.SendAsync(parameter);
  46. }
  47. catch (Exception ex)
  48. {
  49. logger.LogError(ex,"");
  50. }
  51. //上行日志(可同步也可以使用队列进行异步)
  52. jT808MsgLogging.Processor(parameter, JT808MsgLoggingType.up);
  53. //处理上行消息
  54. var down= base.Processor(request, session);
  55. //下行日志(可同步也可以使用队列进行异步)
  56. jT808MsgLogging.Processor((request.Header.TerminalPhoneNo, down), JT808MsgLoggingType.down);
  57. return down;
  58. }
  59. /// <summary>
  60. /// 重写自带的消息
  61. /// </summary>
  62. /// <param name="request"></param>
  63. /// <param name="session"></param>
  64. public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
  65. {
  66. //logger.LogDebug("重写自带Msg0x0200的消息");
  67. logger.LogDebug($"重写自带Msg0x0200的消息{request.Header.TerminalPhoneNo}-{request.OriginalData.ToArray().ToHexString()}");
  68. return base.Msg0x0200(request, session);
  69. }
  70. /// <summary>
  71. /// 自定义消息
  72. /// </summary>
  73. /// <param name="request"></param>
  74. /// <returns></returns>
  75. public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
  76. {
  77. logger.LogDebug("自定义消息");
  78. return default;
  79. }
  80. }
  81. }