diff --git a/CHANGELOG b/CHANGELOG
index 6f7e7d9e1a7ec696ea7352953e46208d88bd7945..8dbc3e061b99325019e6f2d76e8adca4e149942e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,25 @@
+XEngine_Authorize V3.8.0.1001
+
+添加:管理端用户地址列表支持
+增加:多端登录支持以及合并用时
+更新:匹配XEngine V8.15
+修改:次数卡类型用户登录后就修改了
+修改:不在允许管理用户三方验证了
+修改:管理接口不在限制单点登录了
+修改:会话模块内部代码重构
+修改:功能开关支持多端登录了
+删除:普通用户http登录接口
+
+added:client addr for user list of the management app
+added:mulit device login supported and Merge Time
+update:match xengine v8.15
+modify:login to modify number of time for time serial type
+modify:does not allow http hook for admin user
+modify:the management interface does not limit single login now
+modify:refator code for session module
+modify:function switch supported multi login
+delete:http login for normal user
+================================================================
XEngine_Authorize V3.7.0.1001
添加:登录支持动态验证码功能
diff --git a/README.en.md b/README.en.md
index e9b0cfa9f19a026bbe858670e8d0067623327a42..21f60bcd34146d3c99d0a2edaa7114bf1f714314 100644
--- a/README.en.md
+++ b/README.en.md
@@ -26,7 +26,7 @@ V2 Version can be update to V3,V3 DB Compatible with V2 Databse
## Software feature
A simple and high-performance cross-platform network authentication and authorization server developed and implemented based on XEngine
feature list:
-1. support tcp,http.websocket protocols
+1. support http.websocket protocols
2. Support Encrypto communication
3. Support User Management
4. Support Serial Management
@@ -44,11 +44,12 @@ feature list:
16. local cdkey support
17. announecement management
18. support dynamic verifaction code
+19. support mulit login and merge time
## install
#### XEngine Evn
-you must install XEngine,need V7.46 or above,install XEngine can be refer to xengine Readme docment
+you must install XEngine,need V8.15 or above,install XEngine can be refer to xengine Readme docment
GITEE:https://gitee.com/xyry/libxengine
GITHUB:https://github.com/libxengine/xengine
@@ -64,11 +65,11 @@ Just Run it,use XEngine_AuthorizeService
XEngine_AuthorizeApp is pc management tools
#### Linux
-use makefile compile,UBUNTU20.04 x64 or CENTOS8 x64
+use makefile compile,UBUNTU22.04 x64 or RockyLinux 9 x64
Run it on the terminal,use XEngine_AuthorizeService
#### Macos
-use makefile compile,mac 12 and above
+use makefile compile,mac 13 and above
Run it on the terminal,use XEngine_AuthorizeService
##### compile command
diff --git a/README.md b/README.md
index baeae9ad9274b1ca9f5d454d8608c24090b53b73..bf68b42e93fac94b31c13b9d16900f042089d8d1 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程
## 软件特性
基于XEngine开发并实现的一套简洁高性能跨平台网络验证授权服务器
软件特性:
-1. 支持HTTP,TCP,WEBSOCKET协议
+1. 支持TCP,WEBSOCKET协议
2. 支持加密通信
3. 支持用户管理
4. 支持序列卡管理
@@ -44,11 +44,12 @@ V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程
16. 本地cdkey生成验证支持
17. 支持功公告管理
18. 支持动态验证码登录
+19. 支持多端登录和合并用时
## 安装教程
#### XEngine环境
-必须安装XEngine,版本需要V7.46或者以上版本,安装XEngine可以参考其Readme文档
+必须安装XEngine,版本需要V8.15或者以上版本,安装XEngine可以参考其Readme文档
GITEE:https://gitee.com/xyry/libxengine
GITHUB:https://github.com/libxengine/xengine
@@ -64,11 +65,11 @@ macos执行:./XEngine_LINEnv.sh -i 3
XEngine_AuthorizeApp为PC端管理工具
#### Linux
-Linux使用Makefile编译,UBUNTU20.04 x64或者CENTOS8 x64
+Linux使用Makefile编译,UBUNTU22.04 x64或者RockyLinux 9 x64
在控制台运行,使用XEngine_AuthorizeService
#### Macos
-使用makefile编译,控制台运行,需要mac 12以及以上版本
+使用makefile编译,控制台运行,需要mac 13以及以上版本
在控制台运行,使用XEngine_AuthorizeService
##### 编译命令
@@ -132,9 +133,9 @@ V3版本为全新版本,为了适应过多环境要求开发
## 开发计划
mfc转qt界面库(我们需要会Qt的人员加入一起开发)
+天数卡按照使用天数计费,不使用不计费
+多端登录注册类型开关
短信登录,扫码登录
-支持多端登录
-多端登录合并用时
生成会话TOKEN分布式鉴权
token 自动续期
密码加密
diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp
index 1faea60c23220c8df4ad81a09caceb92c066c812..055630020a425b52c28e83b09067cc85c5fb7003 100644
--- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp
+++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp
@@ -32,7 +32,7 @@ using namespace std;
//Linux::g++ -std=c++17 -Wall -g Auth_APPClient.cpp -o Auth_APPClient.exe -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_BaseLib -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Core -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Client -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_NetHelp -lXEngine_BaseLib -lXEngine_OPenSsl -lXClient_Socket -lNetHelp_APIClient -lpthread -ljsoncpp -Wl,-rpath=../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_BaseLib:../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Core:../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Client:../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_NetHelp,--disable-new-dtags
//Macos::g++ -std=c++17 -Wall -g Auth_APPClient.cpp -o Auth_APPClient.exe -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_BaseLib -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Core -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_Client -L ../../../XEngine/XEngine_Release/XEngine_Linux/Ubuntu/XEngine_NetHelp -lXEngine_BaseLib -lXEngine_OPenSsl -lXClient_Socket -lNetHelp_APIClient -lpthread -ljsoncpp
-#define _DYNAMIC_CODE
+//#define _DYNAMIC_CODE
bool bRun = true;
bool bLogin = true;
bool bTimeOut = true;
@@ -376,6 +376,8 @@ int main()
AuthClient_Notice();
AuthClient_GetPass();
AuthClient_GetTime();
+
+ std::this_thread::sleep_for(std::chrono::seconds(60));
AuthClient_Delete();
AuthClient_Try();
diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx
index 33274f4846ca66686afbe7a5926af39e97c2d3a4..1bfd2105cac0933d42089229bbb941180dc85864 100644
Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ
diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx
index e4624dec12904bffcda097a4d8cd3ffde1a294a1..62d9c010b507c17acac0997029e3a4540132df2a 100644
Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ
diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json
index 559d31cddd1d6949216af20f6e21de7e0d9b4e93..301badf72f2560db9579c0289b5de15bb7576004 100644
--- a/XEngine_Release/XEngine_Config/XEngine_Config.json
+++ b/XEngine_Release/XEngine_Config/XEngine_Config.json
@@ -18,18 +18,24 @@
"nDynamicTimeout":30,
"nVerTime":5,
"nVerMode":1,
- "nTryTime":5,
+ "nTryTime":30,
"nTryMode":1
},
"XLogin":{
- "bMultiLogin":true,
"bHTTPAuth":false,
"bPassAuth":false,
"nHTTPAuthTime":10,
+ "nMultiMode":0,
"st_PassUrl":{
"tszPassLogin":"http://127.0.0.1:5303/auth/pass/login",
"tszPassLogout":"http://127.0.0.1:5303/auth/pass/logout",
"tszPassTimeout":"http://127.0.0.1:5303/auth/pass/timeout"
+ },
+ "st_MulitLogin":{
+ "bMinute":true,
+ "bDay":true,
+ "bTime":true,
+ "bCustom":true
}
},
"XCrypto":{
@@ -46,6 +52,7 @@
"LogLeave":32
},
"XVer":[
+ "V3.8.0.1001 Build20230811",
"V3.7.0.1001 Build20230421",
"V3.6.0.1001 Build20230224",
"V3.5.0.1001 Build20230203",
diff --git a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json
index 14921db102c979ecf40329ddb70b4d4d65fce794..35009195ab576da54241fa1103a01faff5a8fa48 100644
--- a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json
+++ b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json
@@ -7,5 +7,6 @@
"bSwitchTime":true,
"bSwitchCDKey":true,
"bSwitchNotice":true,
- "bSwitchDCode":false
+ "bSwitchDCode":false,
+ "bSwitchMulti":false
}
\ No newline at end of file
diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h
index a3a7c03ff0ee56ae32eb9043cc0c8b8ec8458e1c..866114ceb3baf474e755c8c6912d19d0bbd65684 100644
--- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h
+++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h
@@ -41,16 +41,24 @@ typedef struct
}st_XVerification;
struct
{
- bool bMultiLogin; //是否允许多端登录
bool bHTTPAuth; //是否开启HTTP授权登录,支持HTTP授权验证
bool bPassAuth; //是否启用三方认证
int nHTTPAuthTime; //HTTP验证超时时间,单位秒
+ int nMultiMode; //多端登录模式,0按照平台(PC,WEB,PAD,PHONE 4种),1按照类型(每种都可以)
struct
{
XCHAR tszPassLogin[MAX_PATH]; //三方认证登录验证
XCHAR tszPassLogout[MAX_PATH]; //三方认证登出通知
XCHAR tszPassTimeout[MAX_PATH]; //三方认证超时通知
}st_PassUrl;
+ //多端登录支持的计时方式
+ struct
+ {
+ bool bMinute;
+ bool bDay;
+ bool bTime;
+ bool bCustom;
+ }st_MulitLogin;
}st_XLogin;
struct
{
@@ -85,6 +93,7 @@ typedef struct
bool bSwitchCDKey; //是否允许本地CDKEY创建使用
bool bSwitchNotice; //是否开启公告系统
bool bSwitchDCode; //动态验证码
+ bool bSwitchMulti; //多端登录开关
}XENGINE_FUNCTIONSWITCH;
//////////////////////////////////////////////////////////////////////////
// 导出的函数
diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp
index 46a02d18a75d8a1a7d98556c663b973ef29480af..3bd2434a697a28d87b837cbac8f004b874390306 100644
--- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp
+++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp
@@ -116,22 +116,28 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
pSt_ServerConfig->st_XVerification.nTryTime = st_JsonXVerification["nTryTime"].asInt();
pSt_ServerConfig->st_XVerification.nTryMode = st_JsonXVerification["nTryMode"].asInt();
//登录配置
- if (st_JsonRoot["XLogin"].empty() || (5 != st_JsonRoot["XLogin"].size()))
+ if (st_JsonRoot["XLogin"].empty() || (6 != st_JsonRoot["XLogin"].size()))
{
Config_IsErrorOccur = true;
Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XVER;
return false;
}
Json::Value st_JsonXLogin = st_JsonRoot["XLogin"];
- pSt_ServerConfig->st_XLogin.bMultiLogin = st_JsonXLogin["bMultiLogin"].asBool();
pSt_ServerConfig->st_XLogin.bHTTPAuth = st_JsonXLogin["bHTTPAuth"].asBool();
pSt_ServerConfig->st_XLogin.bPassAuth = st_JsonXLogin["bPassAuth"].asBool();
pSt_ServerConfig->st_XLogin.nHTTPAuthTime = st_JsonXLogin["nHTTPAuthTime"].asInt();
+ pSt_ServerConfig->st_XLogin.nMultiMode = st_JsonXLogin["nMultiMode"].asInt();
Json::Value st_JsonXLoginUrl = st_JsonXLogin["st_PassUrl"];
_tcsxcpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassLogin, st_JsonXLoginUrl["tszPassLogin"].asCString());
_tcsxcpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassLogout, st_JsonXLoginUrl["tszPassLogout"].asCString());
_tcsxcpy(pSt_ServerConfig->st_XLogin.st_PassUrl.tszPassTimeout, st_JsonXLoginUrl["tszPassTimeout"].asCString());
+
+ Json::Value st_JsonMulitLogin = st_JsonXLogin["st_MulitLogin"];
+ pSt_ServerConfig->st_XLogin.st_MulitLogin.bCustom = st_JsonMulitLogin["bCustom"].asBool();
+ pSt_ServerConfig->st_XLogin.st_MulitLogin.bDay = st_JsonMulitLogin["bDay"].asBool();
+ pSt_ServerConfig->st_XLogin.st_MulitLogin.bMinute = st_JsonMulitLogin["bMinute"].asBool();
+ pSt_ServerConfig->st_XLogin.st_MulitLogin.bTime = st_JsonMulitLogin["bTime"].asBool();
//加密配置
if (st_JsonRoot["XCrypto"].empty() || (2 != st_JsonRoot["XCrypto"].size()))
{
@@ -252,5 +258,6 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_Switch(LPCXSTR lpszConfigFile,
pSt_ServerConfig->bSwitchCDKey = st_JsonRoot["bSwitchCDKey"].asBool();
pSt_ServerConfig->bSwitchNotice = st_JsonRoot["bSwitchNotice"].asBool();
pSt_ServerConfig->bSwitchDCode = st_JsonRoot["bSwitchDCode"].asBool();
+ pSt_ServerConfig->bSwitchMulti = st_JsonRoot["bSwitchMulti"].asBool();
return true;
}
\ No newline at end of file
diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp
index fb1641bd3d62f66007e023f902f0f500d34f39ec..368d40c2168e5b0d7a166629dca9e553bdeb839b 100644
--- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp
+++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp
@@ -350,7 +350,7 @@ bool CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time
else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType)
{
//次数卡不需要在线时间,直接减去一次就可以了
- _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttxoll(pSt_TimeProtocol->tszLeftTime) - 1, pSt_TimeProtocol->tszUserName);
+ _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttxoll(pSt_TimeProtocol->tszLeftTime), pSt_TimeProtocol->tszUserName);
}
else
{
diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h
index c1b573c7655b0ab13106065f3ee949b1aed3a259..a6a333708222efcd34f74140aed14e776488b31a 100644
--- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h
+++ b/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h
@@ -24,7 +24,7 @@ public:
bool Database_SQLite_Destroy(); //销毁
public:
bool Database_SQLite_UserDelete(LPCXSTR lpszUserName); //删除用户
- bool Database_SQLite_UserRegister(AUTHREG_USERTABLE*pSt_UserInfo); //用户注册
+ bool Database_SQLite_UserRegister(AUTHREG_USERTABLE*pSt_UserInfo); //用户注册
bool Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo = NULL); //用户查询
bool Database_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialName); //充值卡充值
bool Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h
index baa9097cf753fbfb443426d0ea9980932e6aa6a9..b841358e7282db54e44c8f9743354c31655d3cc3 100644
--- a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h
+++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Define.h
@@ -79,6 +79,28 @@ extern "C" bool AuthHelp_DynamicCode_Create(XNETHANDLE* pxhToken, int* pInt_Dyna
*********************************************************************/
extern "C" bool AuthHelp_DynamicCode_Get(XNETHANDLE xhToken, int nDynamicCode);
/************************************************************************/
+/* 多端登录导出定义 */
+/************************************************************************/
+/********************************************************************
+函数名称:AuthHelp_MultiLogin_GetRange
+函数功能:获取多端登录范围
+ 参数.一:nClientDevice
+ In/Out:In
+ 类型:整数型
+ 可空:N
+ 意思:输入要判断的设备类型
+ 参数.二:pInt_IDType
+ In/Out:In
+ 类型:整数型指针
+ 可空:N
+ 意思:输出设备范围类型
+返回值
+ 类型:逻辑型
+ 意思:是否成功
+备注:
+*********************************************************************/
+extern "C" bool AuthHelp_MultiLogin_GetRange(int nClientDevice, int* pInt_IDType);
+/************************************************************************/
/* 剪贴板导出定义 */
/************************************************************************/
#ifdef _MSC_BUILD
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h
index ab3c5e95ff754a535f32e2570ae8f25271d59c96..22a82b738fad4b413e68e579ab136203acd47e5a 100644
--- a/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h
+++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_Error.h
@@ -34,4 +34,8 @@
#define ERROR_AUTHORIZE_MODULE_HELP_DYNAMIC_THREAD 0x0050020 //线程创建失败
#define ERROR_AUTHORIZE_MODULE_HELP_DYNAMIC_PARAMENT 0x0050021 //参数错误
#define ERROR_AUTHORIZE_MODULE_HELP_DYNAMIC_NOTFOUND 0x0050022 //没有找到
-#define ERROR_AUTHORIZE_MODULE_HELP_DYNAMIC_NOTMATCH 0x0050023 //动态码不匹配
\ No newline at end of file
+#define ERROR_AUTHORIZE_MODULE_HELP_DYNAMIC_NOTMATCH 0x0050023 //动态码不匹配
+/************************************************************************/
+/* 多端登录 */
+/************************************************************************/
+#define ERROR_AUTHORIZE_MODULE_HELP_MULTI_NOTSUPPORT 0x0050030 //不支持
\ No newline at end of file
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.cpp b/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bd02f06a1e52d72e91c5ca756b853465bc8268a6
--- /dev/null
+++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.cpp
@@ -0,0 +1,109 @@
+#include "pch.h"
+#include "AuthHelp_MultiLogin.h"
+/********************************************************************
+// Created: 2023/08/09 15:10:52
+// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_MultiLogin\AuthHelp_MultiLogin.cpp
+// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_MultiLogin
+// File Base: AuthHelp_MultiLogin
+// File Ext: cpp
+// Project: XEngine(网络通信引擎)
+// Author: qyt
+// Purpose: 多端登录处理代码
+// History:
+*********************************************************************/
+CAuthHelp_MultiLogin::CAuthHelp_MultiLogin()
+{
+}
+CAuthHelp_MultiLogin::~CAuthHelp_MultiLogin()
+{
+}
+//////////////////////////////////////////////////////////////////////////
+// 公有函数
+//////////////////////////////////////////////////////////////////////////
+/********************************************************************
+函数名称:AuthHelp_MultiLogin_GetRange
+函数功能:获取多端登录范围
+ 参数.一:nClientDevice
+ In/Out:In
+ 类型:整数型
+ 可空:N
+ 意思:输入要判断的设备类型
+ 参数.二:pInt_IDType
+ In/Out:In
+ 类型:整数型指针
+ 可空:N
+ 意思:输出设备范围类型
+返回值
+ 类型:逻辑型
+ 意思:是否成功
+备注:
+*********************************************************************/
+bool CAuthHelp_MultiLogin::AuthHelp_MultiLogin_GetRange(int nClientDevice, int* pInt_IDType)
+{
+ Help_IsErrorOccur = true;
+
+ //在范围
+ switch (nClientDevice)
+ {
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_WINDOWS:
+ *pInt_IDType = 1;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_LINUX:
+ *pInt_IDType = 1;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_UNIX:
+ *pInt_IDType = 1;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_MACOS:
+ *pInt_IDType = 1;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PAD_SURFACE:
+ *pInt_IDType = 2;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PAD_ANDROID:
+ *pInt_IDType = 2;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_PAD_IPAD:
+ *pInt_IDType = 2;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_MOBILE_ANDROID:
+ *pInt_IDType = 3;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_MOBILE_IOS:
+ *pInt_IDType = 3;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_MOBILE_EMBEDDED:
+ *pInt_IDType = 3;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_IE:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_EDGE:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_CHROME:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_FIREFOX:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_SAFARI:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_OPERA:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_RESTFUL:
+ *pInt_IDType = 4;
+ break;
+ case ENUM_PROTOCOL_FOR_DEVICE_TYPE_WEB_LIKEGG:
+ *pInt_IDType = 4;
+ break;
+ default:
+ Help_IsErrorOccur = true;
+ Help_dwErrorCode = ERROR_AUTHORIZE_MODULE_HELP_MULTI_NOTSUPPORT;
+ return false;
+ }
+
+ return true;
+}
\ No newline at end of file
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.h b/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.h
new file mode 100644
index 0000000000000000000000000000000000000000..09bc69a102a1509ac249ea150075aac9e3e2071c
--- /dev/null
+++ b/XEngine_Source/AuthorizeModule_Help/AuthHelp_MultiLogin/AuthHelp_MultiLogin.h
@@ -0,0 +1,23 @@
+#pragma once
+/********************************************************************
+// Created: 2023/08/09 15:10:42
+// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_MultiLogin\AuthHelp_MultiLogin.h
+// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Help\AuthHelp_MultiLogin
+// File Base: AuthHelp_MultiLogin
+// File Ext: h
+// Project: XEngine(网络通信引擎)
+// Author: qyt
+// Purpose: 多端登录处理代码
+// History:
+*********************************************************************/
+
+class CAuthHelp_MultiLogin
+{
+public:
+ CAuthHelp_MultiLogin();
+ ~CAuthHelp_MultiLogin();
+public:
+ bool AuthHelp_MultiLogin_GetRange(int nClientDevice, int* pInt_IDType);
+protected:
+private:
+};
\ No newline at end of file
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def
index 56f1999abbfc09da9412100dd5f02eb0287c5af4..6e092501388cd3d34d8e46cd1c2157e8ba19558a 100644
--- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def
+++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.def
@@ -8,6 +8,8 @@ EXPORTS
AuthHelp_DynamicCode_Create
AuthHelp_DynamicCode_Get
+ AuthHelp_MultiLogin_GetRange
+
AuthHelp_ClipBoard_Set
AuthHelp_ClipBoard_Get
AuthHelp_ClipBoard_Clear
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj
index b75fd6748bea3879e77ea38d39c960a83304dc6a..789e011ebe33185afecf7b708600eff6a9a9cc94 100644
--- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj
+++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj
@@ -163,6 +163,7 @@
+
@@ -170,6 +171,7 @@
+
diff --git a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters
index 0b4cab9336670799995daa1717fd485df8308eb9..3591ae8cdda879affe53f2dee554c8f8e1ddbfde 100644
--- a/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters
+++ b/XEngine_Source/AuthorizeModule_Help/AuthorizeModule_Help.vcxproj.filters
@@ -31,6 +31,12 @@
{4df65f23-98dc-4355-8843-fbe5041766c9}
+
+ {61a1ebc3-5193-4c3e-a5b6-fe076b84c758}
+
+
+ {92e4cc9f-02d7-4e6d-92a1-86e433e38fd2}
+
@@ -54,6 +60,9 @@
头文件\AuthHelp_DynamicCode
+
+ 头文件\AuthHelp_MultiLogin
+
@@ -71,6 +80,9 @@
源文件\AuthHelp_DynamicCode
+
+ 源文件\AuthHelp_MultiLogin
+
diff --git a/XEngine_Source/AuthorizeModule_Help/Makefile b/XEngine_Source/AuthorizeModule_Help/Makefile
index a1aad7967455fb40ab57ed85777f447a6db8ab30..a8ee4e782b86713ab5efef97d1b9777aeaaf889d 100644
--- a/XEngine_Source/AuthorizeModule_Help/Makefile
+++ b/XEngine_Source/AuthorizeModule_Help/Makefile
@@ -10,7 +10,7 @@ LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp
LOADSO = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L ../XEngine_ThirdPart/jsoncpp
LIB = -lXEngine_BaseLib -ljsoncpp
LIBEX =
-OBJECTS = AuthHelp_DynamicCode.o pch.o
+OBJECTS = AuthHelp_DynamicCode.o AuthHelp_MultiLogin.o pch.o
ifeq ($(RELEASE),1)
FLAGS = -c
@@ -53,6 +53,9 @@ all:$(OBJECTS)
AuthHelp_DynamicCode.o:./AuthHelp_DynamicCode/AuthHelp_DynamicCode.cpp
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./AuthHelp_DynamicCode/AuthHelp_DynamicCode.cpp
+AuthHelp_MultiLogin.o:./AuthHelp_MultiLogin/AuthHelp_MultiLogin.cpp
+ $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./AuthHelp_MultiLogin/AuthHelp_MultiLogin.cpp
+
pch.o:pch.cpp
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) pch.cpp
diff --git a/XEngine_Source/AuthorizeModule_Help/pch.cpp b/XEngine_Source/AuthorizeModule_Help/pch.cpp
index b8bdc3dde2b4ae210f34b6cdc2f6f2ed62ee821e..67ef0f4e8f0762be1d69866eceeae96d7d44e0f7 100644
--- a/XEngine_Source/AuthorizeModule_Help/pch.cpp
+++ b/XEngine_Source/AuthorizeModule_Help/pch.cpp
@@ -1,5 +1,6 @@
#include "pch.h"
#include "AuthHelp_DynamicCode/AuthHelp_DynamicCode.h"
+#include "AuthHelp_MultiLogin/AuthHelp_MultiLogin.h"
#ifdef _MSC_BUILD
#include "AuthHelp_ClipBoard/AuthHelp_ClipBoard.h"
#include "AuthHelp_Windows/AuthHelp_Windows.h"
@@ -19,6 +20,7 @@ bool Help_IsErrorOccur = false;
XLONG Help_dwErrorCode = 0;
//////////////////////////////////////////////////////////////////////////
CAuthHelp_DynamicCode m_HelpDynamic;
+CAuthHelp_MultiLogin m_HelpLogin;
#ifdef _MSC_BUILD
CAuthHelp_ClipBoard m_HelpClipBoard;
CAuthHelp_Windows m_HelpWindow;
@@ -52,6 +54,13 @@ extern "C" bool AuthHelp_DynamicCode_Get(XNETHANDLE xhToken, int nDynamicCode)
return m_HelpDynamic.AuthHelp_DynamicCode_Get(xhToken, nDynamicCode);
}
/************************************************************************/
+/* 多端登录导出定义 */
+/************************************************************************/
+extern "C" bool AuthHelp_MultiLogin_GetRange(int nClientDevice, int* pInt_IDType)
+{
+ return m_HelpLogin.AuthHelp_MultiLogin_GetRange(nClientDevice, pInt_IDType);
+}
+/************************************************************************/
/* 剪贴板导出定义 */
/************************************************************************/
#ifdef _MSC_BUILD
diff --git a/XEngine_Source/AuthorizeModule_Help/pch.h b/XEngine_Source/AuthorizeModule_Help/pch.h
index 546d4260343e940614d25c334e81afc451ed404e..7638499c89fdfafba7074d2b28f3a8fcc61336b4 100644
--- a/XEngine_Source/AuthorizeModule_Help/pch.h
+++ b/XEngine_Source/AuthorizeModule_Help/pch.h
@@ -21,6 +21,7 @@
#include
using namespace std;
#include
+#include
#include
#include
#include "AuthHelp_Define.h"
diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def
index 22030cd09c5e1931b2b41554bf6447d3c386e695..24e40f8a23dac271a690059ee972f2ecdc86c394 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def
+++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.def
@@ -6,6 +6,7 @@ EXPORTS
Protocol_Packet_HDRComm
Protocol_Packet_HttpComm
Protocol_Packet_HttpUserPass
+ Protocol_Packet_UserTime
Protocol_Packet_HttpUserTime
Protocol_Packet_HttpClientInfo
Protocol_Packet_HttpClientList
diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h
index d8877dbcb320168decff2f859cfd100c9e705c1b..977f0268da05aa492645753d16bf8e59cd77153d 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h
+++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h
@@ -100,6 +100,35 @@ extern "C" bool Protocol_Packet_HttpComm(XCHAR* ptszMsgBuffer, int* pInt_MsgLen,
*********************************************************************/
extern "C" bool Protocol_Packet_HttpUserPass(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_PROTOCOL_USERAUTH* pSt_UserAuth);
/********************************************************************
+函数名称:Protocol_Packet_UserTime
+函数功能:用户时间打包函数
+ 参数.一:ptszMsgBuffer
+ In/Out:Out
+ 类型:字符指针
+ 可空:N
+ 意思:输出打好包的数据
+ 参数.二:pInt_MsgLen
+ In/Out:Out
+ 类型:整数型指针
+ 可空:N
+ 意思:输出数据大小
+ 参数.三:pppSt_ListClient
+ In/Out:In
+ 类型:三级指针
+ 可空:N
+ 意思:输入要打包的附加数据
+ 参数.四:nListCount
+ In/Out:In
+ 类型:整数型指针
+ 可空:N
+ 意思:输入数据个数
+返回值
+ 类型:逻辑型
+ 意思:是否成功
+备注:
+*********************************************************************/
+extern "C" bool Protocol_Packet_UserTime(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, AUTHSESSION_NETCLIENT * **pppSt_ListClient, int nListCount);
+/********************************************************************
函数名称:Protocol_Packet_HttpUserTime
函数功能:用户时间打包函数
参数.一:ptszMsgBuffer
@@ -122,7 +151,7 @@ extern "C" bool Protocol_Packet_HttpUserPass(XCHAR* ptszMsgBuffer, int* pInt_Msg
意思:是否成功
备注:
*********************************************************************/
-extern "C" bool Protocol_Packet_HttpUserTime(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime);
+extern "C" bool Protocol_Packet_HttpUserTime(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_PROTOCOL_TIME * pSt_ProtocolTime);
/********************************************************************
函数名称:Protocol_Packet_HttpClientInfo
函数功能:HTTP客户端包装函数
diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp
index bc1308e05de5ec8998aa3c374ac37f0ff67cf9c3..94617f050fcbf18185bc8bcbcdcbfde75b69f921 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp
+++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp
@@ -185,6 +185,67 @@ bool CProtocol_Packet::Protocol_Packet_HttpUserPass(XCHAR* ptszMsgBuffer, int* p
return true;
}
/********************************************************************
+函数名称:Protocol_Packet_UserTime
+函数功能:用户时间打包函数
+ 参数.一:ptszMsgBuffer
+ In/Out:Out
+ 类型:字符指针
+ 可空:N
+ 意思:输出打好包的数据
+ 参数.二:pInt_MsgLen
+ In/Out:Out
+ 类型:整数型指针
+ 可空:N
+ 意思:输出数据大小
+ 参数.三:pppSt_ListClient
+ In/Out:In
+ 类型:三级指针
+ 可空:N
+ 意思:输入要打包的附加数据
+ 参数.四:nListCount
+ In/Out:In
+ 类型:整数型指针
+ 可空:N
+ 意思:输入数据个数
+返回值
+ 类型:逻辑型
+ 意思:是否成功
+备注:
+*********************************************************************/
+bool CProtocol_Packet::Protocol_Packet_UserTime(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHSESSION_NETCLIENT*** pppSt_ListClient, int nListCount)
+{
+ Protocol_IsErrorOccur = false;
+
+ if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen))
+ {
+ Protocol_IsErrorOccur = true;
+ Protocol_dwErrorCode = ERROR_AUTHORIZE_MODULE_PROTOCOL_PARAMENT;
+ return false;
+ }
+ Json::Value st_JsonRoot;
+ Json::Value st_JsonArray;
+
+ for (int i = 0; i < nListCount; i++)
+ {
+ Json::Value st_JsonObject;
+ st_JsonObject["tszUserName"] = (*pppSt_ListClient)[i]->st_UserTable.st_UserInfo.tszUserName;
+ st_JsonObject["tszUserAddr"] = (*pppSt_ListClient)[i]->tszClientAddr;
+ st_JsonObject["tszLeftTime"] = (*pppSt_ListClient)[i]->tszLeftTime;
+ st_JsonObject["nTimeLeft"] = (Json::Value::Int64)(*pppSt_ListClient)[i]->nLeftTime;
+ st_JsonObject["nTimeONLine"] = (Json::Value::Int64)(*pppSt_ListClient)[i]->nOnlineTime;
+ st_JsonObject["enDeviceType"] = (*pppSt_ListClient)[i]->st_UserTable.enDeviceType;
+ st_JsonObject["enSerialType"] = (*pppSt_ListClient)[i]->st_UserTable.enSerialType;
+ st_JsonObject["nNetType"] = (*pppSt_ListClient)[i]->nNetType;
+ st_JsonArray.append(st_JsonObject);
+ }
+ st_JsonRoot["code"] = 0;
+ st_JsonRoot["st_UserTime"] = st_JsonArray;
+
+ *pInt_MsgLen = st_JsonRoot.toStyledString().length();
+ memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen);
+ return true;
+}
+/********************************************************************
函数名称:Protocol_Packet_HttpUserTime
函数功能:用户时间打包函数
参数.一:ptszMsgBuffer
@@ -597,6 +658,7 @@ bool CProtocol_Packet::Protocol_Packet_HttpSwitch(XCHAR* ptszMsgBuffer, int* pIn
st_JsonRoot["bSwitchCDKey"] = pSt_FunSwitch->bSwitchCDKey;
st_JsonRoot["bSwitchNotice"] = pSt_FunSwitch->bSwitchNotice;
st_JsonRoot["bSwitchDCode"] = pSt_FunSwitch->bSwitchDCode;
+ st_JsonRoot["bSwitchMulti"] = pSt_FunSwitch->bSwitchMulti;
*pInt_MsgLen = st_JsonRoot.toStyledString().length();
memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen);
diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h
index 3475ab3908742d87ba8828811a3fefc7bf4505ce..600de6b44c973f501185485b5512fcc5f83b824f 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h
+++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.h
@@ -21,6 +21,7 @@ public:
public:
bool Protocol_Packet_HttpComm(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode = 0, LPCXSTR lpszMsgBuffer = NULL);
bool Protocol_Packet_HttpUserPass(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_PROTOCOL_USERAUTH* pSt_UserAuth);
+ bool Protocol_Packet_UserTime(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHSESSION_NETCLIENT*** pppSt_ListClient, int nListCount);
bool Protocol_Packet_HttpUserTime(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime);
bool Protocol_Packet_HttpClientInfo(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_USERTABLE* pSt_UserTable);
bool Protocol_Packet_HttpClientList(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHSESSION_NETCLIENT*** pppSt_OnClient, int nOnCount, AUTHREG_USERTABLE*** pppSt_OffClient, int nOffCount);
diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp
index d9fae728bc5a7cbcce22b0cc1279d07abb42cb62..d2af41faad72e1eb79ae718bcca3c4347e910f24 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp
+++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp
@@ -818,6 +818,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSwitch(LPCXSTR lpszMsgBuffer, int
pSt_FunSwitch->bSwitchCDKey = st_JsonObject["bSwitchCDKey"].asBool();
pSt_FunSwitch->bSwitchNotice = st_JsonObject["bSwitchNotice"].asBool();
pSt_FunSwitch->bSwitchDCode = st_JsonObject["bSwitchDCode"].asBool();
+ pSt_FunSwitch->bSwitchMulti = st_JsonObject["bSwitchMulti"].asBool();
return true;
}
diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp
index 97404b4f24c3669227a20d25c3e863895939f806..6a587a403603db753f72740c53d076ece7f2c7d3 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp
+++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp
@@ -43,7 +43,11 @@ extern "C" bool Protocol_Packet_HttpUserPass(XCHAR * ptszMsgBuffer, int* pInt_Ms
{
return m_ProtocolPacket.Protocol_Packet_HttpUserPass(ptszMsgBuffer, pInt_MsgLen, pSt_UserAuth);
}
-extern "C" bool Protocol_Packet_HttpUserTime(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_PROTOCOL_TIME * pSt_ProtocolTime)
+extern "C" bool Protocol_Packet_UserTime(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, AUTHSESSION_NETCLIENT * **pppSt_ListClient, int nListCount)
+{
+ return m_ProtocolPacket.Protocol_Packet_UserTime(ptszMsgBuffer, pInt_MsgLen, pppSt_ListClient, nListCount);
+}
+extern "C" bool Protocol_Packet_HttpUserTime(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime)
{
return m_ProtocolPacket.Protocol_Packet_HttpUserTime(ptszMsgBuffer, pInt_MsgLen, pSt_ProtocolTime);
}
diff --git a/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def b/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def
index 620b3506d7439b105f247f42639899b488037149..7791de028a363ae82a40c7070f345df0174e033a 100644
--- a/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def
+++ b/XEngine_Source/AuthorizeModule_Session/AuthorizeModule_Session.def
@@ -5,10 +5,8 @@ EXPORTS
Session_Authorize_Init
Session_Authorize_GetClient
- Session_Authorize_GetClientForUser
- Session_Authorize_GetAddrForUser
Session_Authorize_GetUserForAddr
- Session_Authorize_CloseClient
+ Session_Authorize_CloseAddr
Session_Authorize_Destroy
Session_Authorize_Insert
Session_Authorize_SetUser
diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp
index 5eb5db7949b6bebf4c6a56ac059286afcca5ddfe..0e7b4ba92f5759dccffc946972ec5d92dc707392 100644
--- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp
+++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp
@@ -39,7 +39,7 @@ CSession_Authorize::~CSession_Authorize()
意思:是否初始化成功
备注:
*********************************************************************/
-bool CSession_Authorize::Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS fpCall_AuthEvent,XPVOID lParam /* = NULL */)
+bool CSession_Authorize::Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS fpCall_AuthEvent, XPVOID lParam /* = NULL */)
{
Session_IsErrorOccur = false;
@@ -87,7 +87,7 @@ bool CSession_Authorize::Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSI
意思:是否获取成功
备注:参数一必须通过基础库的内存释放函数BaseLib_OperatorMemory_Free进行释放内存
*********************************************************************/
-bool CSession_Authorize::Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientAddr /* = NULL */)
+bool CSession_Authorize::Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientUser /* = NULL */)
{
Session_IsErrorOccur = false;
@@ -98,124 +98,49 @@ bool CSession_Authorize::Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pp
return false;
}
st_Locker.lock_shared();
- if (NULL == lpszClientAddr)
+ if (NULL == lpszClientUser)
{
- BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_ListClient, stl_MapNetClient.size(), sizeof(AUTHSESSION_NETCLIENT));
+ list stl_ListClient;
+ for (auto stl_MapIterator = stl_MapNetClient.begin(); stl_MapIterator != stl_MapNetClient.cend(); stl_MapIterator++)
+ {
+ list::iterator stl_ListIterator = stl_MapIterator->second.begin();
+ for (; stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
+ {
+ stl_ListClient.push_back(*stl_ListIterator);
+ }
+ }
+ *pInt_ListCount = stl_ListClient.size();
+ BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_ListClient, stl_ListClient.size(), sizeof(AUTHSESSION_NETCLIENT));
- unordered_map::const_iterator stl_MapIterator = stl_MapNetClient.begin();
- for (int i = 0; stl_MapIterator != stl_MapNetClient.cend(); stl_MapIterator++, i++)
+ auto stl_ListIterator = stl_ListClient.begin();
+ for (int i = 0; stl_ListIterator != stl_ListClient.end(); stl_ListIterator++, i++)
{
- *(*pppSt_ListClient)[i] = stl_MapIterator->second;
+ *(*pppSt_ListClient)[i] = *stl_ListIterator;
}
- *pInt_ListCount = stl_MapNetClient.size();
}
else
{
- unordered_map::const_iterator stl_MapIterator = stl_MapNetClient.find(lpszClientAddr);
- if (stl_MapIterator == stl_MapNetClient.cend())
+ auto stl_MapIterator = stl_MapNetClient.find(lpszClientUser);
+ if (stl_MapIterator != stl_MapNetClient.end())
{
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND;
- st_Locker.unlock_shared();
- return false;
- }
- BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_ListClient, stl_MapNetClient.size(), sizeof(AUTHSESSION_NETCLIENT));
+ *pInt_ListCount = stl_MapIterator->second.size();
+ BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_ListClient, stl_MapIterator->second.size(), sizeof(AUTHSESSION_NETCLIENT));
- *(*pppSt_ListClient)[0] = stl_MapIterator->second;
- *pInt_ListCount = 1;
+ auto stl_ListIterator = stl_MapIterator->second.begin();
+ for (int i = 0; stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++, i++)
+ {
+ *(*pppSt_ListClient)[i] = *stl_ListIterator;
+ }
+ }
}
st_Locker.unlock_shared();
if (0 == *pInt_ListCount)
- {
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND;
- return false;
- }
- return true;
-}
-/********************************************************************
-函数名称:Session_Authorize_GetClientForUser
-函数功能:获取客户端信息
- 参数.一:lpszUserName
- In/Out:In
- 类型:常量字符指针
- 可空:N
- 意思:输入要查找用户名
- 参数.二:pSt_Client
- In/Out:Out
- 类型:数据结构指针
- 可空:N
- 意思:用户信息结构体
-返回值
- 类型:逻辑型
- 意思:是否获取成功
-备注:通过卡类型来判断导出的时间是分钟还是天
-*********************************************************************/
-bool CSession_Authorize::Session_Authorize_GetClientForUser(LPCXSTR lpszUserName, AUTHSESSION_NETCLIENT* pSt_Client)
-{
- Session_IsErrorOccur = false;
-
- if ((NULL == lpszUserName) || (NULL == pSt_Client))
- {
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_PARAMENT;
- return false;
- }
- st_Locker.lock_shared();
- unordered_map::const_iterator stl_MapIterator = stl_MapNetClient.find(lpszUserName);
- if (stl_MapIterator == stl_MapNetClient.end())
- {
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND;
- st_Locker.unlock_shared();
- return false;
- }
- *pSt_Client = stl_MapIterator->second;
- st_Locker.unlock_shared();
-
- return true;
-}
-/********************************************************************
-函数名称:Session_Authorize_GetAddrForUser
-函数功能:通过用户名获取对应地址
- 参数.一:lpszClientUser
- In/Out:In
- 类型:常量字符指针
- 可空:N
- 意思:输入用户名
- 参数.二:ptszClientAddr
- In/Out:Out
- 类型:字符指针
- 可空:N
- 意思:导出获取到的用户套接字地址
-返回值
- 类型:逻辑型
- 意思:是否成功
-备注:
-*********************************************************************/
-bool CSession_Authorize::Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser, XCHAR *ptszClientAddr)
-{
- Session_IsErrorOccur = false;
-
- if ((NULL == lpszClientUser) || (NULL == ptszClientAddr))
- {
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_PARAMENT;
- return false;
- }
- st_Locker.lock_shared();
- unordered_map::const_iterator stl_MapIterator = stl_MapNetClient.find(lpszClientUser);
- if (stl_MapIterator == stl_MapNetClient.end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND;
- st_Locker.unlock_shared();
return false;
}
- _tcsxcpy(ptszClientAddr,stl_MapIterator->second.tszClientAddr);
- st_Locker.unlock_shared();
-
return true;
}
/********************************************************************
@@ -226,72 +151,95 @@ bool CSession_Authorize::Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser
类型:常量字符指针
可空:N
意思:输入IP地址端口
- 参数.二:ptszClientUser
+ 参数.二:pSt_Client
In/Out:Out
- 类型:字符指针
+ 类型:数据结构指针
可空:N
- 意思:导出获取到的用户名
+ 意思:导出获取到的信息
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
-bool CSession_Authorize::Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, XCHAR *ptszClientUser)
+bool CSession_Authorize::Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, AUTHSESSION_NETCLIENT* pSt_Client /* = NULL */)
{
Session_IsErrorOccur = false;
- if ((NULL == lpszClientAddr) || (NULL == ptszClientUser))
+ if ((NULL == lpszClientAddr))
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_PARAMENT;
return false;
}
- bool bIsFound = false;
+ bool bFound = false;
st_Locker.lock_shared();
- unordered_map::const_iterator stl_MapIterator = stl_MapNetClient.begin();
- for (;stl_MapIterator != stl_MapNetClient.end();stl_MapIterator++)
+ for (auto stl_MapIterator = stl_MapNetClient.begin(); stl_MapIterator != stl_MapNetClient.end(); stl_MapIterator++)
{
- if (0 == _tcsxncmp(lpszClientAddr, stl_MapIterator->second.tszClientAddr, _tcsxlen(lpszClientAddr)))
+ for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
+ {
+ if (0 == _tcsxnicmp(lpszClientAddr, stl_ListIterator->tszClientAddr, _tcsxlen(lpszClientAddr)))
+ {
+ if (NULL != pSt_Client)
+ {
+ *pSt_Client = *stl_ListIterator;
+ }
+ bFound = true;
+ break;
+ }
+ }
+ if (bFound)
{
- bIsFound = true;
break;
}
}
- if (!bIsFound)
+ st_Locker.unlock_shared();
+ if (!bFound)
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_NOTFOUND;
- st_Locker.unlock_shared();
return false;
}
- _tcsxcpy(ptszClientUser, stl_MapIterator->first.c_str());
- st_Locker.unlock_shared();
-
return true;
}
/********************************************************************
-函数名称:Session_Authorize_CloseClient
+函数名称:Session_Authorize_CloseAddr
函数功能:移除一个客户端
- 参数.一:lpszClientUser
+ 参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
- 意思:要移除的用户名
+ 意思:要移除的地址
返回值
类型:逻辑型
意思:是否移除成功
备注:
*********************************************************************/
-bool CSession_Authorize::Session_Authorize_CloseClient(LPCXSTR lpszClientAddr)
+bool CSession_Authorize::Session_Authorize_CloseAddr(LPCXSTR lpszClientAddr)
{
Session_IsErrorOccur = false;
+ bool bFound = false;
st_Locker.lock();
- unordered_map::iterator stl_MapIterator = stl_MapNetClient.find(lpszClientAddr);
- if (stl_MapIterator != stl_MapNetClient.end())
+ for (auto stl_MapIterator = stl_MapNetClient.begin(); stl_MapIterator != stl_MapNetClient.end(); stl_MapIterator++)
{
- //移除元素
- stl_MapNetClient.erase(stl_MapIterator);
+ for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
+ {
+ if (0 == _tcsxnicmp(lpszClientAddr, stl_ListIterator->tszClientAddr, _tcsxlen(lpszClientAddr)))
+ {
+ bFound = true;
+ stl_MapIterator->second.erase(stl_ListIterator);
+ break;
+ }
+ }
+ if (stl_MapIterator->second.empty())
+ {
+ //移除元素
+ stl_MapNetClient.erase(stl_MapIterator);
+ }
+ if (bFound)
+ {
+ break;
+ }
}
st_Locker.unlock();
return true;
@@ -308,7 +256,7 @@ bool CSession_Authorize::Session_Authorize_Destroy()
{
Session_IsErrorOccur = false;
- bIsRun = false;
+ bIsRun = false;
//结束线程
if (NULL != pSTDThread_hActive)
{
@@ -343,7 +291,7 @@ bool CSession_Authorize::Session_Authorize_Destroy()
意思:是否允许登陆
备注:如果成功,服务器会自动进行计时
*********************************************************************/
-bool CSession_Authorize::Session_Authorize_Insert(LPCXSTR lpszClientAddr, AUTHREG_USERTABLE *pSt_UserTable, int nNetType)
+bool CSession_Authorize::Session_Authorize_Insert(LPCXSTR lpszClientAddr, AUTHREG_USERTABLE* pSt_UserTable, int nNetType)
{
Session_IsErrorOccur = false;
@@ -354,27 +302,35 @@ bool CSession_Authorize::Session_Authorize_Insert(LPCXSTR lpszClientAddr, AUTHRE
return false;
}
//验证是否登陆
- st_Locker.lock_shared();
- unordered_map::iterator stl_MapIterator = stl_MapNetClient.find(pSt_UserTable->st_UserInfo.tszUserName);
- if (stl_MapIterator != stl_MapNetClient.end())
+ if (Session_Authorize_GetUserForAddr(lpszClientAddr))
{
- Session_IsErrorOccur = true;
- Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_ISLOGIN;
- st_Locker.unlock_shared();
- return false;
+ Session_IsErrorOccur = true;
+ Session_dwErrorCode = ERROR_AUTHORIZE_MODULE_SESSION_ISLOGIN;
+ return false;
}
- st_Locker.unlock_shared();
+ AUTHSESSION_NETCLIENT st_Client;
+ memset(&st_Client, '\0', sizeof(AUTHSESSION_NETCLIENT));
- AUTHSESSION_NETCLIENT st_Client;
- memset(&st_Client,'\0',sizeof(AUTHSESSION_NETCLIENT));
+ st_Client.nNetType = nNetType;
+ st_Client.nLeftTime = _ttxoll(pSt_UserTable->tszLeftTime);
- st_Client.nNetType = nNetType;
- BaseLib_OperatorTime_GetSysTime(&st_Client.st_LibTimer);
- _tcsxcpy(st_Client.tszClientAddr,lpszClientAddr);
- memcpy(&st_Client.st_UserTable, pSt_UserTable, sizeof(AUTHREG_USERTABLE));
+ BaseLib_OperatorTime_GetSysTime(&st_Client.st_LibTimer);
+ _tcsxcpy(st_Client.tszClientAddr, lpszClientAddr);
+ memcpy(&st_Client.st_UserTable, pSt_UserTable, sizeof(AUTHREG_USERTABLE));
st_Locker.lock();
- stl_MapNetClient.insert(make_pair(pSt_UserTable->st_UserInfo.tszUserName, st_Client));
+ auto stl_MapIterator = stl_MapNetClient.find(pSt_UserTable->st_UserInfo.tszUserName);
+ if (stl_MapIterator == stl_MapNetClient.end())
+ {
+ //没找到,插入
+ list stl_ListClient = { st_Client };
+ stl_MapNetClient.insert(make_pair(pSt_UserTable->st_UserInfo.tszUserName, stl_ListClient));
+ }
+ else
+ {
+ //找到了
+ stl_MapIterator->second.push_back(st_Client);
+ }
st_Locker.unlock();
return true;
}
@@ -403,7 +359,7 @@ bool CSession_Authorize::Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTa
}
//验证是否登陆
st_Locker.lock_shared();
- unordered_map::iterator stl_MapIterator = stl_MapNetClient.find(pSt_UserTable->st_UserInfo.tszUserName);
+ auto stl_MapIterator = stl_MapNetClient.find(pSt_UserTable->st_UserInfo.tszUserName);
if (stl_MapIterator == stl_MapNetClient.end())
{
Session_IsErrorOccur = true;
@@ -411,7 +367,10 @@ bool CSession_Authorize::Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTa
st_Locker.unlock_shared();
return false;
}
- memcpy(&stl_MapIterator->second.st_UserTable, pSt_UserTable, sizeof(AUTHREG_USERTABLE));
+ for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
+ {
+ stl_ListIterator->st_UserTable = *pSt_UserTable;
+ }
st_Locker.unlock_shared();
return true;
}
@@ -420,111 +379,122 @@ bool CSession_Authorize::Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTa
//////////////////////////////////////////////////////////////////////////
XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam)
{
- CSession_Authorize *pClass_This = (CSession_Authorize *)lParam;
- XENGINE_LIBTIMER st_LibTimer;
- AUTHREG_PROTOCOL_TIME st_ProtocolTimer;
- list stl_ListNotify;
+ CSession_Authorize* pClass_This = (CSession_Authorize*)lParam;
+ list stl_ListNotify;
while (pClass_This->bIsRun)
{
//开始轮训用户
pClass_This->st_Locker.lock_shared();
- unordered_map::iterator stl_MapIterator = pClass_This->stl_MapNetClient.begin();
- for (; stl_MapIterator != pClass_This->stl_MapNetClient.end(); stl_MapIterator++)
+ for (auto stl_MapIterator = pClass_This->stl_MapNetClient.begin(); stl_MapIterator != pClass_This->stl_MapNetClient.end(); stl_MapIterator++)
{
- memset(&st_ProtocolTimer, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- BaseLib_OperatorTime_GetSysTime(&st_LibTimer); //获取现在的系统时间
- __int64x nOnlineSpan = 0; //在线时间
- //用户登录了多少分钟
- BaseLib_OperatorTimeSpan_GetForStu(&stl_MapIterator->second.st_LibTimer, &st_LibTimer, &nOnlineSpan, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_MINUTE);
- //登陆成功的。我们要处理他过期
- switch (stl_MapIterator->second.st_UserTable.enSerialType)
- {
- case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_MINUTE:
+ __int64x nTimeCount = 0;
+ for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
{
- //分钟处理
- __int64x nLeftTimer = _ttxoll(stl_MapIterator->second.st_UserTable.tszLeftTime);
- //获得过期日期
- XENGINE_LIBTIMER st_TimeCal;
- memset(&st_TimeCal, '\0', sizeof(XENGINE_LIBTIMER));
+ __int64x nOnlineSpan = 0; //在线时间
+ XENGINE_LIBTIMER st_LibTimer;
+ AUTHREG_PROTOCOL_TIME st_ProtocolTimer;
- st_TimeCal.wMinute = (int)nLeftTimer;
- BaseLib_OperatorTimeSpan_CalForStu(&stl_MapIterator->second.st_LibTimer, &st_TimeCal);
- BaseLib_OperatorTime_TimeToStr(stl_MapIterator->second.tszLeftTime, NULL, true, &st_TimeCal);
- //赋值给管理器
- if (nLeftTimer > nOnlineSpan)
- {
- stl_MapIterator->second.nLeftTime = nLeftTimer - nOnlineSpan;
- }
- else
- {
- stl_MapIterator->second.nLeftTime = 0;
- }
- stl_MapIterator->second.nOnlineTime = nOnlineSpan;
- //赋值给回调函数
- st_ProtocolTimer.nTimeONLine = nOnlineSpan;
- st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType;
- st_ProtocolTimer.nTimeLeft = stl_MapIterator->second.nLeftTime;
- st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType;
- st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType;
- _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_MapIterator->second.tszLeftTime);
- _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_MapIterator->second.tszClientAddr);
- _tcsxcpy(st_ProtocolTimer.tszUserName, stl_MapIterator->second.st_UserTable.st_UserInfo.tszUserName);
- stl_ListNotify.push_back(st_ProtocolTimer);
- }
- break;
- case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME:
- {
- //次数处理
- stl_MapIterator->second.nOnlineTime = nOnlineSpan;
- stl_MapIterator->second.nLeftTime = _ttxoll(stl_MapIterator->second.st_UserTable.tszLeftTime);
- _xstprintf(stl_MapIterator->second.tszLeftTime, _X("%lld"), stl_MapIterator->second.nLeftTime);
- //次数处理不做任何时间操作
- st_ProtocolTimer.nTimeONLine = nOnlineSpan;
- st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType;
- st_ProtocolTimer.nTimeLeft = stl_MapIterator->second.nLeftTime;
- st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType;
- st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType;
- _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_MapIterator->second.st_UserTable.tszLeftTime);
- _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_MapIterator->second.tszClientAddr);
- _tcsxcpy(st_ProtocolTimer.tszUserName, stl_MapIterator->second.st_UserTable.st_UserInfo.tszUserName);
- stl_ListNotify.push_back(st_ProtocolTimer);
- }
- break;
- default:
- //天卡,自定义 都是用相同的函数处理
- __int64x nLeftTime = 0; //剩余时间
- XENGINE_LIBTIMER st_TimeLeft;
- memset(&st_TimeLeft, '\0', sizeof(XENGINE_LIBTIMER));
- //获取指定过期日期
- if (6 != _stxscanf(stl_MapIterator->second.st_UserTable.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_TimeLeft.wYear, &st_TimeLeft.wMonth, &st_TimeLeft.wDay, &st_TimeLeft.wHour, &st_TimeLeft.wMinute, &st_TimeLeft.wSecond))
- {
+ memset(&st_LibTimer, '\0', sizeof(XENGINE_LIBTIMER));
+ memset(&st_ProtocolTimer, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
+ //获取现在的系统时间
+ BaseLib_OperatorTime_GetSysTime(&st_LibTimer);
+ //用户登录了多少分钟
+ BaseLib_OperatorTimeSpan_GetForStu(&stl_ListIterator->st_LibTimer, &st_LibTimer, &nOnlineSpan, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_MINUTE);
+ nTimeCount += nOnlineSpan;
+ //登陆成功的。我们要处理他过期
+ switch (stl_ListIterator->st_UserTable.enSerialType)
+ {
+ case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_MINUTE:
+ {
+ //分钟处理
+ XENGINE_LIBTIMER st_TimeCal;
+ memset(&st_TimeCal, '\0', sizeof(XENGINE_LIBTIMER));
+
+ st_TimeCal.wMinute = (int)stl_ListIterator->nLeftTime;
+ BaseLib_OperatorTimeSpan_CalForStu(&stl_ListIterator->st_LibTimer, &st_TimeCal);
+ BaseLib_OperatorTime_TimeToStr(stl_ListIterator->tszLeftTime, NULL, true, &st_TimeCal);
+
+ stl_ListIterator->nOnlineTime = nOnlineSpan;
+ //赋值给回调函数
+ st_ProtocolTimer.nTimeONLine = nOnlineSpan;
+ st_ProtocolTimer.nNetType = stl_ListIterator->nNetType;
+ st_ProtocolTimer.nTimeLeft = stl_ListIterator->nLeftTime;
+ st_ProtocolTimer.enSerialType = stl_ListIterator->st_UserTable.enSerialType;
+ st_ProtocolTimer.enDeviceType = stl_ListIterator->st_UserTable.enDeviceType;
+ _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_ListIterator->tszLeftTime);
+ _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_ListIterator->tszClientAddr);
+ _tcsxcpy(st_ProtocolTimer.tszUserName, stl_ListIterator->st_UserTable.st_UserInfo.tszUserName);
break;
- }
- //剩余天数,通过分钟来处理
- BaseLib_OperatorTimeSpan_GetForStu(&st_LibTimer, &st_TimeLeft, &nLeftTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_MINUTE);
- //获取过期时间
- stl_MapIterator->second.nLeftTime = nLeftTime;
- stl_MapIterator->second.nOnlineTime = nOnlineSpan;
- _tcsxcpy(stl_MapIterator->second.tszLeftTime, stl_MapIterator->second.st_UserTable.tszLeftTime);
- //计算时间是否超过!
- AUTHREG_PROTOCOL_TIME st_ProtocolTimer;
- memset(&st_ProtocolTimer, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
+ }
+ case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME:
+ {
+ //次数处理
+ stl_ListIterator->nOnlineTime = nOnlineSpan;
+ _xstprintf(stl_ListIterator->tszLeftTime, _X("%lld"), stl_ListIterator->nLeftTime);
+ //次数处理不做任何时间操作
+ st_ProtocolTimer.nTimeONLine = nOnlineSpan;
+ st_ProtocolTimer.nNetType = stl_ListIterator->nNetType;
+ st_ProtocolTimer.nTimeLeft = stl_ListIterator->nLeftTime;
+ st_ProtocolTimer.enSerialType = stl_ListIterator->st_UserTable.enSerialType;
+ st_ProtocolTimer.enDeviceType = stl_ListIterator->st_UserTable.enDeviceType;
+ _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_ListIterator->st_UserTable.tszLeftTime);
+ _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_ListIterator->tszClientAddr);
+ _tcsxcpy(st_ProtocolTimer.tszUserName, stl_ListIterator->st_UserTable.st_UserInfo.tszUserName);
+ break;
+ }
+ default:
+ {
+ //天卡,自定义 都是用相同的函数处理
+ __int64x nLeftTime = 0; //剩余时间
+ XENGINE_LIBTIMER st_TimeLeft;
+ memset(&st_TimeLeft, '\0', sizeof(XENGINE_LIBTIMER));
+ //获取指定过期日期
+ if (6 != _stxscanf(stl_ListIterator->st_UserTable.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_TimeLeft.wYear, &st_TimeLeft.wMonth, &st_TimeLeft.wDay, &st_TimeLeft.wHour, &st_TimeLeft.wMinute, &st_TimeLeft.wSecond))
+ {
+ break;
+ }
+ //剩余天数,通过分钟来处理
+ BaseLib_OperatorTimeSpan_GetForStu(&st_LibTimer, &st_TimeLeft, &nLeftTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_MINUTE);
+ //获取过期时间
+ stl_ListIterator->nLeftTime = nLeftTime;
+ stl_ListIterator->nOnlineTime = nOnlineSpan;
+ _tcsxcpy(stl_ListIterator->tszLeftTime, stl_ListIterator->st_UserTable.tszLeftTime);
+ //计算时间是否超过!
+ AUTHREG_PROTOCOL_TIME st_ProtocolTimer;
+ memset(&st_ProtocolTimer, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- st_ProtocolTimer.nTimeONLine = nOnlineSpan;
- st_ProtocolTimer.nTimeLeft = nLeftTime;
- st_ProtocolTimer.nNetType = stl_MapIterator->second.nNetType;
- st_ProtocolTimer.enSerialType = stl_MapIterator->second.st_UserTable.enSerialType;
- st_ProtocolTimer.enDeviceType = stl_MapIterator->second.st_UserTable.enDeviceType;
- _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_MapIterator->second.st_UserTable.tszLeftTime);
- _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_MapIterator->second.tszClientAddr);
- _tcsxcpy(st_ProtocolTimer.tszUserName, stl_MapIterator->second.st_UserTable.st_UserInfo.tszUserName);
+ st_ProtocolTimer.nTimeONLine = nOnlineSpan;
+ st_ProtocolTimer.nTimeLeft = nLeftTime;
+ st_ProtocolTimer.nNetType = stl_ListIterator->nNetType;
+ st_ProtocolTimer.enSerialType = stl_ListIterator->st_UserTable.enSerialType;
+ st_ProtocolTimer.enDeviceType = stl_ListIterator->st_UserTable.enDeviceType;
+ _tcsxcpy(st_ProtocolTimer.tszLeftTime, stl_ListIterator->st_UserTable.tszLeftTime);
+ _tcsxcpy(st_ProtocolTimer.tszUserAddr, stl_ListIterator->tszClientAddr);
+ _tcsxcpy(st_ProtocolTimer.tszUserName, stl_ListIterator->st_UserTable.st_UserInfo.tszUserName);
+ break;
+ }
+ }
stl_ListNotify.push_back(st_ProtocolTimer);
- break;
}
+ //处理多端登录情况
+ for (auto stl_ListIterator = stl_MapIterator->second.begin(); stl_ListIterator != stl_MapIterator->second.end(); stl_ListIterator++)
+ {
+ if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_MINUTE == stl_ListIterator->st_UserTable.enSerialType)
+ {
+ for (auto stl_ListNotifyIterator = stl_ListNotify.begin(); stl_ListNotifyIterator != stl_ListNotify.end(); stl_ListNotifyIterator++)
+ {
+ if (0 == _tcsxnicmp(stl_ListNotifyIterator->tszUserAddr, stl_ListIterator->tszClientAddr, _tcsxlen(stl_ListNotifyIterator->tszUserAddr)))
+ {
+ stl_ListNotifyIterator->nTimeLeft -= nTimeCount;
+ break;
+ }
+ }
+ }
+ }
}
pClass_This->st_Locker.unlock_shared();
- //判断是否有需要关闭的客户端
+ //返回数据
if (!stl_ListNotify.empty())
{
list::iterator stl_ListIterator = stl_ListNotify.begin();
@@ -532,9 +502,10 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam)
{
pClass_This->lpCall_AuthregEvents(stl_ListIterator->tszUserAddr, stl_ListIterator->tszUserName, stl_ListIterator->nTimeONLine, stl_ListIterator->nTimeLeft, stl_ListIterator->tszLeftTime, stl_ListIterator->enSerialType, stl_ListIterator->enDeviceType, stl_ListIterator->nNetType, pClass_This->m_lParam);
}
- stl_ListNotify.clear(); //清理元素
}
- std::this_thread::sleep_for(std::chrono::seconds(1));
+ //清理元素
+ stl_ListNotify.clear();
+ std::this_thread::sleep_for(std::chrono::seconds(5));
}
return 0;
}
diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h
index efcc35b8d55fb83b9071fc152adaab2a5b4602ba..2fc4ec934a490df3755b4459f6dc6ac74f23fd47 100644
--- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h
+++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.h
@@ -14,29 +14,27 @@
class CSession_Authorize
{
public:
- CSession_Authorize();
- ~CSession_Authorize();
+ CSession_Authorize();
+ ~CSession_Authorize();
public:
- bool Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS fpCall_AuthEvent,XPVOID lParam = NULL);
- bool Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientAddr = NULL);
- bool Session_Authorize_GetClientForUser(LPCXSTR lpszUserName, AUTHSESSION_NETCLIENT* pSt_Client);
- bool Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser,XCHAR *ptszClientAddr);
- bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, XCHAR *ptszClientUser);
- bool Session_Authorize_CloseClient(LPCXSTR lpszClientAddr);
- bool Session_Authorize_Destroy();
+ bool Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS fpCall_AuthEvent, XPVOID lParam = NULL);
+ bool Session_Authorize_GetClient(AUTHSESSION_NETCLIENT*** pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientUser = NULL);
+ bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, AUTHSESSION_NETCLIENT* pSt_Client = NULL);
+ bool Session_Authorize_CloseAddr(LPCXSTR lpszClientAddr);
+ bool Session_Authorize_Destroy();
public:
- bool Session_Authorize_Insert(LPCXSTR lpszClientAddr, AUTHREG_USERTABLE* pSt_UserTable, int nNetType = 0);
- bool Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTable);
+ bool Session_Authorize_Insert(LPCXSTR lpszClientAddr, AUTHREG_USERTABLE* pSt_UserTable, int nNetType = 0);
+ bool Session_Authorize_SetUser(AUTHREG_USERTABLE* pSt_UserTable);
protected:
- static XHTHREAD Session_Authorize_ActiveThread(XPVOID lParam); //计时器线程
+ static XHTHREAD Session_Authorize_ActiveThread(XPVOID lParam); //计时器线程
private:
- bool bIsRun; //运行标志
- shared_ptr pSTDThread_hActive; //时间计算器线程句柄
+ bool bIsRun; //运行标志
+ shared_ptr pSTDThread_hActive; //时间计算器线程句柄
private:
- XPVOID m_lParam;
- CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS lpCall_AuthregEvents;
+ XPVOID m_lParam;
+ CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS lpCall_AuthregEvents;
private:
- shared_mutex st_Locker;
+ shared_mutex st_Locker;
private:
- unordered_map stl_MapNetClient;
+ unordered_map > stl_MapNetClient;
};
diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Define.h b/XEngine_Source/AuthorizeModule_Session/Session_Define.h
index bd2c3e02176e37f6f2b0a38627dffe774303fba7..7adcb323f9b006fb8469b16cf0545c6bb94462d4 100644
--- a/XEngine_Source/AuthorizeModule_Session/Session_Define.h
+++ b/XEngine_Source/AuthorizeModule_Session/Session_Define.h
@@ -75,45 +75,7 @@ extern "C" bool Session_Authorize_Init(CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT
意思:是否获取成功
备注:参数一必须通过基础库的内存释放函数BaseLib_OperatorMemory_Free进行释放内存
*********************************************************************/
-extern "C" bool Session_Authorize_GetClient(AUTHSESSION_NETCLIENT * **pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientAddr = NULL);
-/********************************************************************
-函数名称:Session_Authorize_GetClientForUser
-函数功能:获取客户端信息
- 参数.一:lpszUserName
- In/Out:In
- 类型:常量字符指针
- 可空:N
- 意思:输入要查找用户名
- 参数.二:pSt_Client
- In/Out:Out
- 类型:数据结构指针
- 可空:N
- 意思:用户信息结构体
-返回值
- 类型:逻辑型
- 意思:是否获取成功
-备注:通过卡类型来判断导出的时间是分钟还是天
-*********************************************************************/
-extern "C" bool Session_Authorize_GetClientForUser(LPCXSTR lpszUserName, AUTHSESSION_NETCLIENT * pSt_Client);
-/********************************************************************
-函数名称:Session_Authorize_GetAddrForUser
-函数功能:通过用户名获取对应地址
- 参数.一:lpszClientUser
- In/Out:In
- 类型:常量字符指针
- 可空:N
- 意思:输入用户名
- 参数.二:ptszClientAddr
- In/Out:Out
- 类型:字符指针
- 可空:N
- 意思:导出获取到的用户套接字地址
-返回值
- 类型:逻辑型
- 意思:是否成功
-备注:
-*********************************************************************/
-extern "C" bool Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser,XCHAR *ptszClientAddr);
+extern "C" bool Session_Authorize_GetClient(AUTHSESSION_NETCLIENT * **pppSt_ListClient, int* pInt_ListCount, LPCXSTR lpszClientUser = NULL);
/********************************************************************
函数名称:Session_Authorize_GetUserForAddr
函数功能:通过IP地址获取对应用户名
@@ -122,31 +84,31 @@ extern "C" bool Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser,XCHAR *p
类型:常量字符指针
可空:N
意思:输入IP地址端口
- 参数.二:ptszClientUser
+ 参数.二:pSt_Client
In/Out:Out
- 类型:字符指针
+ 类型:数据结构指针
可空:N
- 意思:导出获取到的用户名
+ 意思:导出获取到的信息
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
-extern "C" bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, XCHAR *ptszClientUser);
+extern "C" bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, AUTHSESSION_NETCLIENT * pSt_Client = NULL);
/********************************************************************
-函数名称:Session_Authorize_CloseClient
+函数名称:Session_Authorize_CloseAddr
函数功能:移除一个客户端
- 参数.一:lpszClientUser
+ 参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
- 意思:要移除的用户名
+ 意思:要移除的地址
返回值
类型:逻辑型
意思:是否移除成功
-备注:此函数会自动调用AuthRegService_Sql_UserLeave来处理离开时间
+备注:
*********************************************************************/
-extern "C" bool Session_Authorize_CloseClient(LPCXSTR lpszClientUser);
+extern "C" bool Session_Authorize_CloseAddr(LPCXSTR lpszClientAddr);
/********************************************************************
函数名称:Session_Authorize_Destroy
函数功能:销毁网络服务
diff --git a/XEngine_Source/AuthorizeModule_Session/pch.cpp b/XEngine_Source/AuthorizeModule_Session/pch.cpp
index 0e09b49bc1f7de50ee4684573c9e5072eaf7fa03..1c393d37d6e2a7a1cd7ed13df6aacb0a11812e07 100644
--- a/XEngine_Source/AuthorizeModule_Session/pch.cpp
+++ b/XEngine_Source/AuthorizeModule_Session/pch.cpp
@@ -39,21 +39,13 @@ extern "C" bool Session_Authorize_GetClient(AUTHSESSION_NETCLIENT * **pppSt_List
{
return m_SessionAuth.Session_Authorize_GetClient(pppSt_ListClient, pInt_ListCount, lpszClientAddr);
}
-extern "C" bool Session_Authorize_GetClientForUser(LPCXSTR lpszUserName, AUTHSESSION_NETCLIENT * pSt_Client)
+extern "C" bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, AUTHSESSION_NETCLIENT * pSt_Client)
{
- return m_SessionAuth.Session_Authorize_GetClientForUser(lpszUserName, pSt_Client);
+ return m_SessionAuth.Session_Authorize_GetUserForAddr(lpszClientAddr, pSt_Client);
}
-extern "C" bool Session_Authorize_GetAddrForUser(LPCXSTR lpszClientUser, XCHAR * ptszClientAddr)
+extern "C" bool Session_Authorize_CloseAddr(LPCXSTR lpszClientAddr)
{
- return m_SessionAuth.Session_Authorize_GetAddrForUser(lpszClientUser, ptszClientAddr);
-}
-extern "C" bool Session_Authorize_GetUserForAddr(LPCXSTR lpszClientAddr, XCHAR * ptszClientUser)
-{
- return m_SessionAuth.Session_Authorize_GetUserForAddr(lpszClientAddr, ptszClientUser);
-}
-extern "C" bool Session_Authorize_CloseClient(LPCXSTR lpszClientUser)
-{
- return m_SessionAuth.Session_Authorize_CloseClient(lpszClientUser);
+ return m_SessionAuth.Session_Authorize_CloseAddr(lpszClientAddr);
}
extern "C" bool Session_Authorize_Destroy()
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Announcement.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Announcement.cpp
index 9fba91ad910adc20a014bd7571e46fdb6f1c0780..58dfe7b76100c5f556a2a314f26ae94c2f370d2c 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Announcement.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Announcement.cpp
@@ -45,7 +45,7 @@ BOOL CDialog_Announcement::OnInitDialog()
// TODO: 在此添加额外的初始化
m_ListAnnouncement.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 60);
- m_ListAnnouncement.InsertColumn(1, _T("公告内容"), LVCFMT_LEFT, 400);
+ m_ListAnnouncement.InsertColumn(1, _T("公告内容"), LVCFMT_LEFT, 500);
m_ListAnnouncement.InsertColumn(2, _T("创建时间"), LVCFMT_LEFT, 150);
m_ListAnnouncement.SetExtendedStyle(LVS_EX_FULLROWSELECT);
return TRUE; // return true unless you set the focus to a control
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp
index f06765c9111236ac31f76435dd477e2e4a7bc0a5..04655c5ae04dc08f98dc1393bd025c0f548df0b5 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp
@@ -42,6 +42,8 @@ void CDialog_Switch::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_RADIO14, m_RadioNoticeClose);
DDX_Control(pDX, IDC_RADIO15, m_RadioDCodeOPen);
DDX_Control(pDX, IDC_RADIO16, m_RadioDCodeClose);
+ DDX_Control(pDX, IDC_RADIO17, m_RadioMultiOPen);
+ DDX_Control(pDX, IDC_RADIO18, m_RadioMultiClose);
}
@@ -208,6 +210,16 @@ void CDialog_Switch::OnBnClickedButton1()
m_RadioDCodeOPen.SetCheck(BST_UNCHECKED);
m_RadioDCodeClose.SetCheck(BST_CHECKED);
}
+ if (st_JsonRoot["bSwitchDCode"].asBool())
+ {
+ m_RadioMultiOPen.SetCheck(BST_CHECKED);
+ m_RadioMultiClose.SetCheck(BST_UNCHECKED);
+ }
+ else
+ {
+ m_RadioMultiOPen.SetCheck(BST_UNCHECKED);
+ m_RadioMultiClose.SetCheck(BST_CHECKED);
+ }
m_BtnSetConfigure.EnableWindow(true);
}
else
@@ -307,6 +319,15 @@ void CDialog_Switch::OnBnClickedButton2()
st_JsonObject["bSwitchDCode"] = false;
}
+ if (BST_CHECKED == m_RadioMultiOPen.GetCheck())
+ {
+ st_JsonObject["bSwitchMulti"] = true;
+ }
+ else
+ {
+ st_JsonObject["bSwitchMulti"] = false;
+ }
+
st_JsonRoot["st_SwitchInfo"] = st_JsonObject;
st_JsonRoot["xhToken"] = _ttxoll(m_StrToken.GetBuffer());
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h
index d81527a7a33f9af58bf6ac4b111f1e4a1a4e62f4..df4333799b5053465cbf73b2868e9bf324cb4935 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h
@@ -43,4 +43,6 @@ public:
CButton m_RadioNoticeClose;
CButton m_RadioDCodeOPen;
CButton m_RadioDCodeClose;
+ CButton m_RadioMultiOPen;
+ CButton m_RadioMultiClose;
};
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp
index e2f744a99686e1d63113f6e143cf78db6eab48bf..4ca25d667859f7d5cb7c53b6c056763331af59db 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_User.cpp
@@ -55,12 +55,13 @@ BOOL CDialog_User::OnInitDialog()
// TODO: 在此添加额外的初始化
m_ListCtrlClient.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 40);
m_ListCtrlClient.InsertColumn(1, _T("用户名"), LVCFMT_LEFT, 85);
- m_ListCtrlClient.InsertColumn(2, _T("级别"), LVCFMT_LEFT, 70);
- m_ListCtrlClient.InsertColumn(3, _T("在线时间(分钟)"), LVCFMT_LEFT, 100);
- m_ListCtrlClient.InsertColumn(4, _T("剩余时间/过期时间"), LVCFMT_LEFT, 120);
- m_ListCtrlClient.InsertColumn(5, _T("充值类型"), LVCFMT_LEFT, 80);
- m_ListCtrlClient.InsertColumn(6, _T("设备类型"), LVCFMT_LEFT, 60);
- m_ListCtrlClient.InsertColumn(7, _T("是否在线"), LVCFMT_LEFT, 60);
+ m_ListCtrlClient.InsertColumn(2, _T("IP地址"), LVCFMT_LEFT, 100);
+ m_ListCtrlClient.InsertColumn(3, _T("级别"), LVCFMT_LEFT, 70);
+ m_ListCtrlClient.InsertColumn(4, _T("在线时间(分钟)"), LVCFMT_LEFT, 100);
+ m_ListCtrlClient.InsertColumn(5, _T("剩余时间/过期时间"), LVCFMT_LEFT, 120);
+ m_ListCtrlClient.InsertColumn(6, _T("充值类型"), LVCFMT_LEFT, 80);
+ m_ListCtrlClient.InsertColumn(7, _T("设备类型"), LVCFMT_LEFT, 60);
+ m_ListCtrlClient.InsertColumn(8, _T("是否在线"), LVCFMT_LEFT, 60);
m_ListCtrlClient.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_EditFlushTime.SetWindowText("1");
@@ -164,7 +165,11 @@ void CDialog_User::OnBnClickedButton1()
m_ListCtrlClient.InsertItem(i, _T(""));
m_ListCtrlClient.SetItemText(i, 0, tszIndex);
m_ListCtrlClient.SetItemText(i, 1, st_JsonObject["tszUserName"].asCString());
- m_ListCtrlClient.SetItemText(i, 2, lpszXLevelType[st_JsonObject["nUserLevel"].asInt() + 1]);
+ if (!st_JsonArray["tszClientAddr"].isNull())
+ {
+ m_ListCtrlClient.SetItemText(i, 2, st_JsonArray["tszClientAddr"].asCString());
+ }
+ m_ListCtrlClient.SetItemText(i, 3, lpszXLevelType[st_JsonObject["nUserLevel"].asInt() + 1]);
if (1 == st_JsonObject["nUserState"].asInt())
{
@@ -173,12 +178,12 @@ void CDialog_User::OnBnClickedButton1()
__int64x nTime = st_JsonArray["nOnlineTime"].asUInt64();
_xstprintf(tszTimeStr, _T("%lld"), nTime);
- m_ListCtrlClient.SetItemText(i, 3, tszTimeStr);
+ m_ListCtrlClient.SetItemText(i, 4, tszTimeStr);
}
- m_ListCtrlClient.SetItemText(i, 4, st_JsonArray["tszLeftTime"].asCString());
- m_ListCtrlClient.SetItemText(i, 5, lpszXSerialType[st_JsonArray["enSerialType"].asInt()]);
- m_ListCtrlClient.SetItemText(i, 6, lpszXDevType[st_JsonArray["enDeviceType"].asInt()]);
- m_ListCtrlClient.SetItemText(i, 7, lpszStuType[st_JsonObject["nUserState"].asInt()]);
+ m_ListCtrlClient.SetItemText(i, 5, st_JsonArray["tszLeftTime"].asCString());
+ m_ListCtrlClient.SetItemText(i, 6, lpszXSerialType[st_JsonArray["enSerialType"].asInt()]);
+ m_ListCtrlClient.SetItemText(i, 7, lpszXDevType[st_JsonArray["enDeviceType"].asInt()]);
+ m_ListCtrlClient.SetItemText(i, 8, lpszStuType[st_JsonObject["nUserState"].asInt()]);
}
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
UpdateWindow();
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps
index 5eb5843a382cb5d6953e27f9ce499423445242c9..03f77c4ffe52c654c9d440479211292930e578b8 100644
Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps differ
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc
index 5056e29de3c73b1835446342043baeb69782b118..ec8204fd49a7763388f2f06d0a52a12d7964836f 100644
Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc differ
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h
index 1f5daa391654109d41b23e9678282178bcee8c40..186a4ea43cb69d11b6e3ada949841f8ed1ab675d 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h
@@ -56,6 +56,8 @@
#define IDC_RADIO14 1028
#define IDC_RADIO15 1029
#define IDC_RADIO16 1030
+#define IDC_RADIO17 1031
+#define IDC_RADIO18 1032
// Next default values for new objects
//
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp
index 07c3627902ffc8d1ea4a7bff64b633efef977fb4..fd6542ad6417ff348909be7d5d78d5b63bf975e8 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp
@@ -68,119 +68,36 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int
return false;
}
}
- //是否使用了第三方验证
- if (st_AuthConfig.st_XLogin.bPassAuth)
+ if (!Database_SQLite_UserQuery(tszUserName, &st_UserTable))
{
- //启用三方验证
- int nHTTPCode = 0;
- int nHTTPLen = 0;
- XCHAR* ptszMsgBuffer = NULL;
- XENGINE_PROTOCOL_USERAUTH st_AuthProtocol;
- memset(&st_AuthProtocol, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH));
-
- _tcsxcpy(st_AuthProtocol.tszUserName, tszUserName);
- _tcsxcpy(st_AuthProtocol.tszUserPass, tszUserPass);
- st_AuthProtocol.enDeviceType = (ENUM_PROTOCOLDEVICE_TYPE)_ttxoi(tszDeviceType);
-
- Protocol_Packet_HttpUserPass(tszSDBuffer, &nSDLen, &st_AuthProtocol);
- APIClient_Http_Request(_X("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogin, tszSDBuffer, &nHTTPCode, &ptszMsgBuffer, &nHTTPLen);
- if (200 != nHTTPCode)
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,登录失败,三方验证失败,错误码:%d"), lpszClientAddr, st_AuthProtocol.tszUserName, nHTTPCode);
- return false;
- }
- Protocol_Parse_HttpParseTable(ptszMsgBuffer, nHTTPLen, &st_UserTable);
- BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
+ Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found");
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,用户名不存在"), lpszClientAddr);
+ return false;
}
- else
+ if ((_tcsxlen(tszUserPass) != _tcsxlen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsxncmp(tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcsxlen(tszUserPass))))
{
- if (!Database_SQLite_UserQuery(tszUserName, &st_UserTable))
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,用户名不存在"), lpszClientAddr);
- return false;
- }
- if ((_tcsxlen(tszUserPass) != _tcsxlen(st_UserTable.st_UserInfo.tszUserPass)) || (0 != _tcsxncmp(tszUserPass, st_UserTable.st_UserInfo.tszUserPass, _tcsxlen(tszUserPass))))
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "password is incorrent");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,密码错误"), lpszClientAddr);
- return false;
- }
+ Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "password is incorrent");
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,密码错误"), lpszClientAddr);
+ return false;
}
//用户是否存在会话,存在就返回,并且更新TOKEN
if (Session_Token_GetUser(tszUserName, tszUserPass, &xhToken))
{
- if (st_AuthConfig.st_XLogin.bMultiLogin)
- {
- Protocol_Packet_HttpToken(tszSDBuffer, &nSDLen, xhToken, st_AuthConfig.st_XVerification.nTokenTimeout);
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求登录发现会话已经存在,直接返回TOKEN:%lld 成功"), lpszClientAddr, xhToken);
- return true;
- }
- else
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "user was login");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求登录发现会话已经存在,服务器不允许重读登录"), lpszClientAddr);
- return false;
- }
+ Protocol_Packet_HttpToken(tszSDBuffer, &nSDLen, xhToken, st_AuthConfig.st_XVerification.nTokenTimeout);
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求登录发现会话已经存在,直接返回TOKEN:%lld 成功"), lpszClientAddr, xhToken);
+ return true;
}
- //是否被封禁
- if (-1 == st_UserTable.st_UserInfo.nUserLevel)
+ //权限是否正确
+ if (0 != st_UserTable.st_UserInfo.nUserLevel)
{
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User was banned");
+ Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User Permission Verification is failed");
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,登录失败,客户端已被封禁"), lpszClientAddr, tszUserName);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,登录失败,客户端权限不足够"), lpszClientAddr, tszUserName);
return false;
}
- //处理权限
- if (st_UserTable.st_UserInfo.nUserLevel > 0)
- {
- if (!st_FunSwitch.bSwitchLogin)
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 503, "Function does not to enable");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,因为登录功能被服务器关闭!"), lpszClientAddr);
- return false;
- }
- //普通用户
- if (!st_AuthConfig.st_XLogin.bHTTPAuth)
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User permission error");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,登录失败,客户端权限不足"), lpszClientAddr);
- return false;
- }
- //是否已经登录
- XCHAR tszClientAddr[128];
- if (Session_Authorize_GetAddrForUser(tszUserName, tszClientAddr))
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User was login");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,登录失败,用户名已经登录"), lpszClientAddr, tszUserName);
- return false;
- }
- //分析充值类型
- if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) || ('0' == st_UserTable.tszLeftTime[0]))
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "User not time");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,登录失败,客户端类型错误"), lpszClientAddr, tszUserName);
- return false;
- }
- st_UserTable.enDeviceType = (ENUM_PROTOCOLDEVICE_TYPE)_ttxoi(tszDeviceType);
- if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable, XENGINE_AUTH_APP_NETTYPE_HTTP))
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "server is error");
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,登录失败,插入会话管理失败,错误:%lX"), lpszClientAddr, tszUserName);
- return false;
- }
- }
if (0 == xhToken)
{
BaseLib_OperatorHandle_Create(&xhToken);
@@ -213,52 +130,14 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int
{
//http://app.xyry.org:5302/api?function=close&token=1000112345
XCHAR tszUserToken[128];
- AUTHREG_USERTABLE st_UserTable;
-
memset(tszUserToken, '\0', sizeof(tszUserToken));
- memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE));
BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszURLKey, tszUserToken);
- //主动关闭,更新用户时间
- Session_Token_Get(_ttxoll(tszUserToken), &st_UserTable);
- if (st_UserTable.st_UserInfo.nUserLevel > 1)
- {
- //如果权限是普通用户
- AUTHREG_PROTOCOL_TIME st_AuthTime;
- AUTHSESSION_NETCLIENT st_NETClient;
- memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT));
- //需要设置时间并且关闭会话
- if (Session_Authorize_GetClientForUser(st_UserTable.st_UserInfo.tszUserName, &st_NETClient))
- {
- st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
- st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
- st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
- _tcsxcpy(st_AuthTime.tszUserName, st_UserTable.st_UserInfo.tszUserName);
- _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
- _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
- //是否需要通知
- if (st_AuthConfig.st_XLogin.bHTTPAuth)
- {
- int nSDLen = 0;
- XCHAR tszSDBuffer[MAX_PATH];
- memset(tszSDBuffer, '\0', MAX_PATH);
-
- Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime);
- APIClient_Http_Request(_X("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer);
- }
- Database_SQLite_UserLeave(&st_AuthTime);
- }
- Session_Authorize_CloseClient(st_UserTable.st_UserInfo.tszUserName);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%s,用户名:%s,主动关闭,在线时长:%d"), tszUserToken, st_UserTable.st_UserInfo.tszUserName, st_AuthTime.nTimeONLine);
- }
- else
- {
- Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen);
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken);
- }
+ //主动关闭
Session_Token_Delete(_ttxoll(tszUserToken));
+ Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen);
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken);
}
return true;
}
\ No newline at end of file
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp
index a66933bebc4ac61b80992e8159ad14d396d382ea..e75ba9697f8604972d5a4d8d27051809ca130cba 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp
@@ -76,24 +76,27 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L
}
else if (0 == _tcsxnicmp(lpszAPIClose, lpszAPIName, _tcsxlen(lpszAPIClose)))
{
- XCHAR tszClientAddr[128];
+ int nListCount = 0;
+ AUTHSESSION_NETCLIENT** ppSt_ListClient;
XENGINE_PROTOCOL_USERINFO st_UserInfo;
-
- memset(tszClientAddr, '\0', sizeof(tszClientAddr));
memset(&st_UserInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO));
Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserInfo);
- if (!Session_Authorize_GetAddrForUser(st_UserInfo.tszUserName, tszClientAddr))
+ if (!Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_UserInfo.tszUserName))
{
Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "not found client");
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求剔除用户:%s 没有找到,可能不在线"), lpszClientAddr, st_UserInfo.tszUserName);
return false;
}
- XEngine_CloseClient(tszClientAddr);
+ for (int i = 0; i < nListCount; i++)
+ {
+ XEngine_CloseClient(ppSt_ListClient[i]->tszClientAddr);
+ }
+ BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount);
Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen);
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求剔除用户:%s 成功"), lpszClientAddr, st_UserInfo.tszUserName);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求剔除用户:%s 成功,在线用户数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nListCount);
}
else if (0 == _tcsxnicmp(lpszAPIModify, lpszAPIName, _tcsxlen(lpszAPIModify)))
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp
index d31a4c5a1b900a0e08fba22cd7899bbec55722cc..ee97821811ee436b1d80f096ae4f12f9a3600598 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Switch.cpp
@@ -13,14 +13,14 @@ bool XEngine_AuthorizeHTTP_Switch(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L
{
Protocol_Packet_HttpSwitch(tszSDBuffer, &nSDLen, &st_FunSwitch);
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求获取功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求获取功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,多端登录:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchMulti);
}
else if (0 == _tcsxnicmp(lpszAPISet, lpszAPIName, _tcsxlen(lpszAPISet)))
{
Protocol_Parse_HttpParseSwitch(lpszMsgBuffer, nMsgLen, &st_FunSwitch);
Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen);
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求设置功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求设置功能开关成功,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,多端登录:%d"), lpszClientAddr, st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchMulti);
}
return true;
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp
index 054ceba95be0f47de8207e87e3a15fdeadd6ebd6..fd83bc134ed67e49885064f21a6e30c1e072233b 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp
@@ -15,10 +15,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC
if (0 == _tcsxnicmp(lpszAPIName, lpszAPIDelete, _tcsxlen(lpszAPIName)))
{
- XCHAR tszClientAddr[128];
XENGINE_PROTOCOL_USERINFO st_UserInfo;
-
- memset(tszClientAddr, '\0', sizeof(tszClientAddr));
memset(&st_UserInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO));
if (!st_FunSwitch.bSwitchDelete)
@@ -29,13 +26,20 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC
return false;
}
Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserInfo);
+ //关闭链接
+ int nListCount = 0;
+ AUTHSESSION_NETCLIENT** ppSt_ListClient;
+ Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_UserInfo.tszUserName);
+ for (int i = 0; i < nListCount; i++)
+ {
+ XEngine_CloseClient(ppSt_ListClient[i]->tszClientAddr);
+ }
+ BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount);
- Session_Authorize_GetAddrForUser(st_UserInfo.tszUserName, tszClientAddr);
- XEngine_CloseClient(tszClientAddr);
Database_SQLite_UserDelete(st_UserInfo.tszUserName);
Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen);
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求删除用户:%s 成功"), lpszClientAddr, st_UserInfo.tszUserName);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求删除用户:%s 成功,在线用户数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nListCount);
}
else if (0 == _tcsxnicmp(lpszAPIName, lpszAPIRegister, _tcsxlen(lpszAPIName)))
{
@@ -161,32 +165,24 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC
}
else if (0 == _tcsxnicmp(lpszAPIName, lpszAPITime, _tcsxlen(lpszAPIName)))
{
- AUTHREG_PROTOCOL_TIME st_AuthTime;
- AUTHSESSION_NETCLIENT st_NETClient;
+ int nListCount = 0;
+ AUTHSESSION_NETCLIENT** ppSt_ListClient;
XENGINE_PROTOCOL_USERAUTH st_UserAuth;
- memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT));
memset(&st_UserAuth, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH));
Protocol_Parse_HttpParseAuth(lpszMsgBuffer, nMsgLen, &st_UserAuth);
- if (!Session_Authorize_GetClientForUser(st_UserAuth.tszUserName, &st_NETClient))
+ if (!Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_UserAuth.tszUserName))
{
Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found");
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, st_AuthTime.tszUserName, Session_GetLastError());
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,获取时间失败,无法继续,错误:%X"), lpszClientAddr, st_UserAuth.tszUserName, Session_GetLastError());
return false;
}
- st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
- st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
- st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
- _tcsxcpy(st_AuthTime.tszUserName, st_UserAuth.tszUserName);
- _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
- _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
-
- Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime);
+ Protocol_Packet_UserTime(tszSDBuffer, &nSDLen, &ppSt_ListClient, nListCount);
+ BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount);
XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,用户名:%s,获取时间成功,类型:%d,在线时间:%lld,剩余时间:%lld"), lpszClientAddr, st_AuthTime.tszUserName, st_AuthTime.enSerialType, st_AuthTime.nTimeONLine, st_AuthTime.nTimeLeft);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,用户名:%s,获取时间成功,用户同时在线数:%d"), lpszClientAddr, st_UserAuth.tszUserName, nListCount);
}
else if (0 == _tcsxnicmp(lpszAPIName, lpszAPITry, _tcsxlen(lpszAPIName)))
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp
index 97b37954b38b01fa5a0476bcb955d046c12a6cc7..ae60841b9b9a92849085c6c72863804bc12bba2b 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp
@@ -12,7 +12,7 @@ XHTHREAD CALLBACK XEngine_AuthService_HttpThread(XPVOID lParam)
continue;
}
int nListCount = 0;
- RFCCOMPONENTS_HTTP_PKTCLIENT** ppSt_ListClient;
+ XENGINE_MANAGEPOOL_TASKEVENT** ppSt_ListClient;
HttpProtocol_Server_GetPoolEx(xhHttpPacket, nThreadPos, &ppSt_ListClient, &nListCount);
for (int i = 0; i < nListCount; i++)
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp
index c0e85e9de3e0b429768c896aca89065c35bf435a..1cce1c4a8cb2c4a2faf3ec9b373c5e23bf4a0f80 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp
@@ -80,26 +80,21 @@ bool XEngine_CloseClient(LPCXSTR lpszClientAddr)
NetCore_TCPXCore_CloseForClientEx(xhWSSocket, lpszClientAddr);
NetCore_TCPXCore_CloseForClientEx(xhHttpSocket, lpszClientAddr);
- XCHAR tszClientUser[64];
- AUTHREG_PROTOCOL_TIME st_AuthTime;
AUTHSESSION_NETCLIENT st_NETClient;
-
- memset(tszClientUser, '\0', sizeof(tszClientUser));
- memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT));
- if (Session_Authorize_GetUserForAddr(lpszClientAddr, tszClientUser))
+ if (Session_Authorize_GetUserForAddr(lpszClientAddr, &st_NETClient))
{
- if (Session_Authorize_GetClientForUser(tszClientUser, &st_NETClient))
- {
- st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
- st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
- st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
- _tcsxcpy(st_AuthTime.tszUserName, tszClientUser);
- _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
- _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
- }
- //只有登录的用户才通知
+ AUTHREG_PROTOCOL_TIME st_AuthTime;
+ memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
+
+ st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
+ st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
+ st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
+ _tcsxcpy(st_AuthTime.tszUserName, st_NETClient.st_UserTable.st_UserInfo.tszUserName);
+ _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
+ _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
+
if (st_AuthConfig.st_XLogin.bPassAuth)
{
int nSDLen = 0;
@@ -109,12 +104,8 @@ bool XEngine_CloseClient(LPCXSTR lpszClientAddr)
Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime);
APIClient_Http_Request(_X("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer);
}
- else
- {
- Database_SQLite_UserLeave(&st_AuthTime);
- }
- Session_Authorize_CloseClient(tszClientUser);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("客户端:%s,用户名:%s,离开服务器,在线时长:%d"), lpszClientAddr, tszClientUser, st_AuthTime.nTimeONLine);
+ Session_Authorize_CloseAddr(lpszClientAddr);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("客户端:%s,用户名:%s,离开服务器,在线时长:%d"), lpszClientAddr, st_NETClient.st_UserTable.st_UserInfo.tszUserName, st_AuthTime.nTimeONLine);
}
else
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp
index 2307d812caea4cd1b174c8d2f1fddba4a1b8e2e3..1f6c3eb521ef1d10533288e8e20fb9fb3f8de908 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp
@@ -19,7 +19,7 @@ XHTHREAD CALLBACK XEngine_AuthService_TCPThread(XPVOID lParam)
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
int nListCount = 0;
- HELPCOMPONENT_PACKET_CLIENT** ppSt_ListClient;
+ XENGINE_MANAGEPOOL_TASKEVENT** ppSt_ListClient;
HelpComponents_Datas_GetPoolEx(xhTCPPacket, nThreadPos, &ppSt_ListClient, &nListCount);
for (int i = 0; i < nListCount; i++)
{
@@ -150,14 +150,61 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
}
}
//是否已经登录
- XCHAR tszClientAddr[128];
- if (Session_Authorize_GetAddrForUser(st_AuthProtocol.tszUserName, tszClientAddr))
+ if (st_FunSwitch.bSwitchMulti)
{
- pSt_ProtocolHdr->wReserve = 253;
- Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType);
- XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,登录失败,用户名已经登录"), lpszClientAddr, st_AuthProtocol.tszUserName);
- return false;
+ bool bLogin = false;
+ int nListCount = 0;
+ AUTHSESSION_NETCLIENT** ppSt_ListClient;
+
+ Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_AuthProtocol.tszUserName);
+ for (int i = 0; i < nListCount; i++)
+ {
+ //找到客户端,支持的模式
+ if (0 == st_AuthConfig.st_XLogin.nMultiMode)
+ {
+ int nSourceType = 0;
+ int nDestType = 0;
+ AuthHelp_MultiLogin_GetRange(ppSt_ListClient[i]->st_UserTable.enDeviceType, &nSourceType);
+ AuthHelp_MultiLogin_GetRange(st_AuthProtocol.enDeviceType, &nDestType);
+
+ if (nSourceType == nDestType)
+ {
+ bLogin = true;
+ break;
+ }
+ }
+ else
+ {
+ if (ppSt_ListClient[i]->st_UserTable.enDeviceType == st_AuthProtocol.enDeviceType)
+ {
+ bLogin = true;
+ break;
+ }
+ }
+ }
+ BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount);
+ if (bLogin)
+ {
+ pSt_ProtocolHdr->wReserve = 253;
+ Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType);
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,多端登录失败,用户已经登录,类型:%d"), lpszClientAddr, st_AuthProtocol.tszUserName, st_AuthProtocol.enDeviceType);
+ return false;
+ }
+ }
+ else
+ {
+ int nListCount = 0;
+ AUTHSESSION_NETCLIENT** ppSt_ListClient;
+ if (Session_Authorize_GetClient(&ppSt_ListClient, &nListCount, st_AuthProtocol.tszUserName))
+ {
+ pSt_ProtocolHdr->wReserve = 253;
+ BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount);
+ Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType);
+ XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,登录失败,用户名已经登录"), lpszClientAddr, st_AuthProtocol.tszUserName);
+ return false;
+ }
}
//是否被封禁
if (-1 == st_UserTable.st_UserInfo.nUserLevel)
@@ -177,6 +224,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,用户名:%s,登录失败,客户端类型错误"), lpszClientAddr, st_AuthProtocol.tszUserName);
return false;
}
+ //如果是次数卡,需要优先处理
+ if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == st_UserTable.enSerialType)
+ {
+ __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1;
+ _xtprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime);
+
+ Database_SQLite_UserSet(&st_UserTable);
+ }
st_UserTable.enDeviceType = st_AuthProtocol.enDeviceType;
if (!Session_Authorize_Insert(lpszClientAddr, &st_UserTable, nNetType))
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp
index b5a059b4d1fed0e17809374419800a77bd799482..3acb0a2eabaf4f714dfb83a76dbcaea4f65c29c2 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp
@@ -33,18 +33,29 @@ void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserNam
Protocol_Packet_HttpUserTime(tszMsgBuffer, &nMsgLen, &st_AuthTime);
APIClient_Http_Request(_X("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassTimeout, tszMsgBuffer);
}
- if (XENGINE_AUTH_APP_NETTYPE_HTTP != nNetType)
- {
- //HTTP不能通知
- Protocol_Packet_HDRComm(tszMsgBuffer, &nMsgLen, &st_ProtocolHdr, nNetType);
- XEngine_Client_TaskSend(lpszUserAddr, tszMsgBuffer, nMsgLen, nNetType);
- }
+ //HTTP不能通知
+ Protocol_Packet_HDRComm(tszMsgBuffer, &nMsgLen, &st_ProtocolHdr, nNetType);
+ XEngine_Client_TaskSend(lpszUserAddr, tszMsgBuffer, nMsgLen, nNetType);
if (!st_AuthConfig.bTimeNotify)
{
XEngine_CloseClient(lpszUserAddr);
}
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("地址:%s,用户:%s,网络类型:%d,没有剩余时间,已经通知客户单超时,三方通知设置:%d"), lpszUserName, lpszUserAddr, nNetType, st_AuthConfig.st_XLogin.bPassAuth);
}
+ else
+ {
+ AUTHREG_PROTOCOL_TIME st_AuthTime;
+ memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
+
+ st_AuthTime.nTimeLeft = nLeftTimer;
+ st_AuthTime.nTimeONLine = nOnlineTimer;
+ st_AuthTime.enSerialType = enSerialType;
+ _tcsxcpy(st_AuthTime.tszLeftTime, lpszLeftDate);
+ _tcsxcpy(st_AuthTime.tszUserName, lpszUserName);
+ _tcsxcpy(st_AuthTime.tszUserAddr, lpszUserAddr);
+
+ Database_SQLite_UserLeave(&st_AuthTime);
+ }
}
void CALLBACK XEngine_TaskEvent_Token(XNETHANDLE xhToken, XPVOID lParam)
{
@@ -52,40 +63,6 @@ void CALLBACK XEngine_TaskEvent_Token(XNETHANDLE xhToken, XPVOID lParam)
memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE));
Session_Token_Get(xhToken, &st_UserTable);
- if (st_UserTable.st_UserInfo.nUserLevel > 1)
- {
- //如果权限是普通用户
- AUTHREG_PROTOCOL_TIME st_AuthTime;
- AUTHSESSION_NETCLIENT st_NETClient;
- memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT));
- //需要设置时间并且关闭会话
- if (Session_Authorize_GetClientForUser(st_UserTable.st_UserInfo.tszUserName, &st_NETClient))
- {
- st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
- st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
- st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
- _tcsxcpy(st_AuthTime.tszUserName, st_UserTable.st_UserInfo.tszUserName);
- _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
- _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
-
- if (st_AuthConfig.st_XLogin.bHTTPAuth)
- {
- int nSDLen = 0;
- XCHAR tszSDBuffer[MAX_PATH];
- memset(tszSDBuffer, '\0', MAX_PATH);
-
- Protocol_Packet_HttpUserTime(tszSDBuffer, &nSDLen, &st_AuthTime);
- APIClient_Http_Request(_X("POST"), st_AuthConfig.st_XLogin.st_PassUrl.tszPassLogout, tszSDBuffer);
- }
- Database_SQLite_UserLeave(&st_AuthTime);
- }
- Session_Authorize_CloseClient(st_UserTable.st_UserInfo.tszUserName);
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%lld,用户名:%s,离开服务器,在线时长:%d"), xhToken, st_UserTable.st_UserInfo.tszUserName, st_AuthTime.nTimeONLine);
- }
- else
- {
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%lld,已经超时,被移除服务器"), xhToken);
- }
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Token:%lld,用户名:%s,已经超时,被移除服务器"), xhToken, st_UserTable.st_UserInfo.tszUserName);
Session_Token_Delete(xhToken);
}
\ No newline at end of file
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_WSTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_WSTask.cpp
index a2f75163753a84c9380bd9d56c43258abb8e61cb..6cd725d539d99bc725ba288c7ad5e3a52a20fad6 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_WSTask.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_WSTask.cpp
@@ -16,7 +16,7 @@ XHTHREAD CALLBACK XEngine_AuthService_WSThread(XPVOID lParam)
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
int nListCount = 0;
- RFCCOMPONENTS_WSPKT_CLIENT** ppSt_ListClient;
+ XENGINE_MANAGEPOOL_TASKEVENT** ppSt_ListClient;
RfcComponents_WSPacket_GetPoolEx(xhWSPacket, nThreadPos, &ppSt_ListClient, &nListCount);
for (int i = 0; i < nListCount; i++)
{
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp
index ded9493f5e8f25770735a200593690941f67bc1d..89b474f973f42bc190cc48c8a9b2b22e1422cc4d 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp
@@ -22,30 +22,6 @@ void ServiceApp_Stop(int signo)
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("网络验证服务器退出..."));
bIsRun = false;
- int nListCount = 0;
- AUTHSESSION_NETCLIENT** ppSt_ListClient;
- Session_Authorize_GetClient(&ppSt_ListClient, &nListCount);
- for (int i = 0; i < nListCount; i++)
- {
- AUTHREG_PROTOCOL_TIME st_AuthTime;
- AUTHSESSION_NETCLIENT st_NETClient;
-
- memset(&st_AuthTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME));
- memset(&st_NETClient, '\0', sizeof(AUTHSESSION_NETCLIENT));
-
- if (Session_Authorize_GetClientForUser(ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName, &st_NETClient))
- {
- st_AuthTime.nTimeLeft = st_NETClient.nLeftTime;
- st_AuthTime.nTimeONLine = st_NETClient.nOnlineTime;
- st_AuthTime.enSerialType = st_NETClient.st_UserTable.enSerialType;
- _tcsxcpy(st_AuthTime.tszUserName, ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName);
- _tcsxcpy(st_AuthTime.tszLeftTime, st_NETClient.tszLeftTime);
- _tcsxcpy(st_AuthTime.tszUserAddr, st_NETClient.tszClientAddr);
-
- Database_SQLite_UserLeave(&st_AuthTime);
- }
- Session_Authorize_CloseClient(ppSt_ListClient[i]->st_UserTable.st_UserInfo.tszUserName);
- }
HelpComponents_Datas_Destory(xhTCPPacket);
RfcComponents_WSPacket_DestoryEx(xhWSPacket);
HttpProtocol_Server_DestroyEx(xhHttpPacket);
@@ -275,7 +251,7 @@ int main(int argc, char** argv)
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化HTTP任务线程池成功,线程个数:%d"), st_AuthConfig.st_XMax.nHTTPThread);
}
- XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,密码验证:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_AuthConfig.st_XCrypto.bEnable);
+ XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,密码验证:%d,多端登录:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_AuthConfig.st_XCrypto.bEnable, st_FunSwitch.bSwitchMulti);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str());
while (true)