WebSocketSubscription.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "WebSocketSubscription.h"
  2. #include <json.hpp>
  3. #include <sstream>
  4. namespace ToonBridge {
  5. namespace Toon {
  6. WebSocketSubscription::WebSocketSubscription(const ToonSettings& toonSettings) :
  7. m_toonSettings(toonSettings)
  8. {
  9. OpenWebSocket();
  10. }
  11. WebSocketSubscription::~WebSocketSubscription()
  12. {
  13. CloseWebSocket();
  14. }
  15. void WebSocketSubscription::Reconnect()
  16. {
  17. CloseWebSocket();
  18. OpenWebSocket();
  19. }
  20. void WebSocketSubscription::OpenWebSocket()
  21. {
  22. std::stringstream url;
  23. url << "https://api.toon.eu/toon/v3/";
  24. url << m_toonSettings.agreementId;
  25. url << "/webhooks";
  26. std::vector<std::string> subscribedActions;
  27. subscribedActions.push_back("Thermostat");
  28. subscribedActions.push_back("PowerUsage");
  29. subscribedActions.push_back("BoilerError");
  30. nlohmann::json data;
  31. data["applicationId"] = m_toonSettings.applicationId;
  32. data["callbackUrl"] = m_toonSettings.callbackUrl;
  33. data["subscribedActions"] = subscribedActions;
  34. Http::HttpRequest request(url.str());
  35. request.Method(Http::HttpRequest::Method::POST);
  36. request.Headers(RequestHeaders());
  37. request.Data(data.dump());
  38. m_httpClient.Open(request);
  39. }
  40. void WebSocketSubscription::WebSocketStatus()
  41. {
  42. std::stringstream url;
  43. url << "https://api.toon.eu/toon/v3/";
  44. url << m_toonSettings.agreementId;
  45. url << "/webhooks/";
  46. Http::HttpRequest request(url.str());
  47. request.Headers(RequestHeaders());
  48. nlohmann::json answer = nlohmann::json::parse(m_httpClient.Open(request));
  49. }
  50. void WebSocketSubscription::CloseWebSocket()
  51. {
  52. std::stringstream url;
  53. url << "https://api.toon.eu/toon/v3/";
  54. url << m_toonSettings.agreementId;
  55. url << "/webhooks/";
  56. url << m_toonSettings.applicationId;
  57. Http::HttpRequest request(url.str());
  58. request.Method(Http::HttpRequest::Method::DELETE);
  59. request.Headers(RequestHeaders());
  60. m_httpClient.Open(request);
  61. }
  62. std::vector<std::string> WebSocketSubscription::RequestHeaders()
  63. {
  64. std::vector<std::string> headers;
  65. headers.push_back("cache-control: no-cache");
  66. headers.push_back("accept: application/json");
  67. headers.push_back("content-type: application/json");
  68. std::stringstream header;
  69. header << "authorization: Bearer " << m_toonSettings.accessToken;
  70. headers.push_back(header.str());
  71. header.str("");
  72. header << "X-CommonName: " << m_toonSettings.displayCommonName;
  73. headers.push_back(header.str());
  74. header.str("");
  75. header << "X-Agreement-ID: " << m_toonSettings.agreementId;
  76. headers.push_back(header.str());
  77. return headers;
  78. }
  79. } // namespace Toon
  80. } // namespace ToonBridge