1+ #include " ../XEngine_Hdr.h"
2+
3+ BOOL XEngine_HTTPTask_Locker (LPCTSTR lpszClientAddr, __int64x xhToken, ENUM_XENGINE_APISERVICE_LOCKER_TYPE enLockType)
4+ {
5+ int nSDLen = 4096 ;
6+ int nRVLen = 4096 ;
7+ TCHAR tszSDBuffer[4096 ];
8+ TCHAR tszRVBuffer[4096 ];
9+ RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; // 发送给客户端的参数
10+
11+ memset (tszSDBuffer, ' \0 ' , sizeof (tszSDBuffer));
12+ memset (tszRVBuffer, ' \0 ' , sizeof (tszRVBuffer));
13+ memset (&st_HDRParam, ' \0 ' , sizeof (RFCCOMPONENTS_HTTP_HDRPARAM));
14+
15+ st_HDRParam.nHttpCode = 200 ; // HTTP CODE码
16+ st_HDRParam.bIsClose = TRUE ; // 收到回复后就关闭
17+ if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_CREATE == enLockType)
18+ {
19+ // 创建
20+ XNETHANDLE xhToken = 0 ;
21+ ModuleHelp_Locker_Create (&xhToken);
22+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
23+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
24+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
25+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求创建锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
26+ }
27+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_OPEN == enLockType)
28+ {
29+ // 打开
30+ if (!ModuleHelp_Locker_OPen (xhToken))
31+ {
32+ DWORD dwRet = ModuleProtocol_GetLastError ();
33+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken, dwRet, " request is failed" );
34+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
35+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
36+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求打开锁失败,锁句柄:%lld,错误码:%lX" ), lpszClientAddr, xhToken, dwRet);
37+ return FALSE ;
38+ }
39+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
40+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
41+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
42+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求打开锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
43+ }
44+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_CLOSE == enLockType)
45+ {
46+ ModuleHelp_Locker_Close (xhToken);
47+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
48+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
49+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
50+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求关闭锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
51+ }
52+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_READ == enLockType)
53+ {
54+ if (!ModuleHelp_Locker_ReadLock (xhToken))
55+ {
56+ DWORD dwRet = ModuleProtocol_GetLastError ();
57+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken, dwRet, " request is failed" );
58+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
59+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
60+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求读加锁失败,锁句柄:%lld,错误码:%lX" ), lpszClientAddr, xhToken, dwRet);
61+ return FALSE ;
62+ }
63+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
64+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
65+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
66+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求读加锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
67+ }
68+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_UNREAD == enLockType)
69+ {
70+ if (!ModuleHelp_Locker_ReadUNLock (xhToken))
71+ {
72+ DWORD dwRet = ModuleProtocol_GetLastError ();
73+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken, dwRet, " request is failed" );
74+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
75+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
76+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求读解锁失败,锁句柄:%lld,错误码:%lX" ), lpszClientAddr, xhToken, dwRet);
77+ return FALSE ;
78+ }
79+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
80+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
81+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
82+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求读解锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
83+ }
84+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_WRITE == enLockType)
85+ {
86+ if (!ModuleHelp_Locker_WriteLock (xhToken))
87+ {
88+ DWORD dwRet = ModuleProtocol_GetLastError ();
89+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken, dwRet, " request is failed" );
90+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
91+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
92+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求写加锁失败,锁句柄:%lld,错误码:%lX" ), lpszClientAddr, xhToken, dwRet);
93+ return FALSE ;
94+ }
95+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
96+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
97+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
98+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求写加锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
99+ }
100+ else if (ENUM_XENGINE_APISERVICE_LOCKER_TYPE_UNWRITE == enLockType)
101+ {
102+ if (!ModuleHelp_Locker_WriteUNLock (xhToken))
103+ {
104+ DWORD dwRet = ModuleProtocol_GetLastError ();
105+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken, dwRet, " request is failed" );
106+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
107+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
108+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求写解锁失败,锁句柄:%lld,错误码:%lX" ), lpszClientAddr, xhToken, dwRet);
109+ return FALSE ;
110+ }
111+ ModuleProtocol_Packet_Locker (tszRVBuffer, &nRVLen, xhToken);
112+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
113+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
114+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求写解锁成功,锁句柄:%lld" ), lpszClientAddr, xhToken);
115+ }
116+ else
117+ {
118+ st_HDRParam.nHttpCode = 404 ;
119+ RfcComponents_HttpServer_SendMsgEx (xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam);
120+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen);
121+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 客户端:%s,请求了一条未知的子协议:%d" ), lpszClientAddr, enLockType);
122+ }
123+ return TRUE ;
124+ }
0 commit comments