Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

98 rader
3.7 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 Microsoft.Extensions.Logging;
  7. using Microsoft.Extensions.Options;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Text;
  11. namespace JT808.Gateway.NormalHosting.Impl
  12. {
  13. public class JT808CustomMessageHandlerImpl : JT808MessageHandler
  14. {
  15. private readonly ILogger logger;
  16. private readonly JT808TransmitService jT808TransmitService;
  17. private readonly IJT808MsgLogging jT808MsgLogging;
  18. private readonly IJT808MsgReplyProducer MsgReplyProducer;
  19. public JT808CustomMessageHandlerImpl(
  20. ILoggerFactory loggerFactory,
  21. IJT808MsgReplyProducer msgReplyProducer,
  22. IJT808MsgLogging jT808MsgLogging,
  23. IOptionsMonitor<JT808Configuration> jT808ConfigurationOptionsMonitor,
  24. IJT808MsgProducer msgProducer,
  25. IJT808MsgReplyLoggingProducer msgReplyLoggingProducer,
  26. JT808TransmitService jT808TransmitService,
  27. IJT808Config jT808Config) : base(jT808ConfigurationOptionsMonitor,
  28. msgProducer,
  29. msgReplyLoggingProducer,
  30. jT808Config)
  31. {
  32. MsgReplyProducer = msgReplyProducer;
  33. this.jT808TransmitService = jT808TransmitService;
  34. this.jT808MsgLogging = jT808MsgLogging;
  35. logger = loggerFactory.CreateLogger<JT808CustomMessageHandlerImpl>();
  36. //添加自定义消息
  37. HandlerDict.Add(0x9999, Msg0x9999);
  38. }
  39. /// <summary>
  40. /// 重写消息处理器
  41. /// </summary>
  42. /// <param name="request"></param>
  43. /// <param name="session"></param>
  44. public override byte[] Processor(JT808HeaderPackage request, IJT808Session session)
  45. {
  46. //处理上行消息
  47. var down = base.Processor(request, session);
  48. try
  49. {
  50. //AOP 可以自定义添加一些东西:上下行日志、
  51. logger.LogDebug("可以自定义添加一些东西:上下行日志、数据转发");
  52. var parameter = (request.Header.TerminalPhoneNo, request.OriginalData.ToArray());
  53. //上行日志(可同步也可以使用队列进行异步)
  54. jT808MsgLogging.Processor(parameter, JT808MsgLoggingType.up);
  55. //下行日志(可同步也可以使用队列进行异步)
  56. jT808MsgLogging.Processor((request.Header.TerminalPhoneNo, down), JT808MsgLoggingType.down);
  57. //转发数据(可同步也可以使用队列进行异步)
  58. jT808TransmitService.SendAsync(parameter);
  59. }
  60. catch (Exception)
  61. {
  62. }
  63. return down;
  64. }
  65. /// <summary>
  66. /// 重写自带的消息
  67. /// </summary>
  68. /// <param name="request"></param>
  69. /// <param name="session"></param>
  70. public override byte[] Msg0x0200(JT808HeaderPackage request, IJT808Session session)
  71. {
  72. logger.LogDebug("重写自带Msg0x0200的消息");
  73. var data = base.Msg0x0200(request, session);
  74. logger.LogDebug("往应答服务发送相同数据进行测试");
  75. MsgReplyProducer.ProduceAsync(request.Header.TerminalPhoneNo, data).ConfigureAwait(false);
  76. return data;
  77. }
  78. /// <summary>
  79. /// 自定义消息
  80. /// </summary>
  81. /// <param name="request"></param>
  82. /// <returns></returns>
  83. public byte[] Msg0x9999(JT808HeaderPackage request, IJT808Session session)
  84. {
  85. logger.LogDebug("自定义消息");
  86. return default;
  87. }
  88. }
  89. }