WebSocketSubscription.cpp 2.5 KB

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