No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

73 líneas
2.8 KiB

  1. using DotNetty.Buffers;
  2. using DotNetty.Codecs;
  3. using DotNetty.Transport.Channels;
  4. using Microsoft.Extensions.Logging;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. using JT808.Protocol;
  9. using JT808.DotNetty.Internal;
  10. using JT808.DotNetty.Interfaces;
  11. namespace JT808.DotNetty.Codecs
  12. {
  13. /// <summary>
  14. /// JT808解码
  15. /// </summary>
  16. internal class JT808Decoder : ByteToMessageDecoder
  17. {
  18. private readonly ILogger<JT808Decoder> logger;
  19. private readonly IJT808SourcePackageDispatcher jT808SourcePackageDispatcher;
  20. private readonly JT808AtomicCounterService jT808AtomicCounterService;
  21. public JT808Decoder(
  22. JT808AtomicCounterService jT808AtomicCounterService,
  23. IJT808SourcePackageDispatcher jT808SourcePackageDispatcher,
  24. ILoggerFactory loggerFactory)
  25. {
  26. this.jT808AtomicCounterService = jT808AtomicCounterService;
  27. this.logger = loggerFactory.CreateLogger<JT808Decoder>();
  28. this.jT808SourcePackageDispatcher = jT808SourcePackageDispatcher;
  29. }
  30. protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output)
  31. {
  32. byte[] buffer = new byte[input.Capacity + 2];
  33. try
  34. {
  35. input.ReadBytes(buffer, 1, input.Capacity);
  36. buffer[0] = JT808Package.BeginFlag;
  37. buffer[input.Capacity + 1] = JT808Package.EndFlag;
  38. jT808SourcePackageDispatcher?.SendAsync(buffer);
  39. JT808Package jT808Package = JT808Serializer.Deserialize<JT808Package>(buffer);
  40. output.Add(jT808Package);
  41. jT808AtomicCounterService.MsgSuccessIncrement();
  42. if (logger.IsEnabled(LogLevel.Debug))
  43. {
  44. logger.LogDebug("accept package success count<<<" + jT808AtomicCounterService.MsgSuccessCount.ToString());
  45. }
  46. }
  47. catch (JT808.Protocol.Exceptions.JT808Exception ex)
  48. {
  49. jT808AtomicCounterService.MsgFailIncrement();
  50. if (logger.IsEnabled(LogLevel.Error))
  51. {
  52. logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
  53. logger.LogError(ex, "accept msg<<<" + buffer);
  54. }
  55. }
  56. catch (Exception ex)
  57. {
  58. jT808AtomicCounterService.MsgFailIncrement();
  59. if (logger.IsEnabled(LogLevel.Error))
  60. {
  61. logger.LogError("accept package fail count<<<" + jT808AtomicCounterService.MsgFailCount.ToString());
  62. logger.LogError(ex, "accept msg<<<" + buffer);
  63. }
  64. }
  65. }
  66. }
  67. }