#include "request_delegate.hpp" #include "http_client.hpp" #include "factory.hpp" #include namespace acs { void request_delegate::response_handler(const std::string& response_body) const { if (response_body == "") { callback_({ {}, {} }); return; } boost_helper::json response(response_body); if (!response.has("err")) { std::cerr << "Bad response. " << response_body << std::endl; callback_({ {}, {} }); return; } if (response["err"].val() != "0") { std::cerr << "Server responded with error " << response["err"].val() << response["data"].val() << std::endl; callback_({ {}, {} }); return; } callback_({ response["data"]["token"].val(), response["data"]["stunum"].val() }); } void request_delegate::execute(const callback_t& callback) { callback_ = callback; // Unfortunately we can't DI client here. // There's a bug in lower versions of Boost.Beast, // resulting flat_buffer instance not being cleared properly. delete client_; client_ = new http_client; client_->async_get(host, query, boost::bind( &request_delegate::response_handler, this, _1)); } }