Skip to content

Commit cd541da

Browse files
committed
added:multi login for day supported
1 parent 203acca commit cd541da

File tree

8 files changed

+294
-2
lines changed

8 files changed

+294
-2
lines changed

XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ EXPORTS
1313
DBModule_SQLite_UserLeave
1414
DBModule_SQLite_UserSet
1515
DBModule_SQLite_UserList
16+
DBModule_SQLite_UserLogin
17+
DBModule_SQLite_QueryLogin
1618

1719
DBModule_SQLite_SerialInsert
1820
DBModule_SQLite_SerialDelete
@@ -47,6 +49,8 @@ EXPORTS
4749
DBModule_MySQL_UserLeave
4850
DBModule_MySQL_UserSet
4951
DBModule_MySQL_UserList
52+
DBModule_MySQL_UserLogin
53+
DBModule_MySQL_QueryLogin
5054

5155
DBModule_MySQL_SerialInsert
5256
DBModule_MySQL_SerialDelete

XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,90 @@ bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInf
564564
return true;
565565
}
566566
/********************************************************************
567+
函数名称:DBModule_MySQL_UserLogin
568+
函数功能:用户登录信息记录
569+
参数.一:lpszUserName
570+
In/Out:In
571+
类型:常量字符指针
572+
可空:N
573+
意思:用户名
574+
参数.二:lpszUserAddr
575+
In/Out:In
576+
类型:常量字符指针
577+
可空:N
578+
意思:用户IP地址
579+
返回值
580+
类型:逻辑型
581+
意思:是否成功
582+
备注:
583+
*********************************************************************/
584+
bool CDBModule_MySQL::DBModule_MySQL_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
585+
{
586+
SQLPacket_IsErrorOccur = false;
587+
588+
XCHAR tszSQLStatement[1024] = {};
589+
XCHAR tszTimeStr[128] = {};
590+
BaseLib_Time_TimeToStr(tszTimeStr, NULL, false);
591+
592+
_xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Login(UserName, UserAddr, UserTime) values('%s','%s','%s')"), lpszUserName, lpszUserAddr, tszTimeStr);
593+
594+
if (!DataBase_MySQL_Execute(xhData, tszSQLStatement))
595+
{
596+
SQLPacket_IsErrorOccur = true;
597+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED;
598+
return false;
599+
}
600+
return true;
601+
}
602+
/********************************************************************
603+
函数名称:DBModule_MySQL_QueryLogin
604+
函数功能:用户登录记录查询
605+
参数.一:lpszUserName
606+
In/Out:In
607+
类型:常量字符指针
608+
可空:N
609+
意思:用户名
610+
参数.二:lpszUserAddr
611+
In/Out:In
612+
类型:常量字符指针
613+
可空:N
614+
意思:用户IP地址
615+
返回值
616+
类型:逻辑型
617+
意思:是否成功
618+
备注:
619+
*********************************************************************/
620+
bool CDBModule_MySQL::DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
621+
{
622+
SQLPacket_IsErrorOccur = false;
623+
624+
XCHAR tszSQLStatement[1024]; //SQL语句
625+
char** ppszResult = NULL;
626+
__int64u nRow = 0;
627+
__int64u nColumn = 0;
628+
XNETHANDLE xhTable = 0;
629+
memset(tszSQLStatement, '\0', 1024);
630+
631+
XCHAR tszTimeStr[128] = {};
632+
BaseLib_Time_TimeToStr(tszTimeStr, NULL, false);
633+
634+
_xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_Login` WHERE UserName = '%s' AND UserTime = '%s' AND UserAddr = '%s'"), lpszUserName, tszTimeStr, lpszUserAddr);
635+
if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn))
636+
{
637+
SQLPacket_IsErrorOccur = true;
638+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE;
639+
return false;
640+
}
641+
if (nRow <= 0)
642+
{
643+
SQLPacket_IsErrorOccur = true;
644+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH;
645+
return false;
646+
}
647+
ppszResult = DataBase_MySQL_GetResult(xhData, xhTable);
648+
return true;
649+
}
650+
/********************************************************************
567651
函数名称:DBModule_MySQL_SerialInsert
568652
函数功能:插入一个序列号到数据库
569653
参数.一:lpszSerialNumber

XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class CDBModule_MySQL
3030
bool DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表
3131
bool DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable); //设置用户信息
3232
bool DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); //获取用户列表
33+
bool DBModule_MySQL_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
34+
bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
3335
public:
3436
bool DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber); //插入序列卡
3537
bool DBModule_MySQL_SerialDelete(LPCXSTR lpszSerialNumber); //删除一个序列号

XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,88 @@ bool CDBModule_SQLite::DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI
516516
return true;
517517
}
518518
/********************************************************************
519+
函数名称:DBModule_SQLite_UserLogin
520+
函数功能:用户登录信息记录
521+
参数.一:lpszUserName
522+
In/Out:In
523+
类型:常量字符指针
524+
可空:N
525+
意思:用户名
526+
参数.二:lpszUserAddr
527+
In/Out:In
528+
类型:常量字符指针
529+
可空:N
530+
意思:用户IP地址
531+
返回值
532+
类型:逻辑型
533+
意思:是否成功
534+
备注:
535+
*********************************************************************/
536+
bool CDBModule_SQLite::DBModule_SQLite_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
537+
{
538+
SQLPacket_IsErrorOccur = false;
539+
540+
XCHAR tszSQLStatement[1024] = {};
541+
XCHAR tszTimeStr[128] = {};
542+
BaseLib_Time_TimeToStr(tszTimeStr, NULL, false);
543+
544+
_xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Login(UserName, UserAddr, UserTime) values('%s','%s','%s')"), lpszUserName, lpszUserAddr, tszTimeStr);
545+
if (!DataBase_SQLite_Exec(xhData, tszSQLStatement))
546+
{
547+
SQLPacket_IsErrorOccur = true;
548+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_INSERT;
549+
return false;
550+
}
551+
return true;
552+
}
553+
/********************************************************************
554+
函数名称:DBModule_SQLite_QueryLogin
555+
函数功能:用户登录记录查询
556+
参数.一:lpszUserName
557+
In/Out:In
558+
类型:常量字符指针
559+
可空:N
560+
意思:用户名
561+
参数.二:lpszUserAddr
562+
In/Out:In
563+
类型:常量字符指针
564+
可空:N
565+
意思:用户IP地址
566+
返回值
567+
类型:逻辑型
568+
意思:是否成功
569+
备注:
570+
*********************************************************************/
571+
bool CDBModule_SQLite::DBModule_SQLite_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
572+
{
573+
SQLPacket_IsErrorOccur = false;
574+
575+
XCHAR tszSQLStatement[1024]; //SQL语句
576+
char** ppszResult = NULL;
577+
int nRow = 0;
578+
int nColumn = 0;
579+
memset(tszSQLStatement, '\0', 1024);
580+
581+
XCHAR tszTimeStr[128] = {};
582+
BaseLib_Time_TimeToStr(tszTimeStr, NULL, false);
583+
584+
_xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_Login` WHERE UserName = '%s' AND UserTime = '%s' AND UserAddr = '%s'"), lpszUserName, tszTimeStr, lpszUserAddr);
585+
if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn))
586+
{
587+
SQLPacket_IsErrorOccur = true;
588+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE;
589+
return false;
590+
}
591+
if ((0 == nRow) || (0 == nColumn))
592+
{
593+
SQLPacket_IsErrorOccur = true;
594+
SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER;
595+
return false;
596+
}
597+
DataBase_SQLite_FreeTable(ppszResult);
598+
return true;
599+
}
600+
/********************************************************************
519601
函数名称:DBModule_SQLite_SerialInsert
520602
函数功能:插入一个序列号到数据库
521603
参数.一:lpszSerialNumber

XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class CDBModule_SQLite
3030
bool DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表
3131
bool DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable);
3232
bool DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd);
33+
bool DBModule_SQLite_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
34+
bool DBModule_SQLite_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
3335
public:
3436
bool DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); //插入序列卡
3537
bool DBModule_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); //删除一个序列号

XEngine_Source/AuthorizeModule_Database/Database_Define.h

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,44 @@ extern "C" bool DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable);
174174
*********************************************************************/
175175
extern "C" bool DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd);
176176
/********************************************************************
177+
函数名称:DBModule_SQLite_UserLogin
178+
函数功能:用户登录信息记录
179+
参数.一:lpszUserName
180+
In/Out:In
181+
类型:常量字符指针
182+
可空:N
183+
意思:用户名
184+
参数.二:lpszUserAddr
185+
In/Out:In
186+
类型:常量字符指针
187+
可空:N
188+
意思:用户IP地址
189+
返回值
190+
类型:逻辑型
191+
意思:是否成功
192+
备注:
193+
*********************************************************************/
194+
extern "C" bool DBModule_SQLite_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
195+
/********************************************************************
196+
函数名称:DBModule_SQLite_QueryLogin
197+
函数功能:用户登录记录查询
198+
参数.一:lpszUserName
199+
In/Out:In
200+
类型:常量字符指针
201+
可空:N
202+
意思:用户名
203+
参数.二:lpszUserAddr
204+
In/Out:In
205+
类型:常量字符指针
206+
可空:N
207+
意思:用户IP地址
208+
返回值
209+
类型:逻辑型
210+
意思:是否成功
211+
备注:
212+
*********************************************************************/
213+
extern "C" bool DBModule_SQLite_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
214+
/********************************************************************
177215
函数名称:DBModule_SQLite_SerialInsert
178216
函数功能:插入一个序列号到数据库
179217
参数.一:lpszSerialNumber
@@ -1003,3 +1041,41 @@ extern "C" bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Anno
10031041
备注:
10041042
*********************************************************************/
10051043
extern "C" bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount);
1044+
/********************************************************************
1045+
函数名称:DBModule_MySQL_UserLogin
1046+
函数功能:用户登录信息记录
1047+
参数.一:lpszUserName
1048+
In/Out:In
1049+
类型:常量字符指针
1050+
可空:N
1051+
意思:用户名
1052+
参数.二:lpszUserAddr
1053+
In/Out:In
1054+
类型:常量字符指针
1055+
可空:N
1056+
意思:用户IP地址
1057+
返回值
1058+
类型:逻辑型
1059+
意思:是否成功
1060+
备注:
1061+
*********************************************************************/
1062+
extern "C" bool DBModule_MySQL_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);
1063+
/********************************************************************
1064+
函数名称:DBModule_MySQL_QueryLogin
1065+
函数功能:用户登录记录查询
1066+
参数.一:lpszUserName
1067+
In/Out:In
1068+
类型:常量字符指针
1069+
可空:N
1070+
意思:用户名
1071+
参数.二:lpszUserAddr
1072+
In/Out:In
1073+
类型:常量字符指针
1074+
可空:N
1075+
意思:用户IP地址
1076+
返回值
1077+
类型:逻辑型
1078+
意思:是否成功
1079+
备注:
1080+
*********************************************************************/
1081+
extern "C" bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr);

XEngine_Source/AuthorizeModule_Database/pch.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ extern "C" bool DBModule_SQLite_UserList(AUTHREG_USERTABLE * **pppSt_UserInfo, i
6767
{
6868
return m_DBSQLite.DBModule_SQLite_UserList(pppSt_UserInfo, pInt_ListCount, nPosStart, nPosEnd);
6969
}
70+
extern "C" bool DBModule_SQLite_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
71+
{
72+
return m_DBSQLite.DBModule_SQLite_UserLogin(lpszUserName, lpszUserAddr);
73+
}
74+
extern "C" bool DBModule_SQLite_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
75+
{
76+
return m_DBSQLite.DBModule_SQLite_QueryLogin(lpszUserName, lpszUserAddr);
77+
}
7078
extern "C" bool DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber)
7179
{
7280
return m_DBSQLite.DBModule_SQLite_SerialInsert(lpszSerialNumber);
@@ -257,4 +265,12 @@ extern "C" bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Anno
257265
extern "C" bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount)
258266
{
259267
return m_DBMySQL.DBModule_MySQL_AnnouncementList(ppppSt_Announcement, pInt_ListCount);
268+
}
269+
extern "C" bool DBModule_MySQL_UserLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
270+
{
271+
return m_DBMySQL.DBModule_MySQL_UserLogin(lpszUserName, lpszUserAddr);
272+
}
273+
extern "C" bool DBModule_MySQL_QueryLogin(LPCXSTR lpszUserName, LPCXSTR lpszUserAddr)
274+
{
275+
return m_DBMySQL.DBModule_MySQL_QueryLogin(lpszUserName, lpszUserAddr);
260276
}

XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,23 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
338338
}
339339
else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == st_UserTable.enSerialType)
340340
{
341-
if (!AuthHelp_MultiLogin_TimeMatch(st_UserTable.st_UserInfo.tszLoginTime))
341+
bool bSuccess = false;
342+
XCHAR tszIPAddr[128] = {};
343+
344+
_tcsxcpy(tszIPAddr, lpszClientAddr);
345+
APIAddr_IPAddr_SegAddr(tszIPAddr);
346+
if (0 == st_AuthConfig.st_XSql.nDBType)
347+
{
348+
bSuccess = DBModule_SQLite_QueryLogin(st_UserTable.st_UserInfo.tszLoginTime, tszIPAddr);
349+
}
350+
else
351+
{
352+
bSuccess = DBModule_MySQL_QueryLogin(st_UserTable.st_UserInfo.tszLoginTime, tszIPAddr);
353+
}
354+
//是否存在
355+
if (!bSuccess)
342356
{
343-
//如果不匹配
357+
//不存在.减去一天
344358
__int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1;
345359
_xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime);
346360
BaseLib_Time_TimeToStr(st_UserTable.st_UserInfo.tszLoginTime);
@@ -372,7 +386,19 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
372386
{
373387
Session_Token_Insert(pSt_ProtocolHdr->xhToken, &st_UserTable);
374388
}
389+
//记录每次登陆
390+
XCHAR tszIPAddr[128] = {};
375391

392+
_tcsxcpy(tszIPAddr, lpszClientAddr);
393+
APIAddr_IPAddr_SegAddr(tszIPAddr);
394+
if (0 == st_AuthConfig.st_XSql.nDBType)
395+
{
396+
DBModule_SQLite_UserLogin(st_UserTable.st_UserInfo.tszUserName, tszIPAddr);
397+
}
398+
else
399+
{
400+
DBModule_MySQL_UserLogin(st_UserTable.st_UserInfo.tszUserName, tszIPAddr);
401+
}
376402
pSt_ProtocolHdr->wReserve = 0;
377403
Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType);
378404
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);

0 commit comments

Comments
 (0)