Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

61 řádky
1.7 KiB

  1. using JT808.Gateway.Abstractions;
  2. using JT808.Gateway.InMemoryMQ.Services;
  3. using Microsoft.Extensions.Logging;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. namespace JT808.Gateway.InMemoryMQ
  10. {
  11. public class JT808MsgReplyMessageConsumer : IJT808MsgConsumer
  12. {
  13. private readonly JT808MsgReplyMessageService JT808MsgService;
  14. public CancellationTokenSource Cts => new CancellationTokenSource();
  15. private readonly ILogger logger;
  16. public string TopicName => JT808GatewayConstants.MsgTopic;
  17. public JT808MsgReplyMessageConsumer(
  18. JT808MsgReplyMessageService jT808MsgService,
  19. ILoggerFactory loggerFactory)
  20. {
  21. JT808MsgService = jT808MsgService;
  22. logger = loggerFactory.CreateLogger("JT808MsgReplyMessageConsumer");
  23. }
  24. public void OnMessage(Action<(string TerminalNo, byte[] Data)> callback)
  25. {
  26. Task.Run(async() =>
  27. {
  28. while (!Cts.IsCancellationRequested)
  29. {
  30. try
  31. {
  32. var item = await JT808MsgService.ReadAsync(Cts.Token);
  33. callback(item);
  34. }
  35. catch(Exception ex)
  36. {
  37. logger.LogError(ex, "");
  38. }
  39. }
  40. }, Cts.Token);
  41. }
  42. public void Subscribe()
  43. {
  44. }
  45. public void Unsubscribe()
  46. {
  47. Cts.Cancel();
  48. }
  49. public void Dispose()
  50. {
  51. Cts.Dispose();
  52. }
  53. }
  54. }