WebAPIBase.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "WebAPIBase.h"
  2. #include "spdlog/spdlog.h"
  3. WebAPIBase::~WebAPIBase()
  4. {
  5. if(m_httpApi != nullptr)
  6. {
  7. delete m_httpApi;
  8. m_httpApi = nullptr;
  9. }
  10. }
  11. /* 初始化WebApi */
  12. bool WebAPIBase::initWebApi(const QString& url,const QString& serID, const QString appType, const QString& serverIP)
  13. {
  14. if(m_httpApi == nullptr)
  15. {
  16. m_httpApi = new lhhttpapi;
  17. }
  18. if(!m_httpApi->Load())
  19. {
  20. SPDLOG_ERROR("Load WebAPI failed");
  21. return false;
  22. }
  23. SPDLOG_DEBUG("URL: {}", url.toStdString());
  24. SPDLOG_DEBUG("ServerID: {}", serID.toStdString());
  25. SPDLOG_DEBUG("ServerKey: {}", appType.toStdString());
  26. void* pHttp = nullptr;
  27. int i = 0;
  28. for(i = 0; i < 3; i++)
  29. {
  30. pHttp = m_httpApi->DBInit(url.toStdString().c_str(), true);
  31. if(pHttp != nullptr)
  32. {
  33. break;
  34. }
  35. SPDLOG_ERROR("设置WebAPI地址失败: {}", m_httpApi->DoGetLastError(&i).toStdString());
  36. }
  37. if(i >= 3)
  38. {
  39. SPDLOG_ERROR("WebAPI设置地址错误!");
  40. return false;
  41. }
  42. int ret = 0;
  43. #ifdef QT_DEBUG
  44. /* 获取服务器列表 */
  45. // char serverList[8192]={0};
  46. // ret = m_httpApi->DBGetServerList(serverList, 8192-1);
  47. // if(ret != 0)
  48. // {
  49. // SPDLOG_LOGGER_ERROR(m_logger, "Get server list failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  50. // return false;
  51. // }
  52. // SPDLOG_LOGGER_INFO(m_logger, QString("\nGet server list success:%1").arg(serverList));
  53. #endif
  54. /* 登录,第二个参数是限制的服务 */
  55. for(i = 0; i < 3; i++)
  56. {
  57. ret = m_httpApi->DBLogin("", serID, appType, m_userToken, true, pHttp);
  58. if(ret == 0)
  59. {
  60. break;
  61. }
  62. SPDLOG_ERROR("Login failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  63. /* 登录失败,等待一段时间 */
  64. QThread::msleep(200);
  65. }
  66. if(i >= 3)
  67. {
  68. SPDLOG_ERROR("登陆WebAPI失败!");
  69. return false;
  70. }
  71. SPDLOG_INFO("WebAPI Login success!");
  72. return true;
  73. }
  74. /**
  75. * @brief 将json的key转换成小写,这种转换不会转值中嵌套的json
  76. *
  77. * @param json
  78. * @param result
  79. * @return true
  80. * @return false
  81. */
  82. bool WebAPIBase::convertJsonKeyToLower(const nJson& json, nJson& result)
  83. {
  84. for(auto& it : json.items())
  85. {
  86. std::string key = it.key();
  87. std::transform(key.begin(), key.end(), key.begin(), ::tolower); // 转换成小写
  88. /* 是object */
  89. if(it.value().is_object())
  90. {
  91. convertJsonKeyToLower(it.value(), result[key]); // 递归处理嵌套的对象
  92. }
  93. /* 是array */
  94. else if(it.value().is_array())
  95. {
  96. nJson arrayResult = nJson::array();
  97. for(auto& item : it.value())
  98. {
  99. if(item.is_object())
  100. {
  101. /* 如果是对象,递归转换 */
  102. nJson itemJson = nJson::object();
  103. convertJsonKeyToLower(item, itemJson);
  104. /* 将转换后的对象添加到数组中 */
  105. arrayResult.push_back(itemJson);
  106. }
  107. else
  108. {
  109. arrayResult.push_back(item);
  110. }
  111. }
  112. result[key] = arrayResult;
  113. }
  114. else
  115. {
  116. /* 直接赋值非对象和非数组类型 */
  117. result[key] = it.value();
  118. }
  119. }
  120. return true;
  121. }