@@ -17,12 +17,15 @@ XHANDLE xhHTTPSocket = NULL;
1717XHANDLE xhHTTPHeart = NULL ;
1818XHANDLE xhHTTPPacket = NULL ;
1919XHANDLE xhHTTPPool = 0 ;
20+ // 线程
21+ unique_ptr<thread> pSTDThread_Deamon;
2022// 配置文件
2123XENGINE_SERVICECONFIG st_ServiceConfig;
2224XENGINE_OPENCCCONFIG st_OPenccConfig;
2325XENGINE_QRCODECONFIG st_QRCodeConfig;
2426XENGINE_PLUGINCONFIG st_PluginLibConfig;
2527XENGINE_PLUGINCONFIG st_PluginLuaConfig;
28+ XENGINE_DEAMONAPPLIST st_DeamonAppConfig;
2629
2730void ServiceApp_Stop (int signo)
2831{
@@ -47,6 +50,11 @@ void ServiceApp_Stop(int signo)
4750 ModuleHelp_P2PClient_Destory ();
4851 // 销毁日志资源
4952 HelpComponents_XLog_Destroy (xhLog);
53+ // 销毁线程
54+ if (NULL != pSTDThread_Deamon)
55+ {
56+ pSTDThread_Deamon->join ();
57+ }
5058 }
5159#ifdef _MSC_BUILD
5260 WSACleanup ();
@@ -94,6 +102,7 @@ int main(int argc, char** argv)
94102 LPCXSTR lpszHTTPMime = _X (" ./XEngine_Config/HttpMime.types" );
95103 LPCXSTR lpszHTTPCode = _X (" ./XEngine_Config/HttpCode.types" );
96104 LPCXSTR lpszLogFile = _X (" ./XEngine_Log/XEngine_HttpApp.Log" );
105+ LPCXSTR lpszConfigDeamon = _X (" ./XEngine_Config/XEngine_DeamonConfig.json" );
97106 HELPCOMPONENTS_XLOG_CONFIGURE st_XLogConfig;
98107 THREADPOOL_PARAMENT** ppSt_ListHTTPParam;
99108
@@ -108,9 +117,9 @@ int main(int argc, char** argv)
108117 st_XLogConfig.XLog_MaxSize = 1024000 ;
109118 _tcsxcpy (st_XLogConfig.tszFileName , lpszLogFile);
110119 // 初始化参数
111- if (!XEngine_Configure_Parament (argc, argv, &st_ServiceConfig ))
120+ if (!XEngine_Configure_Parament (argc, argv))
112121 {
113- return - 1 ;
122+ goto XENGINE_SERVICEAPP_EXIT ;
114123 }
115124 // 配置重载
116125 if (st_ServiceConfig.st_XReload .bReload )
@@ -146,15 +155,14 @@ int main(int argc, char** argv)
146155
147156 if (!SystemApi_Process_IsAdmin ())
148157 {
149- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中,权限验证失败,请切换管理员权限" ));
150- goto XENGINE_SERVICEAPP_EXIT;
158+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X (" 启动服务中,启动权限不足,对于进程和后台服务任务可能会执行失败,请切换管理员权限" ));
151159 }
152160 if (!ModuleSystem_API_AutoStart (st_ServiceConfig.bAutoStart ))
153161 {
154- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中, 注册软件开机启动失败!错误:%lX" ), ModuleHelp_GetLastError ());
162+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中, 注册软件开机启动失败!错误:%lX" ), ModuleHelp_GetLastError ());
155163 goto XENGINE_SERVICEAPP_EXIT;
156164 }
157- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中, 设置软件开机启动标志成功,标志位:%d" ), st_ServiceConfig.bAutoStart );
165+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中, 设置软件开机启动标志成功,标志位:%d" ), st_ServiceConfig.bAutoStart );
158166
159167 if (st_ServiceConfig.bHideWnd )
160168 {
@@ -165,12 +173,12 @@ int main(int argc, char** argv)
165173
166174 if (NULL == hWnd)
167175 {
168- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中, 设置窗口隐藏失败,没有找到句柄" ));
176+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中, 设置窗口隐藏失败,没有找到句柄" ));
169177 }
170178 else
171179 {
172180 ShowWindow (hWnd, SW_HIDE);
173- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中, 设置窗口隐藏成功" ));
181+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中, 设置窗口隐藏成功" ));
174182 }
175183#endif
176184 }
@@ -309,7 +317,32 @@ int main(int argc, char** argv)
309317 goto XENGINE_SERVICEAPP_EXIT;
310318 }
311319 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,启动P2P客户端管理器成功,超时时间设置:%d 秒" ), st_ServiceConfig.st_XTime .nP2PTimeOut );
312-
320+ // 进程守护
321+ if (!ModuleConfigure_Json_DeamonList (lpszConfigDeamon, &st_DeamonAppConfig))
322+ {
323+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中,启动加载进程守护配置文件失败,错误:%lX" ), ModuleConfigure_GetLastError ());
324+ goto XENGINE_SERVICEAPP_EXIT;
325+ }
326+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,启动加载进程守护配置文件成功" ));
327+ for (auto stl_ListIterator = st_DeamonAppConfig.stl_ListDeamonApp .begin (); stl_ListIterator != st_DeamonAppConfig.stl_ListDeamonApp .end (); stl_ListIterator++)
328+ {
329+ if (stl_ListIterator->bEnable )
330+ {
331+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,加载守护进程:%s,成功,开始守护进程" ), stl_ListIterator->tszAPPName );
332+ }
333+ else
334+ {
335+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X (" 启动服务中,加载守护进程:%s,成功,此项目未启用" ), stl_ListIterator->tszAPPName );
336+ }
337+ }
338+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,加载守护进程列表成功,加载的列表个数:%d" ), st_DeamonAppConfig.stl_ListDeamonApp .size ());
339+ pSTDThread_Deamon = make_unique<thread>(HTTPTask_TaskPost_Thread);
340+ if (NULL == pSTDThread_Deamon)
341+ {
342+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 启动服务中,启动进程管理线程失败" ));
343+ goto XENGINE_SERVICEAPP_EXIT;
344+ }
345+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,启动进程管理线程成功" ));
313346 // 启动插件
314347 if (!ModulePlugin_Loader_Init ())
315348 {
@@ -364,7 +397,7 @@ int main(int argc, char** argv)
364397 // 展示能力
365398 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 启动服务中,加载的Lib插件:%d 个,Lua插件:%d 个" ), st_PluginLibConfig.pStl_ListPlugin ->size (), st_PluginLuaConfig.pStl_ListPlugin ->size ());
366399
367- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 所有服务成功启动, 服务运行中, XEngine版本:%s%s,发行版本次数:%d,当前版本:%s。。。" ), BaseLib_OperatorVer_XNumberStr (), BaseLib_OperatorVer_XTypeStr (), st_ServiceConfig.st_XVer .pStl_ListVer ->size (), st_ServiceConfig.st_XVer .pStl_ListVer ->front ().c_str ());
400+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 所有服务成功启动, 服务运行中, XEngine版本:%s%s,发行版本次数:%d,当前版本:%s。。。" ), BaseLib_OperatorVer_XNumberStr (), BaseLib_OperatorVer_XTypeStr (), st_ServiceConfig.st_XVer .pStl_ListVer ->size (), st_ServiceConfig.st_XVer .pStl_ListVer ->front ().c_str ());
368401 while (true )
369402 {
370403 std::this_thread::sleep_for (std::chrono::seconds (1 ));
@@ -392,9 +425,15 @@ int main(int argc, char** argv)
392425 ModuleHelp_P2PClient_Destory ();
393426 // 销毁日志资源
394427 HelpComponents_XLog_Destroy (xhLog);
428+ // 销毁线程
429+ if (NULL != pSTDThread_Deamon)
430+ {
431+ pSTDThread_Deamon->join ();
432+ }
395433 }
396434#ifdef _MSC_BUILD
397435 WSACleanup ();
398436#endif
437+ getchar ();
399438 return 0 ;
400439}
0 commit comments