123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include "WebAPIBase.h"
- #include "spdlog/spdlog.h"
- WebAPIBase::~WebAPIBase()
- {
- if(m_httpApi != nullptr)
- {
- delete m_httpApi;
- m_httpApi = nullptr;
- }
- }
- /* 初始化WebApi */
- bool WebAPIBase::initWebApi(const QString& url,const QString& serID, const QString appType, const QString& serverIP)
- {
- if(m_httpApi == nullptr)
- {
- m_httpApi = new lhhttpapi;
- }
-
- if(!m_httpApi->Load())
- {
- SPDLOG_ERROR("Load WebAPI failed");
- return false;
- }
- SPDLOG_DEBUG("URL: {}", url.toStdString());
- SPDLOG_DEBUG("ServerID: {}", serID.toStdString());
- SPDLOG_DEBUG("ServerKey: {}", appType.toStdString());
- void* pHttp = nullptr;
- int i = 0;
- for(i = 0; i < 3; i++)
- {
- pHttp = m_httpApi->DBInit(url.toStdString().c_str(), true);
- if(pHttp != nullptr)
- {
- break;
- }
- SPDLOG_ERROR("设置WebAPI地址失败: {}", m_httpApi->DoGetLastError(&i).toStdString());
- }
- if(i >= 3)
- {
- SPDLOG_ERROR("WebAPI设置地址错误!");
- return false;
- }
-
- int ret = 0;
- #ifdef QT_DEBUG
- /* 获取服务器列表 */
- // char serverList[8192]={0};
- // ret = m_httpApi->DBGetServerList(serverList, 8192-1);
- // if(ret != 0)
- // {
- // SPDLOG_LOGGER_ERROR(m_logger, "Get server list failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
- // return false;
- // }
- // SPDLOG_LOGGER_INFO(m_logger, QString("\nGet server list success:%1").arg(serverList));
- #endif
- /* 登录,第二个参数是限制的服务 */
- for(i = 0; i < 3; i++)
- {
- ret = m_httpApi->DBLogin("", serID, appType, m_userToken, true, pHttp);
- if(ret == 0)
- {
- break;
- }
- SPDLOG_ERROR("Login failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
- /* 登录失败,等待一段时间 */
- QThread::msleep(200);
- }
- if(i >= 3)
- {
- SPDLOG_ERROR("登陆WebAPI失败!");
- return false;
- }
- SPDLOG_INFO("WebAPI Login success!");
- return true;
- }
- /**
- * @brief 将json的key转换成小写,这种转换不会转值中嵌套的json
- *
- * @param json
- * @param result
- * @return true
- * @return false
- */
- bool WebAPIBase::convertJsonKeyToLower(const nJson& json, nJson& result)
- {
- for(auto& it : json.items())
- {
- std::string key = it.key();
- std::transform(key.begin(), key.end(), key.begin(), ::tolower); // 转换成小写
- /* 是object */
- if(it.value().is_object())
- {
- convertJsonKeyToLower(it.value(), result[key]); // 递归处理嵌套的对象
- }
- /* 是array */
- else if(it.value().is_array())
- {
- nJson arrayResult = nJson::array();
- for(auto& item : it.value())
- {
- if(item.is_object())
- {
- /* 如果是对象,递归转换 */
- nJson itemJson = nJson::object();
- convertJsonKeyToLower(item, itemJson);
- /* 将转换后的对象添加到数组中 */
- arrayResult.push_back(itemJson);
- }
- else
- {
- arrayResult.push_back(item);
- }
- }
- result[key] = arrayResult;
- }
- else
- {
- /* 直接赋值非对象和非数组类型 */
- result[key] = it.value();
- }
- }
- return true;
- }
|