// // Created by Ht on 2020/4/24. // #ifndef TESTBIN_JMQTTMESSAGEDELIVER_H #define TESTBIN_JMQTTMESSAGEDELIVER_H #include #include #include #include #include namespace jedge { static const char* _default_topic_key = "_@df"; using QMqttRawHandler = std::function; using QMqttHandler = std::function; using QMqttUriRspHandler = std::function; using QMqttUriReqHandler = std::function; using QMqttResponseSender = std::function; class JE_API QMqttMessageDeliver { private: qlibc::QSharedObjectHolder mUriRspHandlers; qlibc::QSharedObjectHolder mUriReqHandlers; qlibc::QSharedObjectHolder mTopicHandlers; qlibc::QSharedObjectHolder mTopicRawHandlers; ChannelOperator& opr_; QMqttResponseSender* mRspSender_ = nullptr; public: explicit QMqttMessageDeliver(jedge::ChannelOperator& sender) : opr_(sender) {}; virtual ~QMqttMessageDeliver(); int handleMessage(const std::string &topic, const unsigned char* buff, int buff_len); void appendTopicHandler(const QMqttHandler& handler, const std::string &topic = _default_topic_key); //topic为空时,为默认handler,可能屏蔽所有uri的handler void appendTopicHandler(const QMqttRawHandler& handler, const std::string &topic = _default_topic_key); //topic为空时,为默认handler,可能屏蔽所有uri的handler void appendUriHandler(const std::string &uri, const QMqttUriReqHandler& handler); void appendUriHandler(const std::string &uri, const QMqttUriRspHandler& handler); void setRespnoseSender(const jedge::QMqttResponseSender& sender) ; protected: bool handleResponse(qlibc::QData& message); bool handleRequest(qlibc::QData& message); }; } #endif //TESTBIN_Jconst MQTTMESSAGEDELIV&ER_H