YAServer.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. // YAServer.cpp : 定义应用程序的类行为。
  2. //
  3. #include "stdafx.h"
  4. #include "YAServer.h"
  5. #include "YAServerDlg.h"
  6. #include "def.h"
  7. #include "INIFILE.h"
  8. #include "Functions/Functions.h"
  9. #include "minidupm.h"
  10. #include "tlhelp32.h"
  11. #include "ProcessRemodule.h"
  12. #include "log_process_module.h"
  13. #include "./system_basic_info/SystemAnalysis.h"
  14. #include "./debug_server/debug_server_socket.h"
  15. #pragma warning(disable: 4005)
  16. extern int debug_server_init(void);
  17. // CYAServerApp
  18. BEGIN_MESSAGE_MAP(CYAServerApp, CWinApp)
  19. ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
  20. END_MESSAGE_MAP()
  21. // CYAServerApp 构造
  22. CYAServerApp::CYAServerApp()
  23. {
  24. // 支持重新启动管理器
  25. m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
  26. // TODO: 在此处添加构造代码,
  27. // 将所有重要的初始化放置在 InitInstance 中
  28. }
  29. // 唯一的一个 CYAServerApp 对象
  30. CYAServerApp theApp;
  31. //HINSTANCE g_hResOld; // 旧的资源句柄
  32. //HINSTANCE g_hDll; // DLL资源句柄
  33. // CYAServerApp 初始化
  34. BOOL CYAServerApp::InitInstance()
  35. {
  36. // 如果一个运行在 Windows XP 上的应用程序清单指定要
  37. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  38. //则需要 InitCommonControlsEx()。否则,将无法创建窗口。
  39. //避免启动两个采集程序
  40. CreateMutex(NULL, FALSE, _T("MyMux"));
  41. if(GetLastError() == ERROR_ALREADY_EXISTS){
  42. HWND hWnd = ::FindWindow(NULL, _T("永安信通数据采集系统"));
  43. ::PostMessage(hWnd, WM_QUIT, 0, 0);
  44. //caption改为你窗口的具体caption
  45. //::ShowWindow(hWnd,SW_SHOW);
  46. //::SetForegroundWindow(hWnd); // 激活
  47. //return FALSE;
  48. }
  49. INITCOMMONCONTROLSEX InitCtrls;
  50. InitCtrls.dwSize = sizeof(InitCtrls);
  51. // 将它设置为包括所有要在应用程序中使用的
  52. // 公共控件类。
  53. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  54. InitCommonControlsEx(&InitCtrls);
  55. SetUnhandledExceptionFilter(ExceptionFilter);
  56. CWinApp::InitInstance();
  57. AfxEnableControlContainer();
  58. // 创建 shell 管理器,以防对话框包含
  59. // 任何 shell 树视图控件或 shell 列表视图控件。
  60. CShellManager *pShellManager = new CShellManager;
  61. // 标准初始化
  62. // 如果未使用这些功能并希望减小
  63. // 最终可执行文件的大小,则应移除下列
  64. // 不需要的特定初始化例程
  65. // 更改用于存储设置的注册表项
  66. // TODO: 应适当修改该字符串,
  67. // 例如修改为公司或组织名
  68. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  69. init_param();
  70. load_conf();
  71. service_task_init();
  72. debug_server_init();
  73. debug_print_syslog(0, "Service thread, SQL thread, log thread Started.");
  74. //debug_server_process_thread_init();
  75. //g_hResOld = AfxGetResourceHandle();
  76. //AfxSetResourceHandle(g_hDll);
  77. CYAServerDlg dlg;
  78. m_pMainWnd = &dlg;
  79. INT_PTR nResponse = dlg.DoModal();
  80. if (nResponse == IDOK)
  81. {
  82. // TODO: 在此放置处理何时用
  83. // “确定”来关闭对话框的代码
  84. }
  85. else if (nResponse == IDCANCEL)
  86. {
  87. // TODO: 在此放置处理何时用
  88. // “取消”来关闭对话框的代码
  89. }
  90. // 删除上面创建的 shell 管理器。
  91. if (pShellManager != NULL)
  92. {
  93. delete pShellManager;
  94. }
  95. //AfxSetResourceHandle(g_hResOld);
  96. // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
  97. // 而不是启动应用程序的消息泵。
  98. return FALSE;
  99. }
  100. /*
  101. * 写入配置文件
  102. *
  103. * param
  104. * section ------ 字段名
  105. * key ------ 键值
  106. * value ------ 值
  107. *
  108. * 例子:
  109. * [DB]
  110. * user=root
  111. * DB为字段名, user为键值,root为键值
  112. *
  113. *
  114. * return
  115. * 无
  116. *
  117. */
  118. void CYAServerApp::writeini( string section, string key, string value )
  119. {
  120. WritePrivateProfileStringA(section.c_str(), key.c_str(), value.c_str(), FILEPATH_SERVER_CONFIG);
  121. }
  122. /*
  123. * 载入主数据库配置和备用数据库配置
  124. *
  125. * param
  126. * 无
  127. *
  128. * return
  129. * 无
  130. *
  131. */
  132. void CYAServerApp::load_db_conf()
  133. {
  134. IniFile ini;
  135. if(ini.open(FILEPATH_SERVER_CONFIG)){
  136. //主数据库ip
  137. dbhost = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  138. //主数据库用户名
  139. dbuser = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  140. //主数据库密码
  141. dbpwd = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  142. //主数据库数据库名
  143. dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  144. //是否使用备份数据库
  145. dbbackup = ini.read(CONF_SECT_DB, CONF_DB_KEY_DB_BACKUP);
  146. //主数据库服务器的端口
  147. dbport = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());
  148. //主数据库的编码
  149. dbencoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  150. //备用数据库ip
  151. dbhost_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_HOST);
  152. //备用数据库用户名
  153. dbuser_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_USER);
  154. //备用数据库密码
  155. dbpwd_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PWD);
  156. //备用数据库数据库名称
  157. dbname_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME);
  158. //备用数据库端口
  159. dbport_bk = atoi(ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PORT).c_str());
  160. //备用数据库编码
  161. dbencoding_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING);
  162. }
  163. }
  164. /*
  165. * 保存主数据库配置和备用数据库配置到配置文件
  166. *
  167. * param
  168. * 无
  169. *
  170. * return
  171. * 无
  172. *
  173. */
  174. void CYAServerApp::save_db_conf()
  175. {
  176. char t[20];
  177. string s;
  178. sprintf_s(t, "%d", dbport);
  179. s = t;
  180. writeini(CONF_SECT_DB, CONF_DB_KEY_HOST, dbhost);
  181. writeini(CONF_SECT_DB, CONF_DB_KEY_USER, dbuser);
  182. writeini(CONF_SECT_DB, CONF_DB_KEY_PWD, dbpwd);
  183. writeini(CONF_SECT_DB, CONF_DB_KEY_DBNAME, dbname);
  184. writeini(CONF_SECT_DB, CONF_DB_KEY_DB_BACKUP, dbbackup);
  185. writeini(CONF_SECT_DB, CONF_DB_KEY_ENCODING, dbencoding);
  186. writeini(CONF_SECT_DB, CONF_DB_KEY_PORT, s);
  187. sprintf_s(t, "%d", dbport_bk);
  188. s = t;
  189. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_HOST, dbhost_bk);
  190. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_USER, dbuser_bk);
  191. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_PWD, dbpwd_bk);
  192. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME, dbname_bk);
  193. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING, dbencoding_bk);
  194. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_PORT, s);
  195. }
  196. /*
  197. * 从配置文件载入系统配置
  198. *
  199. * param
  200. * 无
  201. *
  202. * return
  203. * 无
  204. *
  205. */
  206. void CYAServerApp::load_sys_conf()
  207. {
  208. locate_type = 0;
  209. IniFile ini;
  210. send_json_postion = 1000;
  211. send_json_counting = 5000;
  212. send_json_alarm = 5000;
  213. warning_point_alarm = 10000;
  214. send_json_device = 10000;
  215. ws_connect_interval = 2000;
  216. time_send_call = 5000;
  217. time_send_help = 5000;
  218. send_json_drivingface = 30000;
  219. send_json_leader = 1800000; //30 * 60 * 1000;
  220. load_leader = 14400000; // 4 * 60 * 60 * 1000
  221. cal_vehicle_meeting = 5000;
  222. tcp_port = PORT_SERVER_MASTER;
  223. send_sync_time = 600000;
  224. shutdown_timeout_threshold = 480;
  225. vibrate_threshold = 50;
  226. if(ini.open(FILEPATH_SERVER_CONFIG)){
  227. ws_url = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL);
  228. ws_url_bk = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL_BK);
  229. tcp_host = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_HOST);
  230. tcp_port = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_PORT).c_str());
  231. use_filter = (atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER).c_str()) == 0 ? FALSE : TRUE);
  232. use_filter_odd = (atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER_ODD).c_str()) == 0 ? FALSE : TRUE);
  233. recon_server = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_SERVER).c_str());
  234. recon_db = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_DB).c_str());
  235. reader_lost = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_READER_LOST).c_str());
  236. card_lost = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_CARD_LOST).c_str());
  237. timing_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TIMING_INTERVAL).c_str());
  238. sampling_interval = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_SAMPLING_INTERVAL).c_str());
  239. coor_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_COORDINATE_ERROR).c_str());
  240. ranging_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RANGING_ERROR).c_str());
  241. move_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_MOVING_ERROR).c_str());
  242. z_offset = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_Z_OFFSET).c_str());
  243. locate_type = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_LOCATE_TYPE).c_str());
  244. heart_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING,CONF_SERVER_HEART_INTERVAL).c_str());
  245. send_json_postion = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_POSION).c_str());
  246. send_json_counting = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_COUNTING).c_str());
  247. send_json_alarm = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_ALARM).c_str());
  248. warning_point_alarm = atoi(ini.read(CONF_SECT_SERVER_SETTING,CONF_WARNING_POINT_ALARM).c_str());
  249. send_json_device = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DEVICE).c_str());
  250. send_json_drivingface = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DRIVINGFACE).c_str());
  251. send_json_leader = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_LEADER).c_str());
  252. load_leader = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_LOAD_LEADER).c_str());
  253. cal_vehicle_meeting = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_CAL_VEHICLE_MEETING).c_str());
  254. ws_connect_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_WS_CONNECT_INTERVAL).c_str());
  255. time_send_call = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_CALLINFO_INTERVAL).c_str());
  256. time_send_help = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_HELPINFO_INTERVAL).c_str());
  257. send_sync_time = atoi(ini.read(CONF_SECT_SERVER_SETTING,CONF_SEND_SYNC_TIME_INTERVAL).c_str());
  258. shutdown_timeout_threshold = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SHUTDOWN_TIMEOUT_THRESHOLD).c_str());
  259. vibrate_threshold = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_VIBRATE_THRESHOLD).c_str());
  260. }
  261. }
  262. /*
  263. * 保存系统设置到配置文件
  264. *
  265. * param
  266. * 无
  267. *
  268. * return
  269. * 无
  270. *
  271. */
  272. void CYAServerApp::save_sys_conf()
  273. {
  274. char t[20];
  275. string s;
  276. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL, ws_url);
  277. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL_BK, ws_url_bk);
  278. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER, use_filter ? "1" : "0");
  279. sprintf_s(t, "%d", recon_server);
  280. s = t;
  281. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_SERVER, s);
  282. sprintf_s(t, "%d", recon_db);
  283. s = t;
  284. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_DB, s);
  285. sprintf_s(t, "%d", reader_lost);
  286. s = t;
  287. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_READER_LOST, s);
  288. sprintf_s(t, "%d", card_lost);
  289. s = t;
  290. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_CARD_LOST, s);
  291. sprintf_s(t, "%d", timing_interval);
  292. s = t;
  293. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_TIMING_INTERVAL, s);
  294. sprintf_s(t, "%f", sampling_interval);
  295. s = t;
  296. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_SAMPLING_INTERVAL, s);
  297. sprintf_s(t, "%f", z_offset);
  298. s = t;
  299. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_Z_OFFSET, s);
  300. sprintf_s(t, "%f", coor_error);
  301. s = t;
  302. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_COORDINATE_ERROR, s);
  303. sprintf_s(t, "%f", ranging_error);
  304. s = t;
  305. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RANGING_ERROR, s);
  306. sprintf_s(t, "%f", move_error);
  307. s = t;
  308. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_MOVING_ERROR, s);
  309. sprintf_s(t, "%d", tcp_port);
  310. s = t;
  311. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_PORT, s);
  312. }
  313. /*
  314. * 从配置文件载入日志配置
  315. *
  316. * param
  317. * 无
  318. *
  319. * return
  320. * 无
  321. *
  322. */
  323. void CYAServerApp::load_log_conf()
  324. {
  325. IniFile ini;
  326. if(ini.open(FILEPATH_SERVER_CONFIG)){
  327. //系统状态
  328. log_sys_status = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_SYS_STATUS).c_str()) == 0 ? FALSE : TRUE);
  329. //原始数据,底层数据
  330. log_raw_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_RAW_DATA).c_str()) == 0 ? FALSE : TRUE);
  331. //格式化数据
  332. log_parse_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_PARSE_DATA).c_str()) == 0 ? FALSE : TRUE);
  333. //发送数据包
  334. log_send_package = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_SEND_EVENT).c_str()) == 0 ? FALSE : TRUE);
  335. //接收数据包
  336. log_recv_package = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_REV_EVENT).c_str()) == 0 ? FALSE : TRUE);
  337. //定位数据
  338. log_locate_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_LOCATE_DATA).c_str()) == 0 ? FALSE : TRUE);
  339. }
  340. }
  341. /*
  342. * 保存日志设置
  343. *
  344. * param
  345. * 无
  346. *
  347. * return
  348. * 无
  349. *
  350. */
  351. void CYAServerApp::save_log_conf()
  352. {
  353. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_SYS_STATUS, log_sys_status ? "1" : "0");
  354. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_RAW_DATA, log_raw_data ? "1" : "0");
  355. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_PARSE_DATA, log_parse_data ? "1" : "0");
  356. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_SEND_EVENT, log_send_package ? "1" : "0");
  357. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_REV_EVENT, log_recv_package ? "1" : "0");
  358. writeini(CONF_SECT_SERVER_LOG,CONF_LOG_LOCATE_DATA,log_locate_data ? "1" : "0");
  359. }
  360. /*
  361. * 设置监控服务器句柄以及路径
  362. *
  363. * param
  364. * hwd ------ 主对话框窗口句柄
  365. *
  366. * return
  367. * 无
  368. *
  369. */
  370. void CYAServerApp::set_server_handle(HWND hwd)
  371. {
  372. char t[20];
  373. char szAppdir[MAX_PATH+1] = {0};
  374. GetModuleFileNameA(NULL, szAppdir , MAX_PATH);
  375. sprintf_s(t, "%d", DWORD(hwd));
  376. writeini(CONF_SECT_MONITOR, CONF_MONITOR_SERVER_HANDLE, t);
  377. writeini(CONF_SECT_MONITOR, CONF_MONITOR_SERVER_PATH, szAppdir);
  378. }
  379. /*
  380. * 从配置文件载入监控配置
  381. *
  382. * param
  383. * 无
  384. *
  385. * return
  386. * 无
  387. *
  388. */
  389. void CYAServerApp::load_monitor_conf()
  390. {
  391. IniFile ini;
  392. if(ini.open(FILEPATH_SERVER_CONFIG)){
  393. m_hwnd_monitor = HWND(atoi(ini.read(CONF_SECT_MONITOR, CONF_MONITOR_MONITOR_HANDLE).c_str()));
  394. string path = ini.read(CONF_SECT_MONITOR, CONF_MONITOR_MONITOR_PATH);
  395. sprintf_s(m_path_monitor.get(), MAX_PATH, "%s", path.c_str());
  396. //sprintf( m_path_monitor, "%s", path.c_str());
  397. }
  398. }
  399. /*
  400. * 初始化监视软件路径
  401. *
  402. * param
  403. * 无
  404. *
  405. * return
  406. * 无
  407. *
  408. */
  409. void CYAServerApp::init_param()
  410. {
  411. m_path_monitor = nullptr;
  412. std::unique_ptr<char> tmp(new char[MAX_PATH]);
  413. m_path_monitor = std::move(tmp);
  414. memset(m_path_monitor.get(),0,MAX_PATH*sizeof(char));
  415. }
  416. /*
  417. * 保存间隔配置到配置文件
  418. *
  419. * param
  420. * 无
  421. *
  422. * return
  423. * 无
  424. *
  425. */
  426. void CYAServerApp::save_interval_conf()
  427. {
  428. char t[20];
  429. string s;
  430. sprintf_s(t, "%d", send_json_postion);
  431. s = t;
  432. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_POSION, s);
  433. sprintf_s(t, "%d", send_json_counting);
  434. s = t;
  435. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_COUNTING, s);
  436. sprintf_s(t, "%d", send_json_alarm);
  437. s = t;
  438. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_ALARM, s);
  439. sprintf_s(t, "%d", send_json_device);
  440. s = t;
  441. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DEVICE, s);
  442. }
  443. void CYAServerApp::load_reader_conf()
  444. {
  445. IniFile ini;
  446. if(ini.open(FILEPATH_SERVER_CONFIG)){
  447. //分站发送时间消息
  448. reader_interval_time = atoi(ini.read(CONF_SECT_READER, CONF_READER_INTERVAL_TIME).c_str());
  449. }
  450. }
  451. void CYAServerApp::save_reader_conf()
  452. {
  453. char t[20] = {0};
  454. string s;
  455. sprintf_s(t, "%d", reader_interval_time);
  456. s = t;
  457. writeini(CONF_SECT_READER, CONF_READER_INTERVAL_TIME, s);
  458. }
  459. BOOL CYAServerApp::KillProcessFromName(CString strProcessName)
  460. {
  461. //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)
  462. HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  463. //PROCESSENTRY32进程快照的结构体
  464. PROCESSENTRY32 pe;
  465. //实例化后使用Process32First获取第一个快照的进程前必做的初始化操作
  466. pe.dwSize = sizeof(PROCESSENTRY32);
  467. //下面的IF效果同:
  468. //if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄
  469. if(!Process32First(hSnapShot,&pe))
  470. {
  471. return FALSE;
  472. }
  473. //将字符串转换为小写
  474. strProcessName.MakeLower();
  475. //如果句柄有效 则一直获取下一个句柄循环下去
  476. while (Process32Next(hSnapShot,&pe))
  477. {
  478. //pe.szExeFile获取当前进程的可执行文件名称
  479. CString scTmp = pe.szExeFile;
  480. //将可执行文件名称所有英文字母修改为小写
  481. scTmp.MakeLower();
  482. //比较当前进程的可执行文件名称和传递进来的文件名称是否相同
  483. //相同的话Compare返回0
  484. if(!scTmp.Compare(strProcessName))
  485. {
  486. //从快照进程中获取该进程的PID(即任务管理器中的PID)
  487. DWORD dwProcessID = pe.th32ProcessID;
  488. HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);
  489. ::TerminateProcess(hProcess,0);
  490. CloseHandle(hProcess);
  491. return TRUE;
  492. }
  493. scTmp.ReleaseBuffer();
  494. }
  495. strProcessName.ReleaseBuffer();
  496. return FALSE;
  497. }
  498. void CYAServerApp::load_conf()
  499. {
  500. load_db_conf();
  501. load_sys_conf();
  502. load_log_conf();
  503. load_reader_conf();
  504. }