QMqttMessageDeliver.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // Created by Ht on 2020/4/24.
  3. //
  4. #ifndef TESTBIN_JMQTTMESSAGEDELIVER_H
  5. #define TESTBIN_JMQTTMESSAGEDELIVER_H
  6. #include <mutex>
  7. #include <unordered_map>
  8. #include <functional>
  9. #include <qlibc/qlibc.h>
  10. #include <mgbus/ChannelOperator.h>
  11. namespace jedge {
  12. static const char* _default_topic_key = "_@df";
  13. using QMqttRawHandler = std::function<bool (ChannelOperator& o, const std::string& t, const byte b[], int l)>;
  14. using QMqttHandler = std::function<bool (ChannelOperator& o, const std::string& t, qlibc::QData& m)>;
  15. using QMqttUriRspHandler = std::function<bool (ChannelOperator& o, const std::string& u, qlibc::QData& m)>;
  16. using QMqttUriReqHandler = std::function<bool (qlibc::QData& r, ChannelOperator& o, const std::string& u, qlibc::QData& q)>;
  17. using QMqttResponseSender = std::function<void(const qlibc::QData& p)>;
  18. class JE_API QMqttMessageDeliver {
  19. private:
  20. qlibc::QSharedObjectHolder<QMqttUriRspHandler>
  21. mUriRspHandlers;
  22. qlibc::QSharedObjectHolder<QMqttUriReqHandler>
  23. mUriReqHandlers;
  24. qlibc::QSharedObjectHolder<QMqttHandler>
  25. mTopicHandlers;
  26. qlibc::QSharedObjectHolder<QMqttRawHandler>
  27. mTopicRawHandlers;
  28. ChannelOperator& opr_;
  29. QMqttResponseSender*
  30. mRspSender_ = nullptr;
  31. public:
  32. explicit QMqttMessageDeliver(jedge::ChannelOperator& sender) : opr_(sender) {};
  33. virtual ~QMqttMessageDeliver();
  34. int handleMessage(const std::string &topic, const unsigned char* buff, int buff_len);
  35. void appendTopicHandler(const QMqttHandler& handler, const std::string &topic = _default_topic_key); //topic为空时,为默认handler,可能屏蔽所有uri的handler
  36. void appendTopicHandler(const QMqttRawHandler& handler, const std::string &topic = _default_topic_key); //topic为空时,为默认handler,可能屏蔽所有uri的handler
  37. void appendUriHandler(const std::string &uri, const QMqttUriReqHandler& handler);
  38. void appendUriHandler(const std::string &uri, const QMqttUriRspHandler& handler);
  39. void setRespnoseSender(const jedge::QMqttResponseSender& sender) ;
  40. protected:
  41. bool handleResponse(qlibc::QData& message);
  42. bool handleRequest(qlibc::QData& message);
  43. };
  44. }
  45. #endif //TESTBIN_Jconst MQTTMESSAGEDELIV&ER_H