#ifndef RVC_MOD_CENTERSETTING_CONN_H_ #define RVC_MOD_CENTERSETTING_CONN_H_ #pragma once #include "json/json.h" #include "SpSecureClient.h" #include "SpIni.h" #include "IHttpFunc.h" #include "EventCode.h" #include #include #ifdef WITH_CPPRESTSDK_IN_CENTER #include "CommEntityRestful.hpp" #include "microservices/api_terminal_center_config.h" struct ModuleConfigItemJson : public MicroServices::API::TerminalV3::ModuleConfigItem { JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_moudle, m_name, m_value) JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("moudle", "name", "value") }; struct CenterSettingReq { CenterSettingReq() :m_terminal_no(""), m_version(""), m_update_time(""),m_url(""),m_timeOut(0) {} std::string m_terminal_no; std::string m_version; std::string m_update_time; /** 兼容用途 [Gifur@202398]*/ std::string m_url; int m_timeOut; std::string m_config; std::vector configs; JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_terminal_no, m_version, configs, m_update_time) JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("terminal_no", "version", "config", "update_time") }; struct CenterSettingResponse { bool m_is_update; bool m_is_reset; std::string m_sm3; std::string m_version_no; std::vector m_config; std::string m_strConfig; JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_is_update, m_is_reset, m_sm3, m_version_no, m_strConfig) JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("is_update", "is_reset", "sm3", "version_no", "config") }; #else struct CenterSettingReq : CHTTPReq { CenterSettingReq() { #if defined(_MSC_VER) m_bTransCode = true; #else m_bTransCode = false; #endif //_MSC_VER } string m_terminal_no; string m_version; string m_update_time; string m_config; virtual string ToJson() { CSimpleStringA reqcontent = CSimpleStringA::Format("{\"terminal_no\":\"%s\", \"version\":\"%s\", \"update_time\":\"%s\", \"config\":[%s]}", m_terminal_no.c_str(), m_version.c_str(), m_update_time.c_str(), m_config.c_str()); return reqcontent.GetData(); } }; struct ConfigItem { std::string m_moudle; std::string m_name; std::string m_value; #ifdef RVC_OS_LINUX // 默认构造函数 ConfigItem() : m_moudle(""), m_name(""), m_value("") { } // 带参数的构造函数 ConfigItem(const std::string& module, const std::string& name, const std::string& value) : m_moudle(module), m_name(name), m_value(value) { } // 拷贝构造函数 ConfigItem(const ConfigItem& other) : m_moudle(other.m_moudle), m_name(other.m_name), m_value(other.m_value) { } #endif }; struct CenterSettingResponse : CHTTPRet { CenterSettingResponse(){} bool m_success; string m_message; bool m_is_update; bool m_is_reset; string m_version_no; string m_sm3; string m_strConfig; vector m_config; virtual bool Parse(string strData); }; #ifdef RVC_OS_LINUX #define SAFE_DELETE_HTTPCLIENT(obj) \ do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false) #endif //RVC_OS_LINUX #endif //WITH_CPPRESTSDK_IN_CENTER struct AddVersionReq : CHTTPReq { AddVersionReq(){} string m_terminal_no; string m_version; string m_update_time; virtual string ToJson() { char reqcontent[256]; sprintf(reqcontent, "{\"terminal_no\":\"%s\", \"version_no\":\"%s\", \"terminal_update_time\":\"%s\"}", m_terminal_no.c_str(), m_version.c_str(), m_update_time.c_str()); return reqcontent; } }; struct AddVersionResponse : CHTTPRet { AddVersionResponse() {} bool m_success; string m_message; virtual bool Parse(string strData); }; class CenterSettingsMicroServiceHelper { public: CenterSettingsMicroServiceHelper(CEntityBase* pEntity); #ifdef RVC_OS_WIN int GetCenterSetting(); #else int GetCenterSetting(bool byHand); #endif string GetLocalConfig(); //将集中配置转换成Json串 string GetUpdateTime(); //获取集中配置更新时间,如果文件不存在则获取当前系统时间 const char* GetErrMsg() { return m_strErrMsg.c_str(); } void GetTimeoutValue(int& timeout); void InitCenterSettingInfo(); bool WriteToConfig(const CenterSettingResponse& sResponse); void UpdateVersion(); void UpdateUrl(const string& url) { m_strUrl = url.c_str(); }; #ifdef RVC_OS_WIN int OnRequest(CenterSettingReq& req, CenterSettingResponse& res, string& errMsg = string("")); //轮询域名下载集中配置 #else int GetCenterSettingsFromHttp(CenterSettingReq& req, string& errMsg); //轮询域名下载集中配置 #endif string GetCurUrl() { return m_strCurUrl; } private: string m_strErrMsg; CEntityBase* m_pEntity; CSimpleStringA m_strLastTime; CSystemStaticInfo m_terminalInfo; IHttpFunc* m_pHttpFunc; CAutoArray m_arrKeys; vector m_arrURLs; CSimpleStringA m_strCurSite; CSmartPointer m_pCenterConfig; CSmartPointer m_pRunConfig; CSimpleStringA m_strFilePath; CSimpleStringA m_strBakPath; CSimpleStringA m_strVersion; CSimpleStringA m_strUrl; vector m_urlsFromShell; string m_strCurUrl; bool m_isFirst; }; #endif //RVC_MOD_CENTERSETTING_CONN_H_