实现获取服务器配置和上传用户反馈接口
This commit is contained in:
parent
d4408d530f
commit
7bedcc75cf
|
@ -13,17 +13,6 @@
|
|||
#include <iphlpapi.h>
|
||||
#endif
|
||||
|
||||
bool GetServerConfig(ServerConfig& cfg)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static int xferinfo(void* p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
|
||||
{
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "ulnow=%lld, ultotal=%lld", ulnow, ultotal);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
std::string data((const char*) ptr, (size_t) size * nmemb);
|
||||
|
@ -33,6 +22,87 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
|
|||
return size * nmemb;
|
||||
}
|
||||
|
||||
bool GetServerConfig(ServerConfig& cfg)
|
||||
{
|
||||
cfg.postCrashInfo = false;
|
||||
cfg.postUserBehavior = false;
|
||||
cfg.postDeviceInfo = false;
|
||||
|
||||
bool ret = false;
|
||||
CURL* curl = curl_easy_init();
|
||||
if (nullptr != curl)
|
||||
{
|
||||
std::stringstream out;
|
||||
|
||||
std::string url = "http://up.appqy.com/api/ver/setting";
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
|
||||
struct curl_slist* headers = nullptr;
|
||||
headers = curl_slist_append(headers, "Accept-Encoding:gzip, deflate, sdch");
|
||||
headers = curl_slist_append(headers, "Accept-Language:zh-CN,zh;q=0.8");
|
||||
headers = curl_slist_append(headers, "Connection:keep-alive");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
|
||||
|
||||
/* Perform the request, res will get the return code */
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
/* Check for errors */
|
||||
if (res != CURLE_OK)
|
||||
fprintf(stderr, "curl_easy_perform() failed: %s", curl_easy_strerror(res));
|
||||
else
|
||||
ret = true;
|
||||
|
||||
curl_slist_free_all(headers);
|
||||
|
||||
std::string str_json = out.str(); // 返回值
|
||||
printf("%s\n", str_json.c_str());
|
||||
|
||||
cJSON* json = cJSON_Parse(str_json.c_str());
|
||||
if (nullptr != json)
|
||||
{
|
||||
cJSON* p = json->child;
|
||||
if (nullptr != p)
|
||||
{
|
||||
while (nullptr != p && 0 != strcmp(p->string, "data"))
|
||||
p = p->next;
|
||||
|
||||
if (nullptr != p && 0 == strcmp(p->string, "data") && p->type == cJSON_Object)
|
||||
{
|
||||
cJSON* p2 = p->child;
|
||||
while (nullptr != p2)
|
||||
{
|
||||
if (0 == strcmp(p2->string, "report_switch"))
|
||||
cfg.postUserBehavior = (bool)p2->valueint;
|
||||
else if (0 == strcmp(p2->string, "collapse_switch"))
|
||||
cfg.postCrashInfo = (bool)p2->valueint;
|
||||
else if (0 == strcmp(p2->string, "device_info_switch"))
|
||||
cfg.postDeviceInfo = (bool)p2->valueint;
|
||||
|
||||
p2 = p2->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cJSON_Delete(json);
|
||||
}
|
||||
|
||||
/* always cleanup */
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int xferinfo(void* p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
|
||||
{
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "ulnow=%lld, ultotal=%lld", ulnow, ultotal);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool CrashFileUpload(const std::string &filePath, std::string &crashFileUrl)
|
||||
{
|
||||
crashFileUrl.clear();
|
||||
|
@ -259,7 +329,8 @@ static bool Greater(const std::string &str1, const std::string &str2)
|
|||
return str1 > str2;
|
||||
}
|
||||
|
||||
static bool PostCrashInfo(const std::string &crashFileUrl, const std::string &exceptionAddr, const std::string &desc)
|
||||
static bool PostInfo(int type, const std::string &crashFileUrl, const std::string &exceptionAddr,
|
||||
const std::string &feedbackInfo, const std::string &feedbackContact, const std::string &desc)
|
||||
{
|
||||
bool ret = false;
|
||||
CURL* curl = curl_easy_init();
|
||||
|
@ -358,8 +429,17 @@ static bool PostCrashInfo(const std::string &crashFileUrl, const std::string &ex
|
|||
std::string source = osName + "-" + archName + "-" + oemName;
|
||||
|
||||
char json[1024];
|
||||
sprintf(json, "{\"type\":%d, \"mac\":\"%s\", \"localid\":\"%s\", \"v\":\"%s\", \"ref\":\"%s\", \"desc\":\"%s\", \"crashaddress\":\"%s\", \"crash_data\":\"%s\"}",
|
||||
3, macList[0].c_str(), md5Str, version.c_str(), source.c_str(), desc.c_str(), exceptionAddr.c_str(), crashFileUrl.c_str());
|
||||
if (3 == type)
|
||||
{
|
||||
sprintf(json, "{\"type\":%d, \"mac\":\"%s\", \"localid\":\"%s\", \"v\":\"%s\", \"ref\":\"%s\", \"desc\":\"%s\", \"crashaddress\":\"%s\", \"crash_data\":\"%s\"}",
|
||||
type, macList[0].c_str(), md5Str, version.c_str(), source.c_str(), desc.c_str(), exceptionAddr.c_str(), crashFileUrl.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(4 == type);
|
||||
sprintf(json, "{\"type\":%d, \"mac\":\"%s\", \"localid\":\"%s\", \"v\":\"%s\", \"ref\":\"%s\", \"desc\":\"%s\", \"content\":\"%s\", \"contact\":\"%s\"}",
|
||||
type, macList[0].c_str(), md5Str, version.c_str(), source.c_str(), desc.c_str(), feedbackInfo.c_str(), feedbackContact.c_str());
|
||||
}
|
||||
|
||||
struct curl_slist* headers = nullptr;
|
||||
headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
|
||||
|
@ -396,15 +476,15 @@ bool PostCrashInfo(const std::string& crashFilePath, const std::string& exceptio
|
|||
bool ret = CrashFileUpload(crashFilePath, crashFileUrl);
|
||||
if (ret)
|
||||
{
|
||||
ret = PostCrashInfo(crashFileUrl, exceptionAddr, "collapse");
|
||||
ret = PostInfo(3, crashFileUrl, exceptionAddr, "", "", "collapse");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool PostUserHabits(const std::list<std::string>& habits)
|
||||
bool PostUserFeedback(const std::string &info, const std::string &contact)
|
||||
{
|
||||
return false;
|
||||
return PostInfo(4, "", "", info, contact, "feedback");
|
||||
}
|
||||
|
||||
std::string GetCurrVersion()
|
||||
|
@ -544,7 +624,7 @@ bool GetVersionInfoList(std::list<VersionInfo>& versionList)
|
|||
oemName = "Huago";
|
||||
#endif
|
||||
|
||||
std::string url = "http://up.appqy.com/api/ver?oem=" + oemName + "&cpu=" + archName + "&sys=" + osName;
|
||||
std::string url = "http://up.appqy.com/api/ver?app=Scanner&oem=" + oemName + "&cpu=" + archName + "&sys=" + osName;
|
||||
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2);
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
|
||||
|
|
|
@ -8,8 +8,10 @@ struct ServerConfig
|
|||
{
|
||||
// 是否上传崩溃日志
|
||||
bool postCrashInfo;
|
||||
// 是否上传用户使用习惯
|
||||
bool postUserHabits;
|
||||
// 是否上传用户行为
|
||||
bool postUserBehavior;
|
||||
// 是否上传设备信息
|
||||
bool postDeviceInfo;
|
||||
};
|
||||
|
||||
struct VersionInfo
|
||||
|
@ -38,8 +40,23 @@ bool GetServerConfig(ServerConfig &cfg);
|
|||
// 上传崩溃日志
|
||||
bool PostCrashInfo(const std::string& crashFilePath, const std::string& exceptionAddr);
|
||||
|
||||
// 上传用户使用习惯
|
||||
bool PostUserHabits(const std::list<std::string>& habits);
|
||||
// 上传用户行为
|
||||
bool PostOpenApp();
|
||||
bool PostCloseApp();
|
||||
bool PostLogin();
|
||||
bool PostLogout();
|
||||
|
||||
// 上传设备信息
|
||||
bool PostDeviceInfo(const std::string &type, const std::string &name, const std::string &fw, const std::string &sn);
|
||||
bool PostOpenDevice(const std::string &sn);
|
||||
bool PostCloseDevice(const std::string &sn);
|
||||
bool PostScanCount(const std::string &sn, int count);
|
||||
bool PostClearRollerCount(const std::string &sn);
|
||||
bool PostRollerCount(const std::string &sn, int count);
|
||||
bool PostHistoryCount(const std::string &sn, int count);
|
||||
|
||||
// 上传用户反馈
|
||||
bool PostUserFeedback(const std::string &info, const std::string &contact);
|
||||
|
||||
// 获取当前版本号
|
||||
std::string GetCurrVersion();
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#include <Dbghelp.h>
|
||||
#endif
|
||||
|
||||
ServerConfig g_serverCfg;
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
static LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
||||
{
|
||||
|
@ -51,9 +53,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
|
||||
GetServerConfig(g_serverCfg);
|
||||
|
||||
if (g_serverCfg.postCrashInfo)
|
||||
{
|
||||
#if defined(HG_CMP_MSC)
|
||||
SetUnhandledExceptionFilter(UnhandledExceptionFilterEx);
|
||||
SetUnhandledExceptionFilter(UnhandledExceptionFilterEx);
|
||||
#endif
|
||||
}
|
||||
|
||||
QTranslator translator_qt_;
|
||||
if (translator_qt_.load(":translation/qt_zh_CN.qm"))
|
||||
|
|
Loading…
Reference in New Issue