LicenseManger/sdk/cpp/device_sdk.cpp

100 lines
2.8 KiB
C++
Raw Normal View History

2024-11-16 15:59:15 +00:00
#include "device_sdk.h"
#include <sstream>
#include <iomanip>
#include <vector>
DeviceClient::DeviceClient(const std::string& base_url, const std::string& encrypt_key)
: base_url_(base_url), encrypt_key_(encrypt_key) {
curl_global_init(CURL_GLOBAL_ALL);
curl_ = curl_easy_init();
}
DeviceClient::~DeviceClient() {
if (curl_) {
curl_easy_cleanup(curl_);
}
curl_global_cleanup();
}
bool DeviceClient::registerDevice(const DeviceInfo& device_info, std::string& error) {
json request;
request["uid"] = device_info.uid;
request["device_model"] = device_info.device_model;
if (!device_info.license_code.empty()) {
request["license_code"] = device_info.license_code;
}
std::string response;
if (!post(base_url_ + "/api/devices/register", request.dump(), response, error)) {
return false;
}
auto resp_json = json::parse(response);
if (resp_json["code"] != 0) {
error = resp_json["error"];
return false;
}
return true;
}
bool DeviceClient::validateDevice(const std::string& uid, ValidateResponse& response, std::string& error) {
std::string encrypted_response;
if (!get(base_url_ + "/api/devices/" + uid + "/validate", encrypted_response, error)) {
return false;
}
auto resp_json = json::parse(encrypted_response);
if (resp_json["code"] != 0) {
error = resp_json["error"];
return false;
}
std::string decrypted = decryptResponse(resp_json["data"]);
auto data = json::parse(decrypted);
response.status = data["status"];
response.license_type = data["license_type"];
response.expire_time = data["expire_time"];
response.start_count = data["start_count"];
response.max_uses = data["max_uses"];
response.timestamp = data["timestamp"];
return true;
}
bool DeviceClient::updateStartCount(const std::string& uid, int& count, std::string& error) {
std::string response;
if (!post(base_url_ + "/api/devices/" + uid + "/start", "", response, error)) {
return false;
}
auto resp_json = json::parse(response);
if (resp_json["code"] != 0) {
error = resp_json["error"];
return false;
}
count = resp_json["data"]["start_count"];
return true;
}
bool DeviceClient::bindLicense(const std::string& uid, const std::string& license_code, std::string& error) {
json request;
request["license_code"] = license_code;
std::string response;
if (!post(base_url_ + "/api/devices/" + uid + "/license", request.dump(), response, error)) {
return false;
}
auto resp_json = json::parse(response);
if (resp_json["code"] != 0) {
error = resp_json["error"];
return false;
}
return true;
}
// ... HTTP 请求和加密相关的辅助函数实现 ...