@@ -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*********************************************************************/
171179bool 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
324332XHTHREAD 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 }
0 commit comments