...
 
Commits (18)
    https://gitcode.net/xengine/XEngine_Authorize/-/commit/33e9f3c03785d4d40d8872f6544cd43d57154905 delete:http login for normal user 2023-06-26T18:44:48+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/a47c6c70c28817af5549d4cada0e1a3da3fd4061 modify:the management interface does not limit single login now 2023-06-26T19:26:45+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/8bda69ad8f05e10d0c0818add64dc293fb491b45 update:docment 2023-07-26T20:42:22+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/c795f04ac7e616fdfd5f0b10c74b09026ad1577d update:match xengine v8.15 2023-08-09T14:20:54+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/04074a34ff3e884a1223348f07710baebde3a93d modify:does not allow http hook for admin user 2023-08-09T14:31:54+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/d2bf96a5b74e6bb16e961ed16e6810ee7019e1e6 added:mulit device login supported 2023-08-09T16:27:55+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/9b9343240d1ecbed1f9c3c2fc0b525e9f3be589a modify:login to modify number of time for time serial type 2023-08-09T16:40:16+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/cd83901450d13f7222dc40d81bb1553274dfad6e modify:Modify user data storage method 2023-08-09T17:00:43+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/3d951ac69b771b2b66566fa256fa2134604aa48d added:mulit login and merge time supported 2023-08-10T14:53:23+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/4d584bc671450abdcfcddd40e0030a81b54dc9c0 fixed:configure read is incorrent 2023-08-10T15:22:24+08:00 qyt 486179@qq.com fixed:mulit login merge time is incorrent https://gitcode.net/xengine/XEngine_Authorize/-/commit/3ea9b4269bf9d8e8bb8a1ebf7033a8d62a50a739 fixed:get all online client is incorrent 2023-08-10T15:55:16+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/0b1cd061495f8dc5ef3c65c5a48bc5385607cb89 added:client addr for user list 2023-08-10T16:19:17+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/5c7226bd7fbb5593c7ab14d6ba2000c1f37e6736 modify:function switch supported multi login 2023-08-10T16:45:03+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/0f6730bf47e1e041323b145bf3b537a856d21004 fixed:linux build 2023-08-11T09:51:25+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/31c53cacb1025293467a75a1dc83a62cefa96846 update:configure file 2023-08-11T09:51:40+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/58d28be1fbe8644227709b59b3881db9d961ec6b update:app exmaple 2023-08-11T09:51:59+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/8d4a6d69d92d9bea372005ec03fd7d1e1475d40c update:readme and docment 2023-08-11T09:53:29+08:00 qyt 486179@qq.com https://gitcode.net/xengine/XEngine_Authorize/-/commit/0426cb32aa1a61af17e8d146d443af7828d51c90 !23 V3.8.0.1001 Merge 2023-08-11T02:05:21+00:00 qyt 486179@qq.com Merge pull request !23 from qyt/develop
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
添加:登录支持动态验证码功能
......
......@@ -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
......
......@@ -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 自动续期
密码加密
......
......@@ -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();
......
......@@ -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",
......
......@@ -7,5 +7,6 @@
"bSwitchTime":true,
"bSwitchCDKey":true,
"bSwitchNotice":true,
"bSwitchDCode":false
"bSwitchDCode":false,
"bSwitchMulti":false
}
\ No newline at end of file
......@@ -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;
//////////////////////////////////////////////////////////////////////////
// 导出的函数
......
......@@ -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
......@@ -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
{
......
......@@ -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); //用户离开更新表
......
......@@ -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
......
......@@ -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
#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
#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
......@@ -8,6 +8,8 @@ EXPORTS
AuthHelp_DynamicCode_Create
AuthHelp_DynamicCode_Get
AuthHelp_MultiLogin_GetRange
AuthHelp_ClipBoard_Set
AuthHelp_ClipBoard_Get
AuthHelp_ClipBoard_Clear
......
......@@ -163,6 +163,7 @@
<ClInclude Include="AuthHelp_Define.h" />
<ClInclude Include="AuthHelp_DynamicCode\AuthHelp_DynamicCode.h" />
<ClInclude Include="AuthHelp_Error.h" />
<ClInclude Include="AuthHelp_MultiLogin\AuthHelp_MultiLogin.h" />
<ClInclude Include="AuthHelp_Windows\AuthHelp_Windows.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="pch.h" />
......@@ -170,6 +171,7 @@
<ItemGroup>
<ClCompile Include="AuthHelp_ClipBoard\AuthHelp_ClipBoard.cpp" />
<ClCompile Include="AuthHelp_DynamicCode\AuthHelp_DynamicCode.cpp" />
<ClCompile Include="AuthHelp_MultiLogin\AuthHelp_MultiLogin.cpp" />
<ClCompile Include="AuthHelp_Windows\AuthHelp_Windows.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="pch.cpp">
......
......@@ -31,6 +31,12 @@
<Filter Include="源文件\AuthHelp_DynamicCode">
<UniqueIdentifier>{4df65f23-98dc-4355-8843-fbe5041766c9}</UniqueIdentifier>
</Filter>
<Filter Include="头文件\AuthHelp_MultiLogin">
<UniqueIdentifier>{61a1ebc3-5193-4c3e-a5b6-fe076b84c758}</UniqueIdentifier>
</Filter>
<Filter Include="源文件\AuthHelp_MultiLogin">
<UniqueIdentifier>{92e4cc9f-02d7-4e6d-92a1-86e433e38fd2}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="framework.h">
......@@ -54,6 +60,9 @@
<ClInclude Include="AuthHelp_DynamicCode\AuthHelp_DynamicCode.h">
<Filter>头文件\AuthHelp_DynamicCode</Filter>
</ClInclude>
<ClInclude Include="AuthHelp_MultiLogin\AuthHelp_MultiLogin.h">
<Filter>头文件\AuthHelp_MultiLogin</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
......@@ -71,6 +80,9 @@
<ClCompile Include="AuthHelp_DynamicCode\AuthHelp_DynamicCode.cpp">
<Filter>源文件\AuthHelp_DynamicCode</Filter>
</ClCompile>
<ClCompile Include="AuthHelp_MultiLogin\AuthHelp_MultiLogin.cpp">
<Filter>源文件\AuthHelp_MultiLogin</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="AuthorizeModule_Help.def">
......
......@@ -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
......
#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
......
......@@ -21,6 +21,7 @@
#include <unordered_map>
using namespace std;
#include <XEngine_Include/XEngine_CommHdr.h>
#include <XEngine_Include/XEngine_ProtocolHdr.h>
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Define.h>
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Error.h>
#include "AuthHelp_Define.h"
......
......@@ -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
......
......@@ -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客户端包装函数
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
}
......
......@@ -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);
}
......
......@@ -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
......
......@@ -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<std::thread> pSTDThread_hActive; //时间计算器线程句柄
bool bIsRun; //运行标志
shared_ptr<std::thread> 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<xstring, AUTHSESSION_NETCLIENT> stl_MapNetClient;
unordered_map<xstring, list<AUTHSESSION_NETCLIENT> > stl_MapNetClient;
};
......@@ -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
函数功能:销毁网络服务
......
......@@ -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()
{
......
......@@ -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
......
......@@ -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());
......
......@@ -43,4 +43,6 @@ public:
CButton m_RadioNoticeClose;
CButton m_RadioDCodeOPen;
CButton m_RadioDCodeClose;
CButton m_RadioMultiOPen;
CButton m_RadioMultiClose;
};
......@@ -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();
......
......@@ -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
//
......
......@@ -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
......@@ -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)))
{
......
......@@ -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;
......
......@@ -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)))
{
......
......@@ -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++)
{
......
......@@ -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
{
......
......@@ -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))
{
......
......@@ -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
......@@ -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++)
{
......
......@@ -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)
......