Skip to content

Commit 3dc810a

Browse files
committed
modify:callback parameter for token module
modify:not timeout and fix time Renewal time not useful for token module
1 parent 75f8d6c commit 3dc810a

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed

XEngine_Module/XEngine_Token/Session_Define.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
//////////////////////////////////////////////////////////////////////////
1414
// 导出的回调函数
1515
//////////////////////////////////////////////////////////////////////////
16-
typedef void(CALLBACK* CALLBACK_XENGIEN_MODULE_TOKEN_EVENTS)(XNETHANDLE xhToken, XPVOID lParam);
16+
//超时的TOKEN,超时的时间,续期次数,登录时间,用户信息(如果没有就是NULL),自定义参数
17+
typedef void(CALLBACK* CALLBACK_XENGIEN_MODULE_TOKEN_EVENTS)(XNETHANDLE xhToken, int nTimeout, int nTimerenewal, XENGINE_LIBTIME* pSt_LibTime, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo, XPVOID lParam);
1718
//////////////////////////////////////////////////////////////////////////
1819
// 导出函数
1920
//////////////////////////////////////////////////////////////////////////
@@ -28,7 +29,7 @@ extern "C" XLONG Session_GetLastError(int *pInt_ErrorCode = NULL);
2829
In/Out:In
2930
类型:整数型
3031
可空:N
31-
意思:超时时间,单位秒
32+
意思:超时时间,单位秒,0不超时,永远存在
3233
参数.二:fpCall_TokenEvent
3334
In/Out:In/Out
3435
类型:回调函数
@@ -67,12 +68,17 @@ extern "C" bool Session_Token_Destroy();
6768
类型:数据结构指针
6869
可空:Y
6970
意思:用户信息表
71+
参数.三:nTimeout
72+
In/Out:In
73+
类型:整数型
74+
可空:Y
75+
意思:单独指定超时时间,-1 不启用
7076
返回值
7177
类型:逻辑型
7278
意思:是否允许登陆
7379
备注:
7480
*********************************************************************/
75-
extern "C" bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL);
81+
extern "C" bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
7682
/********************************************************************
7783
函数名称:Session_Token_Delete
7884
函数功能:移除一个客户端
@@ -98,7 +104,7 @@ extern "C" bool Session_Token_Delete(XNETHANDLE xhToken);
98104
返回值
99105
类型:逻辑型
100106
意思:是否成功
101-
备注:
107+
备注:可以用于续期
102108
*********************************************************************/
103109
extern "C" bool Session_Token_UPDate(XNETHANDLE xhToken);
104110
/********************************************************************
@@ -146,7 +152,7 @@ extern "C" bool Session_Token_Get(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO*
146152
extern "C" bool Session_Token_GetUser(LPCXSTR lpszUser, LPCXSTR lpszPass, XNETHANDLE* pxhToken);
147153
/********************************************************************
148154
函数名称:Session_Token_RenewalTime
149-
函数功能:续期时间
155+
函数功能:获取续期次数
150156
参数.一:xhToken
151157
In/Out:In
152158
类型:句柄

XEngine_Module/XEngine_Token/Session_Token/Session_Token.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ CSession_Token::~CSession_Token()
2727
In/Out:In
2828
类型:整数型
2929
可空:N
30-
意思:超时时间,单位秒
30+
意思:超时时间,单位秒,0不超时,永远存在
3131
参数.二:fpCall_TokenEvent
3232
In/Out:In/Out
3333
类型:回调函数
@@ -106,20 +106,28 @@ bool CSession_Token::Session_Token_Destroy()
106106
类型:数据结构指针
107107
可空:Y
108108
意思:用户信息表
109+
参数.三:nTimeout
110+
In/Out:In
111+
类型:整数型
112+
可空:Y
113+
意思:单独指定超时时间,-1 不启用
109114
返回值
110115
类型:逻辑型
111116
意思:是否允许登陆
112117
备注:
113118
*********************************************************************/
114-
bool CSession_Token::Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo /* = NULL */)
119+
bool CSession_Token::Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo /* = NULL */, int nTimeout /* = -1 */)
115120
{
116121
Session_IsErrorOccur = false;
117122

118123
TOKENSESSION_INFOCLIENT st_TokenClient = {};
119124

125+
st_TokenClient.xhToken = xhToken;
126+
st_TokenClient.nTimeout = nTimeout;
120127
BaseLib_Time_GetSysTime(&st_TokenClient.st_LibTimer);
121-
122-
if (NULL != pSt_UserInfo)
128+
BaseLib_Time_GetSysTime(&st_TokenClient.st_OutTimer);
129+
130+
if (NULL != pSt_UserInfo)
123131
{
124132
st_TokenClient.st_UserInfo = *pSt_UserInfo;
125133
}
@@ -166,7 +174,7 @@ bool CSession_Token::Session_Token_Delete(XNETHANDLE xhToken)
166174
返回值
167175
类型:逻辑型
168176
意思:是否成功
169-
备注:
177+
备注:可以用于续期
170178
*********************************************************************/
171179
bool CSession_Token::Session_Token_UPDate(XNETHANDLE xhToken)
172180
{
@@ -181,7 +189,8 @@ bool CSession_Token::Session_Token_UPDate(XNETHANDLE xhToken)
181189
st_Locker.unlock_shared();
182190
return false;
183191
}
184-
BaseLib_Time_GetSysTime(&stl_MapIterator->second.st_LibTimer);
192+
stl_MapIterator->second.nRenewalTime++;
193+
BaseLib_Time_GetSysTime(&stl_MapIterator->second.st_OutTimer);
185194
st_Locker.unlock_shared();
186195
return true;
187196
}
@@ -284,7 +293,7 @@ bool CSession_Token::Session_Token_GetUser(LPCXSTR lpszUser, LPCXSTR lpszPass, X
284293
}
285294
/********************************************************************
286295
函数名称:Session_Token_RenewalTime
287-
函数功能:续期时间
296+
函数功能:获取续期次数
288297
参数.一:xhToken
289298
In/Out:In
290299
类型:句柄
@@ -313,7 +322,6 @@ bool CSession_Token::Session_Token_RenewalTime(XNETHANDLE xhToken, int* pInt_Ren
313322
st_Locker.unlock_shared();
314323
return false;
315324
}
316-
stl_MapIterator->second.nRenewalTime++;
317325
*pInt_RenewalTime = stl_MapIterator->second.nRenewalTime;
318326
st_Locker.unlock_shared();
319327
return true;
@@ -324,8 +332,8 @@ bool CSession_Token::Session_Token_RenewalTime(XNETHANDLE xhToken, int* pInt_Ren
324332
XHTHREAD CSession_Token::Session_Token_Thread(XPVOID lParam)
325333
{
326334
CSession_Token* pClass_This = (CSession_Token*)lParam;
335+
std::list<TOKENSESSION_INFOCLIENT> stl_ListNotify;
327336
XENGINE_LIBTIME st_LibTimer;
328-
std::list<XNETHANDLE> stl_ListNotify;
329337

330338
while (pClass_This->bIsRun)
331339
{
@@ -337,30 +345,30 @@ XHTHREAD CSession_Token::Session_Token_Thread(XPVOID lParam)
337345
BaseLib_Time_GetSysTime(&st_LibTimer); //获取现在的系统时间
338346
__int64x nOnlineSpan = 0; //在线时间
339347
//用户登录了多少秒
340-
BaseLib_TimeSpan_GetForStu(&stl_MapIterator->second.st_LibTimer, &st_LibTimer, &nOnlineSpan, ENUM_XENGINE_BASELIB_TIME_TYPE_SECOND);
341-
if (stl_MapIterator->second.nTimeout > 0)
348+
BaseLib_TimeSpan_GetForStu(&stl_MapIterator->second.st_OutTimer, &st_LibTimer, &nOnlineSpan, ENUM_XENGINE_BASELIB_TIME_TYPE_SECOND);
349+
if (stl_MapIterator->second.nTimeout >= 0)
342350
{
343-
if (nOnlineSpan > stl_MapIterator->second.nTimeout)
351+
if ((stl_MapIterator->second.nTimeout > 0) && (nOnlineSpan > stl_MapIterator->second.nTimeout))
344352
{
345-
stl_ListNotify.push_back(stl_MapIterator->first);
353+
stl_ListNotify.push_back(stl_MapIterator->second);
346354
}
347355
}
348356
else
349357
{
350-
if (nOnlineSpan > pClass_This->m_nTimeout)
358+
if ((nOnlineSpan > pClass_This->m_nTimeout) && (pClass_This->m_nTimeout > 0))
351359
{
352-
stl_ListNotify.push_back(stl_MapIterator->first);
360+
stl_ListNotify.push_back(stl_MapIterator->second);
353361
}
354362
}
355363
}
356364
pClass_This->st_Locker.unlock_shared();
357365
//判断是否有需要关闭的客户端
358366
if (!stl_ListNotify.empty())
359367
{
360-
std::list<XNETHANDLE>::iterator stl_ListIterator = stl_ListNotify.begin();
368+
std::list<TOKENSESSION_INFOCLIENT>::iterator stl_ListIterator = stl_ListNotify.begin();
361369
for (; stl_ListIterator != stl_ListNotify.end(); stl_ListIterator++)
362370
{
363-
pClass_This->lpCall_TokenEvents(*stl_ListIterator, pClass_This->m_lParam);
371+
pClass_This->lpCall_TokenEvents(stl_ListIterator->xhToken, (int)stl_ListIterator->nTimeout, stl_ListIterator->nRenewalTime, &stl_ListIterator->st_LibTimer, &stl_ListIterator->st_UserInfo, pClass_This->m_lParam);
364372
}
365373
stl_ListNotify.clear(); //清理元素
366374
}

XEngine_Module/XEngine_Token/Session_Token/Session_Token.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ typedef struct
1414
{
1515
XENGINE_PROTOCOL_USERINFO st_UserInfo;
1616
XENGINE_LIBTIME st_LibTimer; //登录时间结构
17+
XENGINE_LIBTIME st_OutTimer; //超时时间结构
18+
XNETHANDLE xhToken; //当前TOKEN
1719
int nTimeout; //单独指定超时
1820
int nRenewalTime; //自动续期次数
1921
}TOKENSESSION_INFOCLIENT;
@@ -26,7 +28,7 @@ class CSession_Token
2628
public:
2729
bool Session_Token_Init(int nTimeout, CALLBACK_XENGIEN_MODULE_TOKEN_EVENTS fpCall_TokenEvent, XPVOID lParam = NULL);
2830
bool Session_Token_Destroy();
29-
bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL);
31+
bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL, int nTimeout = -1);
3032
bool Session_Token_Delete(XNETHANDLE xhToken);
3133
bool Session_Token_UPDate(XNETHANDLE xhToken);
3234
bool Session_Token_Get(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo = NULL);

XEngine_Module/XEngine_Token/pch.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ extern "C" bool Session_Token_Destroy()
3939
{
4040
return m_SessionToken.Session_Token_Destroy();
4141
}
42-
extern "C" bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo)
42+
extern "C" bool Session_Token_Insert(XNETHANDLE xhToken, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo, int nTimeout)
4343
{
44-
return m_SessionToken.Session_Token_Insert(xhToken, pSt_UserInfo);
44+
return m_SessionToken.Session_Token_Insert(xhToken, pSt_UserInfo, nTimeout);
4545
}
4646
extern "C" bool Session_Token_Delete(XNETHANDLE xhToken)
4747
{

0 commit comments

Comments
 (0)