http_subscribe.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include "define.h"
  3. #if USE_NET_HTTP_WEBSITE
  4. #include <regex>
  5. #include <functional>
  6. #include <shared_mutex>
  7. #include "http_interface.h"
  8. namespace ylib
  9. {
  10. namespace network
  11. {
  12. namespace http
  13. {
  14. class request;
  15. class response;
  16. class reqpack;
  17. struct subscribe_info {
  18. std::regex regex;
  19. std::string pattern;
  20. std::string extra;
  21. std::function<void(network::http::request* request, network::http::response* response,network::http::websocket_message* ws_msg, const std::string& pattern, const std::string& extra)> callback;
  22. std::function<void(network::http::request* request, network::http::response* response,network::http::websocket_message* ws_msg)> callback2;
  23. };
  24. /******************************************************
  25. * class:订阅器
  26. ******************************************************/
  27. class subscribe :public ylib::error_base, public network::http::interface_
  28. {
  29. public:
  30. subscribe();
  31. ~subscribe();
  32. bool add(const std::string& pattern,const std::string& extra,std::function<void(network::http::request* request, network::http::response* response,network::http::websocket_message* ws_msg, const std::string& pattern, const std::string& extra)> callback);
  33. bool remove(const std::string& pattern);
  34. bool exist(const std::string& pattern);
  35. bool trigger(const std::string& url, network::http::reqpack* rp);
  36. void clear();
  37. private:
  38. std::vector<subscribe_info> m_list;
  39. std::shared_mutex m_rw_mutex;
  40. };
  41. }
  42. }
  43. }
  44. #endif