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)