|
@@ -0,0 +1,139 @@
|
|
|
|
+#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;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|