ProtocolDecodeBase.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // // ******************************************************************
  2. // // /\ /| @File ProtocolDecodeBase.h
  3. // // \ V/ @Brief
  4. // // | "") @Author lijinwen, ghz005@uni-trend.com.cn
  5. // // / | @Creation 2024-5-6
  6. // // / \\ @Modified 2024-5-13
  7. // // *(__\_\
  8. // // ******************************************************************
  9. #pragma once
  10. #include <iostream>
  11. #include <memory>
  12. #include <thread>
  13. #include <atomic>
  14. #include <vector>
  15. #include <string>
  16. #include <stdexcept>
  17. #include "DecodeResult.h"
  18. #include "BaseEnums/ProtocolEnums.h"
  19. #include "BaseHelper/Logger.h"
  20. namespace Protocol
  21. {
  22. class QuantizeParams;
  23. struct DecodeParams;
  24. class ProtocolDecodeBase
  25. {
  26. public:
  27. virtual ~ProtocolDecodeBase();
  28. // 解码接口,异步调用
  29. //解码过程
  30. void DecodeAsync(const DecodeParams* decodeParams);
  31. //带整型的解码过程
  32. void QuantizeDecodeAsync(const QuantizeParams& decodeParams);
  33. // 取消解码
  34. void Cancel();
  35. // 获取解码状态
  36. ProtocolStatus GetStatus() const;
  37. virtual DecodeResult* GetResult();
  38. protected:
  39. // 真正的解码逻辑,由子类实现
  40. //解码过程
  41. virtual void Decode(const DecodeParams* decodeParams);
  42. //带整型的解码过程
  43. virtual void QuantizeDecode(const QuantizeParams& decode_params);
  44. std::atomic<bool> canceled_; // 取消标志
  45. ProtocolStatus status_ = ProtocolStatus::Canceled; // 解码状态
  46. // 子类可以设置自己的私有枚举和数据结构
  47. //....//
  48. private:
  49. std::thread decode_thread_; // 解码线程
  50. };
  51. //外部调用
  52. extern "C" {
  53. inline __declspec(dllexport) void DeleteProtocolBase(const ProtocolDecodeBase* base)
  54. {
  55. delete base; // 确保提供一个删除函数,以便C代码可以正确释放内存
  56. }
  57. inline __declspec(dllexport) void DecodeAsyncExport(ProtocolDecodeBase* decoder, const DecodeParams* decodeParams)
  58. {
  59. return decoder->DecodeAsync(decodeParams);
  60. }
  61. inline __declspec(dllexport) uint32_t GetStatusExport(const ProtocolDecodeBase* decoder)
  62. {
  63. return static_cast<uint32_t>(decoder->GetStatus());
  64. }
  65. inline __declspec(dllexport) DecodeResult* GetResultExport(ProtocolDecodeBase* decoder)
  66. {
  67. return decoder->GetResult();
  68. }
  69. }
  70. }