SubscribeCommand.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using ProjectBase.Data.Logs;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace SIASUN.Autopilot.Device.Common
  8. {
  9. /// <summary>
  10. /// 订阅类命令
  11. /// </summary>
  12. public class SubscribeCommand<T>
  13. {
  14. public string OperationId { get; set; }
  15. public event ReceiveMessageEventHandler ReceiveMessage;
  16. public SubscribeCommand(string msgOperationId)
  17. {
  18. this.OperationId = msgOperationId;
  19. }
  20. public void Subscribe()
  21. {
  22. EventManage.Instance.SubscribeEvent(OperationId, new EventProcessingHandler(ProcessPackage));
  23. }
  24. public void UnSubscribe()
  25. {
  26. EventManage.Instance.UnSubscribeEvent(OperationId, ProcessPackage);
  27. }
  28. private void ProcessPackage(PackageProcessingEventArgs e)
  29. {
  30. //接收到数据后触发ReceiveMessage处理。
  31. try
  32. {
  33. //通知
  34. if (ReceiveMessage != null)
  35. {
  36. var args = new ReceiveMessageEventArgs((T)e.PackageBytes[0]);
  37. ReceiveMessage(args);
  38. }
  39. }
  40. catch (Exception ex)
  41. {
  42. LogHelper.log.Error(string.Format("ProcessPackage事件出现未知异常{0}。", ex.ToString()));
  43. //TODO,日志
  44. var args = new ReceiveMessageEventArgs(null);
  45. ReceiveMessage(args);
  46. }
  47. }
  48. }
  49. }