TCL Copy Tool.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. 
  2. // TCL Tools.cpp: 定义应用程序的类行为。
  3. //
  4. #include "pch.h"
  5. #include "framework.h"
  6. #include "TCL Copy Tool.h"
  7. #include "TCL Copy ToolDlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. // CTCLToolsApp
  12. BEGIN_MESSAGE_MAP(CTCLToolsApp, CWinApp)
  13. ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
  14. END_MESSAGE_MAP()
  15. // CTCLToolsApp 构造
  16. CTCLToolsApp::CTCLToolsApp()
  17. {
  18. // 支持重新启动管理器
  19. m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
  20. // TODO: 在此处添加构造代码,
  21. // 将所有重要的初始化放置在 InitInstance 中
  22. }
  23. // 唯一的 CTCLToolsApp 对象
  24. CTCLToolsApp theApp;
  25. // CTCLToolsApp 初始化
  26. BOOL CTCLToolsApp::InitInstance()
  27. {
  28. // TODO: 调用 AfxInitRichEdit2() 以初始化 richedit2 库。\n" // 如果一个运行在 Windows XP 上的应用程序清单指定要
  29. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  30. //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
  31. INITCOMMONCONTROLSEX InitCtrls;
  32. InitCtrls.dwSize = sizeof(InitCtrls);
  33. // 将它设置为包括所有要在应用程序中使用的
  34. // 公共控件类。
  35. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  36. InitCommonControlsEx(&InitCtrls);
  37. AfxInitRichEdit2();
  38. CWinApp::InitInstance();
  39. #if 1
  40. // 获取模块的目录;
  41. TCHAR szDrive[MAX_PATH] = { 0 };
  42. TCHAR szDir[MAX_PATH] = { 0 };
  43. TCHAR szExt[MAX_PATH] = { 0 };
  44. ::GetModuleFileName(NULL, Global::g_szCurModulePath, sizeof(Global::g_szCurModulePath) / sizeof(TCHAR));
  45. //_tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
  46. //_tcscpy_s(Global::g_szCurModuleDir, szDrive);
  47. //_tcscat_s(Global::g_szCurModuleDir, szDir);
  48. ::GetCurrentDirectory(MAX_PATH, Global::g_szCurModuleDir);
  49. _tcscat_s(Global::g_szCurModuleDir, _T("\\"));
  50. // config文件路径;
  51. _stprintf_s(Global::g_szConfig, _T("%sconfig.ini"), Global::g_szCurModuleDir);
  52. // 日志模板;
  53. char szFileName[MAX_PATH];
  54. sprintf_s(szFileName, "%s\\log4crc.xml", Global::g_szCurModuleDir);
  55. ///设置日志配置文件名
  56. LOG4C_PARAM_CFG_FILE_NAME(szFileName);
  57. ///设置日志级别
  58. LOG4C_PARAM_LOG_LEVEL("unknown");
  59. ///设置日志文件大小
  60. LOG4C_PARAM_LOG_FILE_SIZE(1024*1024*10);
  61. ///设置生成日志文件个数,达到最大个数将自动覆盖最旧的日志
  62. LOG4C_PARAM_LOG_FILE_NUM(100);
  63. ///设置每次记录日志都重新读取日志配置文件
  64. LOG4C_PARAM_REREAD_LOG_CFG_FILE(1);
  65. ///带参数日志模块初始化,以上所有设置了的参数都将生效,没有设置的采用缺省值
  66. LOG4C_INIT_WITH_PARAM();
  67. #if 0 // 等级示例;
  68. LOG4C((LOG_FATAL, "LOG_FATAL!"));
  69. LOG4C((LOG_ALERT, "LOG_ALERT!"));
  70. LOG4C((LOG_CRIT, "LOG_CRIT!"));
  71. LOG4C((LOG_ERROR, "LOG_ERROR!"));
  72. LOG4C((LOG_WARN, "LOG_WARN!"));
  73. LOG4C((LOG_NOTICE, "LOG_NOTICE!"));
  74. LOG4C((LOG_INFO, "LOG_INFO!"));
  75. LOG4C((LOG_DEBUG, "LOG_DEBUG!"));
  76. LOG4C((LOG_TRACE, "LOG_TRACE!"));
  77. LOG4C((LOG_NOTSET, "LOG_NOTSET!"));
  78. LOG4C((LOG_UNKNOWN, "LOG_UNKNOWN!"));
  79. #endif
  80. LOG4C((LOG_NOTICE, "程序开始运行!"));
  81. #endif
  82. Global::GetConfig();
  83. Global::GetMacAddress();
  84. AfxEnableControlContainer();
  85. if (g_db.Open(Global::g_tConfig.com))
  86. g_db.RemoveReportInfo();
  87. // 启动线程上报;
  88. std::thread t([]() {
  89. COTA ota;
  90. BOOL bRet;
  91. std::string xml;
  92. std::vector<STReport> vt;
  93. while (true)
  94. {
  95. vt.clear();
  96. g_db.QueryUnReportInfo(vt);
  97. for (auto it : vt)
  98. {
  99. if ( _tcsicmp("https://cn.ota.qhmoka.com/ota-services/report/reportToolsLog", it.url.c_str()) == 0 )
  100. {
  101. bRet = ota.ReportLog(it.url, it.content);
  102. }
  103. else
  104. {
  105. bRet = ota.GetKeyInfo(it.url, it.content, "", "", xml);
  106. }
  107. if (bRet)
  108. {
  109. // 上报成功;
  110. g_db.UpdateKeyReportStatus(it);
  111. }
  112. std::this_thread::sleep_for(std::chrono::microseconds(500));
  113. }
  114. std::this_thread::sleep_for(std::chrono::seconds(10));
  115. }
  116. });
  117. t.detach();
  118. //std::string vcode;
  119. //g_ota.GetVCode("CC-A1-2B-03-09-13", vcode);
  120. // 创建 shell 管理器,以防对话框包含
  121. // 任何 shell 树视图控件或 shell 列表视图控件。
  122. CShellManager *pShellManager = new CShellManager;
  123. // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
  124. CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
  125. // 标准初始化
  126. // 如果未使用这些功能并希望减小
  127. // 最终可执行文件的大小,则应移除下列
  128. // 不需要的特定初始化例程
  129. // 更改用于存储设置的注册表项
  130. // TODO: 应适当修改该字符串,
  131. // 例如修改为公司或组织名
  132. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  133. CTCLCopyToolDlg dlg;
  134. m_pMainWnd = &dlg;
  135. INT_PTR nResponse = dlg.DoModal();
  136. if (nResponse == IDOK)
  137. {
  138. // TODO: 在此放置处理何时用
  139. // “确定”来关闭对话框的代码
  140. }
  141. else if (nResponse == IDCANCEL)
  142. {
  143. // TODO: 在此放置处理何时用
  144. // “取消”来关闭对话框的代码
  145. }
  146. else if (nResponse == -1)
  147. {
  148. TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
  149. TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
  150. }
  151. // 删除上面创建的 shell 管理器。
  152. if (pShellManager != nullptr)
  153. {
  154. delete pShellManager;
  155. }
  156. #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
  157. ControlBarCleanUp();
  158. #endif
  159. // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
  160. // 而不是启动应用程序的消息泵。
  161. return FALSE;
  162. }
  163. int CTCLToolsApp::ExitInstance()
  164. {
  165. // TODO: 在此添加专用代码和/或调用基类
  166. g_db.Close();
  167. g_siacp.CloseComm();
  168. return CWinApp::ExitInstance();
  169. }