Skip to content

Commit 299e277

Browse files
committed
modify:multi back-end support for proxy full
1 parent d8fbb96 commit 299e277

File tree

6 files changed

+78
-26
lines changed

6 files changed

+78
-26
lines changed

XEngine_Release/XEngine_Config/XEngine_Config.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
},
3333
"XProxy": {
3434
"bEnable": false,
35-
"tszIPAddr": "10.0.2.6:5001"
35+
"tszDefaultAddr": "10.0.4.69:5403",
36+
"tszIPAddr": [
37+
"10.0.0.1-10.0.4.69:5403",
38+
"5000-10.0.4.69:5403"
39+
]
3640
}
3741
}

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ typedef struct tag_XEngine_ServiceConfig
5252
}st_XReport;
5353
struct
5454
{
55-
XCHAR tszIPAddr[128];
5655
bool bEnable;
56+
XCHAR tszIPAddr[128];
57+
std::list<xstring>* pStl_ListIPAddr;
5758
}st_XProxy;
5859
struct
5960
{

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,24 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
138138
_tcsxcpy(pSt_ServerConfig->st_XReport.tszAPIUrl, st_JsonXReport["tszAPIUrl"].asCString());
139139
_tcsxcpy(pSt_ServerConfig->st_XReport.tszServiceName, st_JsonXReport["tszServiceName"].asCString());
140140

141-
if (st_JsonRoot["XProxy"].empty() || (2 != st_JsonRoot["XProxy"].size()))
141+
if (st_JsonRoot["XProxy"].empty())
142142
{
143143
Config_IsErrorOccur = true;
144144
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPROXY;
145145
return false;
146146
}
147147
Json::Value st_JsonXProxy = st_JsonRoot["XProxy"];
148-
pSt_ServerConfig->st_XProxy.bEnable = st_JsonXProxy["bEnable"].asBool();
149-
_tcsxcpy(pSt_ServerConfig->st_XProxy.tszIPAddr, st_JsonXProxy["tszIPAddr"].asCString());
150148

149+
pSt_ServerConfig->st_XProxy.pStl_ListIPAddr = new list<xstring>;
150+
pSt_ServerConfig->st_XProxy.bEnable = st_JsonXProxy["bEnable"].asBool();
151+
_tcsxcpy(pSt_ServerConfig->st_XProxy.tszIPAddr, st_JsonXProxy["tszDefaultAddr"].asCString());
152+
if (!st_JsonXProxy["tszIPAddr"].isNull())
153+
{
154+
for (unsigned int i = 0; i < st_JsonXProxy["tszIPAddr"].size(); i++)
155+
{
156+
pSt_ServerConfig->st_XProxy.pStl_ListIPAddr->push_back(st_JsonXProxy["tszIPAddr"][i].asCString());
157+
}
158+
}
151159
return true;
152160
}
153161
/********************************************************************

XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.cpp

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,75 @@
1010
// Purpose: 代理服务协议
1111
// History:
1212
*********************************************************************/
13-
void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam)
14-
{
15-
SESSION_FORWARD st_ProxyInfo = {};
16-
if (!ModuleSession_Proxy_GetForToken(xhClient, &st_ProxyInfo))
17-
{
18-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,原始地址:%s,目标地址:%s,错误码:%lX"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError());
19-
return;
20-
}
21-
XEngine_Network_Send(st_ProxyInfo.tszSrcAddr, lpszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_PROXY);
22-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%lld,转发数据成功,原始地址:%s,目标地址:%s,大小:%d"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen);
23-
}
24-
2513
bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr)
2614
{
27-
int nPort = 0;
15+
int nSrcPort = 0;
16+
int nDstPort = 0;
2817
XNETHANDLE xhClient = 0;
2918
XCHAR tszIPAddr[128] = {};
19+
XCHAR tszSrcIPAddr[128] = {};
20+
XCHAR tszDstIPAddr[128] = {};
3021

31-
_tcsxcpy(tszIPAddr, st_ServiceConfig.st_XProxy.tszIPAddr);
32-
APIAddr_IPAddr_SegAddr(tszIPAddr, &nPort);
33-
if (!XClient_TCPSelect_InsertEx(xhProxyClient, &xhClient, tszIPAddr, nPort, false))
22+
_tcsxcpy(tszSrcIPAddr, lpszClientAddr);
23+
APIAddr_IPAddr_SegAddr(tszSrcIPAddr, &nSrcPort);
24+
25+
bool bFound = false;
26+
auto stl_ListIterator = st_ServiceConfig.st_XProxy.pStl_ListIPAddr->begin();
27+
for (; stl_ListIterator != st_ServiceConfig.st_XProxy.pStl_ListIPAddr->end(); stl_ListIterator++)
3428
{
35-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,连接到转发代理服务器失败,服务地址:%s,错误码:%lX"), lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr, XClient_GetLastError());
29+
XCHAR tszTmpIPAddr[128] = {};
30+
_stxscanf(stl_ListIterator->c_str(), _X("%[^-]-%s"), tszTmpIPAddr, tszDstIPAddr);
31+
if (APIAddr_IPAddr_IsIPV4Addr(tszTmpIPAddr))
32+
{
33+
//ip
34+
if (0 == _tcsxnicmp(tszSrcIPAddr, tszTmpIPAddr, _tcsxlen(tszSrcIPAddr)))
35+
{
36+
bFound = true;
37+
_tcsxcpy(tszIPAddr, tszDstIPAddr);
38+
APIAddr_IPAddr_SegAddr(tszDstIPAddr, &nDstPort);
39+
break;
40+
}
41+
}
42+
else
43+
{
44+
//port
45+
if (_ttxoi(tszTmpIPAddr) == nSrcPort)
46+
{
47+
bFound = true;
48+
_tcsxcpy(tszIPAddr, tszDstIPAddr);
49+
APIAddr_IPAddr_SegAddr(tszDstIPAddr, &nDstPort);
50+
break;
51+
}
52+
}
53+
}
54+
55+
if (!bFound)
56+
{
57+
_tcsxcpy(tszDstIPAddr, st_ServiceConfig.st_XProxy.tszIPAddr);
58+
APIAddr_IPAddr_SegAddr(tszDstIPAddr, &nDstPort);
59+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,代理转未命中,使用默认地址:%s:%d"), lpszClientAddr, tszDstIPAddr, nDstPort);
60+
}
61+
if (!XClient_TCPSelect_InsertEx(xhProxyClient, &xhClient, tszDstIPAddr, nDstPort, false))
62+
{
63+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,连接到转发代理服务器失败,服务地址:%s:%d,错误码:%lX"), lpszClientAddr, tszDstIPAddr, nDstPort, XClient_GetLastError());
3664
return false;
3765
}
3866
SocketOpt_HeartBeat_InsertAddrEx(xhProxyHeart, lpszClientAddr);
39-
ModuleSession_Proxy_Insert(lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr, xhClient);
40-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器:%s 成功"), lpszClientAddr, st_ServiceConfig.st_XProxy.tszIPAddr);
67+
ModuleSession_Proxy_Insert(lpszClientAddr, tszIPAddr, xhClient);
68+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器:%s:%d 成功"), lpszClientAddr, tszDstIPAddr, nDstPort);
4169
return true;
4270
}
71+
void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam)
72+
{
73+
SESSION_FORWARD st_ProxyInfo = {};
74+
if (!ModuleSession_Proxy_GetForToken(xhClient, &st_ProxyInfo))
75+
{
76+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%lld,获取转发地址信息失败,原始地址:%s,目标地址:%s,错误码:%lX"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, ModuleSession_GetLastError());
77+
return;
78+
}
79+
XEngine_Network_Send(st_ProxyInfo.tszSrcAddr, lpszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_PROXY);
80+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Proxy客户端:%lld,转发数据成功,原始地址:%s,目标地址:%s,大小:%d"), xhClient, st_ProxyInfo.tszSrcAddr, st_ProxyInfo.tszDstAddr, nMsgLen);
81+
}
4382
bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
4483
{
4584
SESSION_FORWARD st_ProxyInfo = {};

XEngine_Source/XEngine_ServiceApp/XEngine_ProxyTask.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
// Purpose: 代理转发协议
1111
// History:
1212
*********************************************************************/
13-
void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam);
1413
bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr);
14+
void CALLBACK XEngine_Proxy_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_XCLIENT_SOCKET_EVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nMsgLen, XPVOID lParam);
1515
bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen);

XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ int main(int argc, char** argv)
334334
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Proxy网络服务器失败,错误:%lX"), NetCore_GetLastError());
335335
goto XENGINE_SERVICEAPP_EXIT;
336336
}
337-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy网络服务器成功,Proxy端口:%d,目标地址:%s,IO:%d"), st_ServiceConfig.nProxyPort, st_ServiceConfig.st_XProxy.tszIPAddr, st_ServiceConfig.st_XMax.nIOThread);
337+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Proxy网络服务器成功,Proxy端口:%d,配置个数:%d,IO:%d"), st_ServiceConfig.nProxyPort, st_ServiceConfig.st_XProxy.pStl_ListIPAddr->size(), st_ServiceConfig.st_XMax.nIOThread);
338338
NetCore_TCPXCore_RegisterCallBackEx(xhProxySocket, Network_Callback_ProxyLogin, Network_Callback_ProxyRecv, Network_Callback_ProxyLeave);
339339
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Proxy网络事件成功"));
340340
//客户端

0 commit comments

Comments
 (0)