Skip to content

Commit 78ec7f3

Browse files
committed
added:http api management for deamon process
1 parent 5644e7c commit 78ec7f3

File tree

8 files changed

+165
-20
lines changed

8 files changed

+165
-20
lines changed

XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -916,4 +916,43 @@ extern "C" bool ModuleProtocol_Parse_BackService(LPCXSTR lpszMsgBuffer, int nMsg
916916
意思:是否成功
917917
备注:
918918
*********************************************************************/
919-
extern "C" bool ModuleProtocol_Parse_Verifcation(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszUserName, XCHAR* ptszUserPass);
919+
extern "C" bool ModuleProtocol_Parse_Verifcation(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszUserName, XCHAR* ptszUserPass);
920+
/********************************************************************
921+
函数名称:ModuleProtocol_Parse_Deamon
922+
函数功能:守护进程协议
923+
参数.一:lpszMsgBuffer
924+
In/Out:In
925+
类型:常量字符指针
926+
可空:N
927+
意思:输入要解析的数据
928+
参数.二:nMsgLen
929+
In/Out:In
930+
类型:整数型
931+
可空:N
932+
意思:要解析的大小
933+
参数.三:ptszAPPName
934+
In/Out:Out
935+
类型:字符指针
936+
可空:N
937+
意思:输出进程名称
938+
参数.四:ptszAPPPath
939+
In/Out:Out
940+
类型:字符指针
941+
可空:N
942+
意思:输出进程路径
943+
参数.五:pInt_Retime
944+
In/Out:Out
945+
类型:整数型指针
946+
可空:N
947+
意思:输出重试次数
948+
参数.六:pbEnable
949+
In/Out:Out
950+
类型:整数型指针
951+
可空:N
952+
意思:输出是否启用
953+
返回值
954+
类型:逻辑型
955+
意思:是否成功
956+
备注:
957+
*********************************************************************/
958+
extern "C" bool ModuleProtocol_Parse_Deamon(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszAPPName, XCHAR* ptszAPPPath, int* pInt_Retime, bool* pbEnable);

XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,4 +899,94 @@ bool CModuleProtocol_Parse::ModuleProtocol_Parse_Verifcation(LPCXSTR lpszMsgBuff
899899
}
900900
}
901901
return true;
902+
}
903+
/********************************************************************
904+
函数名称:ModuleProtocol_Parse_Deamon
905+
函数功能:守护进程协议
906+
参数.一:lpszMsgBuffer
907+
In/Out:In
908+
类型:常量字符指针
909+
可空:N
910+
意思:输入要解析的数据
911+
参数.二:nMsgLen
912+
In/Out:In
913+
类型:整数型
914+
可空:N
915+
意思:要解析的大小
916+
参数.三:ptszAPPName
917+
In/Out:Out
918+
类型:字符指针
919+
可空:N
920+
意思:输出进程名称
921+
参数.四:ptszAPPPath
922+
In/Out:Out
923+
类型:字符指针
924+
可空:N
925+
意思:输出进程路径
926+
参数.五:pInt_Retime
927+
In/Out:Out
928+
类型:整数型指针
929+
可空:N
930+
意思:输出重试次数
931+
参数.六:pbEnable
932+
In/Out:Out
933+
类型:整数型指针
934+
可空:N
935+
意思:输出是否启用
936+
返回值
937+
类型:逻辑型
938+
意思:是否成功
939+
备注:
940+
*********************************************************************/
941+
bool CModuleProtocol_Parse::ModuleProtocol_Parse_Deamon(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszAPPName, XCHAR* ptszAPPPath, int* pInt_Retime, bool* pbEnable)
942+
{
943+
ModuleProtocol_IsErrorOccur = false;
944+
945+
if ((NULL == lpszMsgBuffer) || (0 == nMsgLen))
946+
{
947+
ModuleProtocol_IsErrorOccur = true;
948+
ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT;
949+
return false;
950+
}
951+
Json::Value st_JsonRoot;
952+
JSONCPP_STRING st_JsonError;
953+
Json::CharReaderBuilder st_JsonBuilder;
954+
955+
std::unique_ptr<Json::CharReader> const pSt_JsonReader(st_JsonBuilder.newCharReader());
956+
if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError))
957+
{
958+
ModuleProtocol_IsErrorOccur = true;
959+
ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT;
960+
return false;
961+
}
962+
963+
if (!st_JsonRoot["tszAPPName"].isNull())
964+
{
965+
if (NULL != ptszAPPName)
966+
{
967+
_tcsxcpy(ptszAPPName, st_JsonRoot["tszAPPName"].asCString());
968+
}
969+
}
970+
if (!st_JsonRoot["tszAPPPath"].isNull())
971+
{
972+
if (NULL != ptszAPPPath)
973+
{
974+
_tcsxcpy(ptszAPPPath, st_JsonRoot["tszAPPPath"].asCString());
975+
}
976+
}
977+
if (!st_JsonRoot["nRetime"].isNull())
978+
{
979+
if (NULL != pInt_Retime)
980+
{
981+
*pInt_Retime = st_JsonRoot["nRetime"].asInt();
982+
}
983+
}
984+
if (!st_JsonRoot["bEnable"].isNull())
985+
{
986+
if (NULL != pbEnable)
987+
{
988+
*pbEnable = st_JsonRoot["bEnable"].asBool();
989+
}
990+
}
991+
return true;
902992
}

XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ class CModuleProtocol_Parse
3030
bool ModuleProtocol_Parse_WordFilter(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_WORDFILTER* pSt_WordFilter);
3131
bool ModuleProtocol_Parse_BackService(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcBuffer = NULL, XCHAR* ptszDstBuffer = NULL, int* pInt_BSType = NULL);
3232
bool ModuleProtocol_Parse_Verifcation(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszUserName, XCHAR* ptszUserPass);
33+
bool ModuleProtocol_Parse_Deamon(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszAPPName, XCHAR* ptszAPPPath, int* pInt_Retime, bool* pbEnable);
3334
private:
3435
};

XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ EXPORTS
3535
ModuleProtocol_Parse_ShortLink
3636
ModuleProtocol_Parse_WordFilter
3737
ModuleProtocol_Parse_BackService
38-
ModuleProtocol_Parse_Verifcation
38+
ModuleProtocol_Parse_Verifcation
39+
ModuleProtocol_Parse_Deamon

XEngine_Source/XEngine_ModuleProtocol/pch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,4 +161,8 @@ extern "C" bool ModuleProtocol_Parse_BackService(LPCXSTR lpszMsgBuffer, int nMsg
161161
extern "C" bool ModuleProtocol_Parse_Verifcation(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR * ptszUserName, XCHAR * ptszUserPass)
162162
{
163163
return m_ProtocolParse.ModuleProtocol_Parse_Verifcation(lpszMsgBuffer, nMsgLen, ptszUserName, ptszUserPass);
164+
}
165+
extern "C" bool ModuleProtocol_Parse_Deamon(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR * ptszAPPName, XCHAR * ptszAPPPath, int* pInt_Retime, bool* pbEnable)
166+
{
167+
return m_ProtocolParse.ModuleProtocol_Parse_Deamon(lpszMsgBuffer, nMsgLen, ptszAPPName, ptszAPPPath, pInt_Retime, pbEnable);
164168
}

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
113113
LPCXSTR lpszParamWordFilter = _X("wordfilter");
114114
LPCXSTR lpszParamBack = _X("back");
115115
LPCXSTR lpszParamImage = _X("image");
116+
LPCXSTR lpszParamDeamon = _X("deamon");
116117

117118
memset(tszKey, '\0', MAX_PATH);
118119
memset(tszValue, '\0', MAX_PATH);
@@ -280,6 +281,11 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
280281
//图像处理接口:http://app.xyry.org:5501/api?function=image&params1=0
281282
HTTPTask_TaskPost_Image(lpszClientAddr, lpszRVBuffer, nRVLen, &pptszList, nListCount);
282283
}
284+
else if (0 == _tcsxnicmp(lpszParamDeamon, tszValue, _tcsxlen(lpszParamDeamon)))
285+
{
286+
//守护进程接口:http://app.xyry.org:5501/api?function=deamon&params1=0
287+
HTTPTask_TaskPost_Deamon(lpszClientAddr, lpszRVBuffer, nRVLen);
288+
}
283289
else
284290
{
285291
st_HDRParam.nHttpCode = 404;

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -87,48 +87,52 @@ void CALLBACK HTTPTask_TaskPost_Thread()
8787
std::this_thread::sleep_for(std::chrono::seconds(st_ServiceConfig.st_XTime.nTimeCheck));
8888
}
8989
}
90-
bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType)
90+
bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
9191
{
9292
int nSDLen = 0;
9393
int nRVLen = 0;
94-
int nBSType = 0;
9594
XCHAR* ptszRVBuffer = (XCHAR*)malloc(XENGINE_MEMORY_SIZE_MAX);
9695
XCHAR* ptszSDBuffer = (XCHAR*)malloc(XENGINE_MEMORY_SIZE_MAX);
97-
XCHAR tszSrcBuffer[MAX_PATH];
98-
XCHAR tszDstBuffer[MAX_PATH];
9996
RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数
100-
97+
XENGINE_DEAMONAPPINFO st_DeamonApp;
98+
10199
memset(ptszRVBuffer, '\0', XENGINE_MEMORY_SIZE_MAX);
102100
memset(ptszSDBuffer, '\0', XENGINE_MEMORY_SIZE_MAX);
103101

104-
memset(tszSrcBuffer, '\0', sizeof(tszSrcBuffer));
105-
memset(tszDstBuffer, '\0', sizeof(tszDstBuffer));
106102
memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM));
103+
memset(&st_DeamonApp, '\0', sizeof(XENGINE_DEAMONAPPINFO));
107104

108105
st_HDRParam.nHttpCode = 200; //HTTP CODE码
109106
st_HDRParam.bIsClose = true; //收到回复后就关闭
110107

111-
if (!ModuleProtocol_Parse_BackService(lpszMsgBuffer, nMsgLen, tszSrcBuffer, tszDstBuffer, &nBSType))
108+
if (!ModuleProtocol_Parse_Deamon(lpszMsgBuffer, nMsgLen, st_DeamonApp.tszAPPName, st_DeamonApp.tszAPPPath, &st_DeamonApp.nReTime, &st_DeamonApp.bEnable))
112109
{
113110
st_HDRParam.nHttpCode = 400;
114111
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, ptszSDBuffer, &nSDLen, &st_HDRParam);
115112
XEngine_Network_Send(lpszClientAddr, ptszSDBuffer, nSDLen);
116-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求后台协议失败,解析协议失败,错误码:%lX"), lpszClientAddr, ModuleProtocol_GetLastError());
113+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求解析守护协议失败,解析协议失败,错误码:%lX"), lpszClientAddr, ModuleProtocol_GetLastError());
117114
return false;
118115
}
119-
//执行任务
120-
if (1 == nType)
121-
{
122116

117+
if (st_DeamonApp.bEnable)
118+
{
119+
st_DeamonAppConfig.stl_ListDeamonApp.push_back(st_DeamonApp);
123120
}
124121
else
125122
{
126-
st_HDRParam.nHttpCode = 400;
127-
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, ptszSDBuffer, &nSDLen, &st_HDRParam);
128-
XEngine_Network_Send(lpszClientAddr, ptszSDBuffer, nSDLen);
129-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,下载任务处理失败,请求下载地址:%s,下载路径:%s,错误码:%lX"), lpszClientAddr, tszSrcBuffer, tszDstBuffer, APIClient_GetLastError());
130-
return false;
123+
for (auto stl_ListIterator = st_DeamonAppConfig.stl_ListDeamonApp.begin(); stl_ListIterator != st_DeamonAppConfig.stl_ListDeamonApp.end(); stl_ListIterator++)
124+
{
125+
if (0 == _tcsxnicmp(stl_ListIterator->tszAPPName, stl_ListIterator->tszAPPName, _tcsxlen(stl_ListIterator->tszAPPName)) && (0 == _tcsxnicmp(stl_ListIterator->tszAPPPath, st_DeamonApp.tszAPPPath, _tcsxlen(stl_ListIterator->tszAPPPath))))
126+
{
127+
st_DeamonAppConfig.stl_ListDeamonApp.erase(stl_ListIterator);
128+
break;
129+
}
130+
}
131131
}
132+
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, ptszSDBuffer, &nSDLen, &st_HDRParam);
133+
XEngine_Network_Send(lpszClientAddr, ptszSDBuffer, nSDLen);
134+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求解析守护协议成功,协议类型:%d,进程名称:%s"), lpszClientAddr, st_DeamonApp.bEnable, st_DeamonApp.tszAPPName);
135+
132136
free(ptszRVBuffer);
133137
free(ptszSDBuffer);
134138
ptszSDBuffer = NULL;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#pragma once
22

33
void CALLBACK HTTPTask_TaskPost_Thread();
4-
bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType);
4+
bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen);

0 commit comments

Comments
 (0)