Skip to content

Commit 2214569

Browse files
committed
fixed:forward and proxy not free client token
modify:get client info for forward get function
1 parent a0cc80c commit 2214569

File tree

5 files changed

+29
-19
lines changed

5 files changed

+29
-19
lines changed

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,17 @@ extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAd
147147
类型:常量字符指针
148148
可空:N
149149
意思:输入要操作的客户端
150-
参数.二:ptszDstAddr
150+
参数.二:pSt_ForwardClinet
151151
In/Out:Out
152-
类型:字符指针
152+
类型:数据结构指针
153153
可空:Y
154-
意思:输出对端地址
154+
意思:输出信息
155155
返回值
156156
类型:逻辑型
157157
意思:是否成功
158158
备注:
159159
*********************************************************************/
160-
extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL);
160+
extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet = NULL);
161161
/************************************************************************/
162162
/* SOCK代理服务器导出函数 */
163163
/************************************************************************/

XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -311,21 +311,21 @@ bool CModuleSession_Forward::ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHA
311311
类型:常量字符指针
312312
可空:N
313313
意思:输入要操作的客户端
314-
参数.二:ptszDstAddr
314+
参数.二:pSt_ForwardClinet
315315
In/Out:Out
316-
类型:字符指针
316+
类型:数据结构指针
317317
可空:Y
318-
意思:输出对端地址
318+
意思:输出信息
319319
返回值
320320
类型:逻辑型
321321
意思:是否成功
322322
备注:
323323
*********************************************************************/
324-
bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr)
324+
bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet)
325325
{
326326
Session_IsErrorOccur = false;
327327

328-
if ((NULL == lpszAddr) || (NULL == ptszDstAddr))
328+
if ((NULL == lpszAddr))
329329
{
330330
Session_IsErrorOccur = true;
331331
Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT;
@@ -341,7 +341,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR*
341341
st_Locker.unlock_shared();
342342
return false;
343343
}
344-
if (NULL == ptszDstAddr)
344+
if (NULL == pSt_ForwardClinet)
345345
{
346346
st_Locker.unlock_shared();
347347
return true;
@@ -354,7 +354,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR*
354354
st_Locker.unlock_shared();
355355
return false;
356356
}
357-
_tcsxcpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr);
357+
*pSt_ForwardClinet = stl_MapIterator->second;
358358
st_Locker.unlock_shared();
359359
return true;
360360
}

XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class CModuleSession_Forward
2222
bool ModuleSession_Forward_BindNamed(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr);
2323
bool ModuleSession_Forward_BindAnony(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr, XNETHANDLE xhClient);
2424
bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL);
25-
bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr = NULL);
25+
bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD *pSt_ForwardClinet = NULL);
2626
private:
2727
shared_mutex st_Locker;
2828
private:

XEngine_Source/XEngine_ModuleSession/pch.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAd
5555
{
5656
return m_Forward.ModuleSession_Forward_Delete(lpszAddr, ptszDstAddr);
5757
}
58-
extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR * ptszDstAddr)
58+
extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, SESSION_FORWARD* pSt_ForwardClinet)
5959
{
60-
return m_Forward.ModuleSession_Forward_Get(lpszAddr, ptszDstAddr);
60+
return m_Forward.ModuleSession_Forward_Get(lpszAddr, pSt_ForwardClinet);
6161
}
6262
/************************************************************************/
6363
/* SOCK代理服务器导出函数 */

XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,11 @@ bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSoc
6868
}
6969
void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
7070
{
71-
XCHAR tszDstAddr[128];
72-
memset(tszDstAddr, '\0', sizeof(tszDstAddr));
73-
74-
if (ModuleSession_Forward_Get(lpszClientAddr, tszDstAddr))
71+
SESSION_FORWARD st_ForwardClinet = {};
72+
if (ModuleSession_Forward_Get(lpszClientAddr, &st_ForwardClinet))
7573
{
7674
//如果有转发,直接转发
77-
XEngine_Network_Send(tszDstAddr, lpszRecvMsg, nMsgLen, XENGINE_CLIENT_NETTYPE_FORWARD);
75+
XEngine_Network_Send(st_ForwardClinet.tszDstAddr, lpszRecvMsg, nMsgLen, XENGINE_CLIENT_NETTYPE_FORWARD);
7876
}
7977
else
8078
{
@@ -195,6 +193,12 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType)
195193
SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr);
196194
NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr);
197195
}
196+
SESSION_FORWARD st_ForwardInfo = {};
197+
if (ModuleSession_Forward_Get(lpszClientAddr, &st_ForwardInfo))
198+
{
199+
XClient_TCPSelect_DeleteEx(xhForwardClient, st_ForwardInfo.xhClient);
200+
}
201+
ModuleSession_Proxy_Delete(lpszClientAddr);
198202
HelpComponents_Datas_DeleteEx(xhForwardPacket, lpszClientAddr);
199203
ModuleSession_Forward_Delete(lpszClientAddr);
200204
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
@@ -214,6 +218,12 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType)
214218
SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr);
215219
NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr);
216220
}
221+
SESSION_FORWARD st_ProxyInfo = {};
222+
if (ModuleSession_Proxy_GetForAddr(lpszClientAddr, &st_ProxyInfo))
223+
{
224+
XClient_TCPSelect_DeleteEx(xhProxyClient, st_ProxyInfo.xhClient);
225+
}
226+
ModuleSession_Proxy_Delete(lpszClientAddr);
217227
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
218228
}
219229
else

0 commit comments

Comments
 (0)