From c8485259fe5f78636795ddfdc29776bc7336c29a Mon Sep 17 00:00:00 2001 From: Tina0595 <2825103297@qq.com> Date: Fri, 5 Jul 2024 18:16:25 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=9C=E6=96=B0=E5=A2=9Emysql=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=932=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 10 +- README.md | 12 +- .../Authorize_APPClient.cpp | 179 +- XEngine_Docment/Docment_en.docx | Bin 144805 -> 144782 bytes XEngine_Docment/Docment_zh.docx | Bin 147848 -> 147903 bytes XEngine_SQL/xengine_authorize.sql | 197 ++ .../AuthClient_Connector.cpp | 287 +++ .../AuthClient_Connector.h | 40 + XEngine_Source/AuthClient_Define.h | 141 ++ XEngine_Source/AuthClient_Error.h | 29 + .../AuthClient_HTTPVer/AuthClient_HTTPVer.cpp | 160 ++ .../AuthClient_HTTPVer/AuthClient_HTTPVer.h | 24 + XEngine_Source/AuthorizeModule_Client.def | 12 + XEngine_Source/AuthorizeModule_Client.vcxproj | 186 ++ .../AuthorizeModule_Client.vcxproj.filters | 68 + .../AuthorizeModule_Client.vcxproj.user | 4 + .../AuthClient_Define.h | 14 +- .../AuthClient_HTTPVer/AuthClient_HTTPVer.cpp | 99 +- .../AuthClient_HTTPVer/AuthClient_HTTPVer.h | 4 +- .../AuthorizeModule_Configure/Config_Define.h | 10 + .../ModuleConfigure_Json.cpp | 26 +- .../AuthorizeModule_Database.def | 37 +- .../AuthorizeModule_Database.vcxproj | 2 + .../AuthorizeModule_Database.vcxproj.filters | 12 + .../Database_Define.h | 492 +++- .../Database_MySQL/Database_MySQL.cpp | 2008 +++++++++++++++++ .../Database_MySQL/Database_MySQL.h | 63 + .../AuthorizeModule_Database/pch.cpp | 122 +- .../XEngineAuthorizeApp.aps | Bin 125636 -> 106988 bytes .../XEngineAuthorizeApp.rc | Bin 38572 -> 38878 bytes .../AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp | 12 +- .../AuthorizeHTTP_Announcement.cpp | 33 +- .../AuthorizeHTTP_Banned.cpp | 32 +- .../AuthorizeHTTP_Client.cpp | 30 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp | 26 +- .../AuthorizeHTTP_Serial.cpp | 48 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp | 25 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 84 +- .../XEngine_AuthorizeService/Authorize_Hdr.h | 2 + .../Authorize_HttpTask.cpp | 10 +- .../Authorize_Net.cpp | 10 +- .../Authorize_TCPTask.cpp | 38 +- .../Authorize_Task.cpp | 8 +- .../XEngine_AuthorizeService.cpp | 40 +- XEngine_Source/dllmain.cpp | 19 + XEngine_Source/framework.h | 5 + XEngine_Source/pch.cpp | 60 + XEngine_Source/pch.h | 80 + 48 files changed, 4471 insertions(+), 329 deletions(-) create mode 100644 XEngine_SQL/xengine_authorize.sql create mode 100644 XEngine_Source/AuthClient_Connector/AuthClient_Connector.cpp create mode 100644 XEngine_Source/AuthClient_Connector/AuthClient_Connector.h create mode 100644 XEngine_Source/AuthClient_Define.h create mode 100644 XEngine_Source/AuthClient_Error.h create mode 100644 XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp create mode 100644 XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.h create mode 100644 XEngine_Source/AuthorizeModule_Client.def create mode 100644 XEngine_Source/AuthorizeModule_Client.vcxproj create mode 100644 XEngine_Source/AuthorizeModule_Client.vcxproj.filters create mode 100644 XEngine_Source/AuthorizeModule_Client.vcxproj.user create mode 100644 XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.cpp create mode 100644 XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.h create mode 100644 XEngine_Source/dllmain.cpp create mode 100644 XEngine_Source/framework.h create mode 100644 XEngine_Source/pch.cpp create mode 100644 XEngine_Source/pch.h diff --git a/README.en.md b/README.en.md index 3ac2be3..32076aa 100644 --- a/README.en.md +++ b/README.en.md @@ -19,17 +19,12 @@ Stable and reliable: based on C/C++, the core framework has been verified for 10 Flexible authentication: supports third-party authentication and authorization, supports distributed authentication and authorization, and can use its own user password system more functions: support various types of authorization -#### Choose the Right One -Most products on the market either charge fees, update slowly, or lack complete functionality. They also lack technical support. With our product, you don't need to worry about these issues at all. -Our product is completely free and offers both free and paid technical support. It is rich in features and allows for custom development. You can start using our product now and experience the best and open-source time service available. - #### Version difference V3 version, the protocol is basically reimplemented. It is no longer compatible with the V2 protocol. V3 is basically changed to the HTTP interface for management. The compatibility is better. Please check the documentation for more. V2 Version can be update to V3,V3 DB Compatible with V2 Databse ## Software feature -Our feature list not only includes the following but also has many features in development. -You can refer to this webpage to learn about the features we plan to support in the future: https://github.com/libxengine/XEngine_Authorize/issues +A simple and high-performance cross-platform network authentication and authorization server developed and implemented based on XEngine feature list: 1. support http.websocket protocols 2. Support Encrypto communication @@ -132,6 +127,9 @@ Database update Use Navicat and other database software to open the judgment tab After modification, directly copy the database to the new version to overwrite, and modify your configuration file 3.11->3.12 A new time field has been added to the user table, please refer to the SQL file +## Authorization instructions +Use this software must be open source and indicate the source,If you want closed source and commercial,Then need to be authorized by the author. + ## Follow us If you think this software is helpful to you, please give us a START and wechat qr scan to follow us diff --git a/README.md b/README.md index 01258e5..042a95e 100644 --- a/README.md +++ b/README.md @@ -19,17 +19,12 @@ c c++network Authorize service 灵活验证:支持第三方验证授权,支持分布式验证授权,可以使用自己的用户密码系统 功能丰富:支持各种类型授权,支持时间和次数等等模式 -#### 选择对的 -目前市面上的大多数产品不是收费就是产品更新慢,或者功能不全。没有技术支持。使用我们的产品你完全不需要有这方便的担心。 -我们的产品完全免费,提供免费技术支持和收费技术支持。功能丰富多样,还可以自主开发。现在,你就可以使用我们的产品并且体验目前最好的并且开源的授时服务. - #### 版本区别 V3版本后协议基本重新实现,不在兼容V2协议,V3基本改为HTTP接口进行管理.兼容性更好.请查看文档获取更多. V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程序即可.数据库兼容V2版本 -## 软件特性 -我们的功能列表不仅包括下面的,还有很多待开发的功能正在计划中。 -你可以参考这个网页了解我们未来支持的功能列表:https://github.com/libxengine/XEngine_Authorize/issues +## 软件特性 +基于XEngine开发并实现的一套简洁高性能跨平台网络验证授权服务器 软件特性: 1. 支持TCP,WEBSOCKET协议 2. 支持加密通信 @@ -146,6 +141,9 @@ V3版本为全新版本,为了适应过多环境要求开发 ## 视频教程 你也可以观看视频教程来了解我们的代码框架情况:https://www.bilibili.com/video/BV1iF4m177aG +## 授权说明 +使用此软件必须开源并且注明出处,如果想闭源商用,那么需要经过作者授权. + ## 关注我们 如果你觉得这个软件对你有帮助,请你给我们一个START吧 也可以通过微信关注我们 diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index 9017d17..841966b 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -39,7 +39,7 @@ using namespace std; bool bRun = true; bool bLogin = true; bool bTimeOut = true; -bool bEncrypto = true; +bool bEncrypto = false; XNETHANDLE xhToken = 0; int nDYCode = 0; @@ -123,27 +123,10 @@ int AuthClient_Register() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Register:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_Register:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - - printf("AuthClient_Register:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } return 0; } int AuthClient_Pay() @@ -159,26 +142,10 @@ int AuthClient_Pay() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Pay:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_Pay:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Pay:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } return 0; } int AuthClient_DynamicCode() @@ -188,29 +155,15 @@ int AuthClient_DynamicCode() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_DynamicCode:\n%s\n", ptszMsgBuffer); Json::Value st_JsonRoot; JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (bEncrypto) + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { - XCHAR tszDEBuffer[2048] = {}; - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - if (!pSt_JsonReader->parse(tszDEBuffer, tszDEBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - return 0; - } - printf("AuthClient_DynamicCode:\n%s\n", tszDEBuffer); - } - else - { - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - return 0; - } - printf("AuthClient_DynamicCode:\n%s\n", ptszMsgBuffer); + return 0; } XCHAR tszDCodeStr[64]; XCHAR tszTokenStr[64]; @@ -289,31 +242,17 @@ int AuthClient_Notice() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); + Json::Value st_JsonRoot; Json::Value st_JsonObject; JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - - APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); - if (bEncrypto) - { - XCHAR tszDEBuffer[2048] = {}; - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - if (!pSt_JsonReader->parse(tszDEBuffer, tszDEBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - return 0; - } - } - else + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - return 0; - } + return 0; } - for (unsigned int i = 0; i < st_JsonRoot["Array"].size(); i++) { XCHAR tszMsgBuffer[2048]; @@ -347,26 +286,9 @@ int AuthClient_GetPass() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_GetPass:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_GetPass:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_GetPass:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); return 0; } @@ -382,26 +304,9 @@ int AuthClient_GetTime() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_GetTime:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_GetTime:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_GetTime:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); return 0; } @@ -421,26 +326,10 @@ int AuthClient_Delete() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Delete:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_Delete:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Delete:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } return 0; } int AuthClient_Try() @@ -455,26 +344,10 @@ int AuthClient_Try() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Try:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - if (bEncrypto) - { - XCHAR tszENBuffer[2048] = {}; - XCHAR tszDEBuffer[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); - APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); - printf("AuthClient_Try:\n%s\n", tszDEBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } - else - { - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Try:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } return 0; } int main() diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 92fa662855c02eadb5124ef218e3e99ab79939e3..e5e5cb272438a8932715aa2963504848eee61122 100644 GIT binary patch delta 112542 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 z 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 a2=oWAC@jyiGPT4PwY5tXwlZF1UMmHr3QLL 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

sH0^LI&aDPt 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 delta 121078 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

uYO`vwYX;cL5MreS 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 + } + m_bLogin = false; + XClient_TCPSelect_Close(m_hSocket); +#endif + return true; +} +/******************************************************************** +函数名称:AuthClient_Connector_GetAuth +函数功能:验证用户是否登录或者超时 + 参数.一:pbAuth + In/Out:Out + 类型:逻辑型指针 + 可空:Y + 意思:输出是否验证,如果登录成功但是参数为假.说明没有剩余时间了 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthClient_Connector::AuthClient_Connector_GetAuth(bool* pbAuth /* = NULL */) +{ + AuthClient_IsErrorOccur = false; + +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_TCP) + if (NULL != pbAuth) + { + *pbAuth = m_bAuth; + } +#endif + return m_bLogin; +} +/******************************************************************** +函数名称:AuthClient_Connector_Login +函数功能:登录到服务器 + 参数.一:lpszUser + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入用户名 + 参数.二:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入密码 + 参数.三:nDYCode + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入动态码 + 参数.四:xhToken + In/Out:In + 类型:句柄型 + 可空:Y + 意思:输入动态码绑定的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthClient_Connector::AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, int nDYCode /* = 0 */, XNETHANDLE xhToken /* = 0 */) +{ + AuthClient_IsErrorOccur = false; + + if ((NULL == lpszUser) || (NULL == lpszPass)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_CLIENT_PARAMENT; + return false; + } +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_TCP) + XCHAR tszMsgBuffer[2048] = {}; + XENGINE_PROTOCOLHDR st_ProtocolHdr = {}; + XENGINE_PROTOCOL_USERAUTH st_AuthUser = {}; + //协议头 + st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; + st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQLOGIN; + st_ProtocolHdr.unPacketSize = sizeof(XENGINE_PROTOCOL_USERAUTH); + st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; + +#ifdef _MSC_BUILD + st_AuthUser.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_WINDOWS; +#elif __linux__ + st_AuthUser.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_LINUX; +#else + st_AuthUser.enDeviceType = ENUM_PROTOCOL_FOR_DEVICE_TYPE_PC_MACOS; +#endif + _tcsxcpy(st_AuthUser.tszUserName, lpszUser); + _tcsxcpy(st_AuthUser.tszUserPass, lpszPass); + //是否有动态码 + if (nDYCode > 0) + { + st_ProtocolHdr.xhToken = xhToken; + _xstprintf(st_AuthUser.tszDCode, _X("%d"), nDYCode); + } + //是否加密 + int nMsgLen = 0; + if (_tcsxlen(tszPassStr) > 0) + { + XCHAR tszCodecBuffer[2048] = {}; + + st_ProtocolHdr.wCrypto = ENUM_XENGINE_PROTOCOLHDR_CRYPTO_TYPE_XCRYPT; + OPenSsl_XCrypto_Encoder((LPCXSTR)&st_AuthUser, (int*)&st_ProtocolHdr.unPacketSize, (XBYTE*)tszCodecBuffer, tszPassStr); + + memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); + memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), tszCodecBuffer, st_ProtocolHdr.unPacketSize); + + nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize; + } + else + { + memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); + memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), &st_AuthUser, st_ProtocolHdr.unPacketSize); + + nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + sizeof(XENGINE_PROTOCOL_USERAUTH); + } + //发送数据 + if (!XClient_TCPSelect_SendMsg(m_hSocket, tszMsgBuffer, nMsgLen)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_CLIENT_SEND; + return false; + } + + nMsgLen = 0; + XCHAR* ptszMsgBuffer; + st_ProtocolHdr = {}; + //接受数据 + if (!XClient_TCPSelect_RecvPkt(m_hSocket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_CLIENT_RECV; + return false; + } + //判断是否登录协议 + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPLOGIN != st_ProtocolHdr.unOperatorCode) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_CLIENT_LOGIN; + return false; + } + //登录失败,错误码 + if (0 != st_ProtocolHdr.wReserve) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = st_ProtocolHdr.wReserve; + return false; + } + m_bRun = true; + m_bLogin = true; + m_bAuth = true; + //登录成功,创建线程 + pSTDThread = make_shared(AuthClient_Connector_Thread, this); + if (NULL == pSTDThread) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_CLIENT_THREAD; + return false; + } +#endif + return true; +} +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +XHTHREAD CALLBACK CAuthClient_Connector::AuthClient_Connector_Thread(XPVOID lParam) +{ + CAuthClient_Connector* pClass_This = (CAuthClient_Connector*)lParam; + +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_TCP) + while (pClass_This->m_bRun) + { + int nMsgLen = 0; + XCHAR* ptszMsgBuffer; + XENGINE_PROTOCOLHDR st_ProtocolHdr = {}; + + if (!XClient_TCPSelect_RecvPkt(pClass_This->m_hSocket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) + { + pClass_This->m_bLogin = false; + break; + } + XCHAR tszMsgBuffer[4096] = {}; + if (nMsgLen > 0 && _tcsxlen(pClass_This->tszPassStr) > 0) + { + //只有有后续数据的情况才需要解密 + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszMsgBuffer, pClass_This->tszPassStr); + } + else + { + memcpy(tszMsgBuffer, ptszMsgBuffer, nMsgLen); + } + + if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_TIMEDOUT == st_ProtocolHdr.unOperatorCode) + { + pClass_This->m_bAuth = false; + } + std::this_thread::sleep_for(std::chrono::seconds(1)); + } +#endif + return 0; +} \ No newline at end of file diff --git a/XEngine_Source/AuthClient_Connector/AuthClient_Connector.h b/XEngine_Source/AuthClient_Connector/AuthClient_Connector.h new file mode 100644 index 0000000..2d05147 --- /dev/null +++ b/XEngine_Source/AuthClient_Connector/AuthClient_Connector.h @@ -0,0 +1,40 @@ +#pragma once +/******************************************************************** +// Created: 2023/11/15 10:34:36 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_Connector\AuthClient_Connector.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_Connector +// File Base: AuthClient_Connector +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 验证客户端示例模块 +// History: +*********************************************************************/ +typedef struct +{ + XNETHANDLE xhToken; + int nDynamicCode; + time_t nTimeStart; +}AUTHHELP_DYNAMICCODE; + +class CAuthClient_Connector +{ +public: + CAuthClient_Connector(); + ~CAuthClient_Connector(); +public: + bool AuthClient_Connector_Connect(LPCXSTR lpszClientAddr, int nPort, LPCXSTR lpszPass = NULL); + bool AuthClient_Connector_Close(); + bool AuthClient_Connector_GetAuth(bool* pbAuth = NULL); + bool AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, int nDYCode = 0, XNETHANDLE xhToken = 0); +protected: + static XHTHREAD CALLBACK AuthClient_Connector_Thread(XPVOID lParam); +private: + bool m_bRun = false; + bool m_bLogin = false; + bool m_bAuth = false; + XSOCKET m_hSocket = 0; + XCHAR tszPassStr[128] = {}; +private: + shared_ptr pSTDThread; +}; \ No newline at end of file diff --git a/XEngine_Source/AuthClient_Define.h b/XEngine_Source/AuthClient_Define.h new file mode 100644 index 0000000..60ae015 --- /dev/null +++ b/XEngine_Source/AuthClient_Define.h @@ -0,0 +1,141 @@ +#pragma once +/******************************************************************** +// Created: 2023/11/15 11:29:49 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_Define.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client +// File Base: AuthClient_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 为了方便使用,封装了验证客户端,可以通过c/c++ e 等语言使用 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出的函数 +////////////////////////////////////////////////////////////////////////// +extern "C" XLONG AuthClient_GetLastError(int *pInt_SysError = NULL); +/************************************************************************/ +/* 验证客户端导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:AuthClient_Connector_Connect +函数功能:链接到服务器 + 参数.一:lpszClientAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:服务器地址 + 参数.二:nPort + In/Out:In + 类型:整数型 + 可空:N + 意思:服务器端口 + 参数.三:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:服务器密码,如果没有填空 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_Connector_Connect(LPCXSTR lpszClientAddr, int nPort, LPCXSTR lpszPass = NULL); +/******************************************************************** +函数名称:AuthClient_Connector_Close +函数功能:销毁关闭客户端 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_Connector_Close(); +/******************************************************************** +函数名称:AuthClient_Connector_GetAuth +函数功能:验证用户是否登录或者超时 + 参数.一:pbAuth + In/Out:Out + 类型:逻辑型指针 + 可空:Y + 意思:输出是否验证,如果登录成功但是参数为假.说明没有剩余时间了 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_Connector_GetAuth(bool* pbAuth = NULL); +/******************************************************************** +函数名称:AuthClient_Connector_Login +函数功能:登录到服务器 + 参数.一:lpszUser + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入用户名 + 参数.二:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入密码 + 参数.三:nDYCode + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入动态码 + 参数.四:xhToken + In/Out:In + 类型:句柄型 + 可空:Y + 意思:输入动态码绑定的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, int nDYCode = 0, XNETHANDLE xhToken = 0); +/************************************************************************/ +/* 临时验证函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:AuthClient_HTTPVer_TryRequest +函数功能:试用版请求 + 参数.一:lpszURLAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:服务器地址 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); +/******************************************************************** +函数名称:AuthClient_HTTPVer_GetDCode +函数功能:获取动态码 + 参数.一:lpszURLAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:服务器地址,完成的API地址,比如:http://127.0.0.1:5302/api?function=dcode&user=get + 参数.二:pInt_DYCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出动态码 + 参数.二:pxhToken + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出绑定的句柄 + 参数.三:pInt_Timeout + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出动态码超时时间 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL); \ No newline at end of file diff --git a/XEngine_Source/AuthClient_Error.h b/XEngine_Source/AuthClient_Error.h new file mode 100644 index 0000000..61c2a54 --- /dev/null +++ b/XEngine_Source/AuthClient_Error.h @@ -0,0 +1,29 @@ +#pragma once +/******************************************************************** +// Created: 2023/11/15 11:32:27 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_Error.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client +// File Base: AuthClient_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 错误表 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出的错误表 +////////////////////////////////////////////////////////////////////////// +/************************************************************************/ +/* 网络协议错误 */ +/************************************************************************/ +#define ERROR_AUTHORIZE_MODULE_CLIENT_PARAMENT 0x0060000 //参数错误,无法继续 +#define ERROR_AUTHORIZE_MODULE_CLIENT_SEND 0x0060001 //发送数据失败 +#define ERROR_AUTHORIZE_MODULE_CLIENT_RECV 0x0060002 //接受数据失败 +#define ERROR_AUTHORIZE_MODULE_CLIENT_LOGIN 0x0060003 //登录失败,请查看错误码 +#define ERROR_AUTHORIZE_MODULE_CLIENT_THREAD 0x0060004 //创建线程失败 +/************************************************************************/ +/* HTTP验证错误 */ +/************************************************************************/ +#define ERROR_AUTHORIZE_MODULE_HTTPVER_PARAMENT 0x0060010 +#define ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE 0x0060011 +#define ERROR_AUTHORIZE_MODULE_HTTPVER_VERFAILED 0x0060012 \ No newline at end of file diff --git a/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp b/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp new file mode 100644 index 0000000..d571e21 --- /dev/null +++ b/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp @@ -0,0 +1,160 @@ +#include "pch.h" +#include "AuthClient_HTTPVer.h" +/******************************************************************** +// Created: 2024/01/04 09:44:04 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_HTTPVer\AuthClient_HTTPVer.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_HTTPVer +// File Base: AuthClient_HTTPVer +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 临时授权客户端 +// History: +*********************************************************************/ +CAuthClient_HTTPVer::CAuthClient_HTTPVer() +{ +} +CAuthClient_HTTPVer::~CAuthClient_HTTPVer() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:AuthClient_HTTPVer_TryRequest +函数功能:试用版请求 + 参数.一:lpszURLAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:函数的API地址,需要输入完整的URL +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) +{ + AuthClient_IsErrorOccur = true; + + if (NULL == lpszURLAddr) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARAMENT; + return false; + } +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) + int nHTTPCode = 0; + XCHAR tszJsonStr[MAX_PATH] = {}; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + SYSTEMAPI_SERIAL_INFOMATION st_SDKSerial = {}; + + SystemApi_HardWare_GetSerial(&st_SDKSerial); + + _xstprintf(tszJsonStr, _X("%s"), st_SDKSerial.tszBoardSerial); + + st_JsonObject["tszVSerial"] = tszJsonStr; + st_JsonRoot["st_VERTemp"] = st_JsonObject; + //请求 + int nMsgLen = 0; + XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("POST"), lpszURLAddr, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + st_JsonRoot.clear(); + st_JsonObject.clear(); + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + if (0 != st_JsonRoot["code"].asInt()) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_VERFAILED; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); +#endif + return true; +} +/******************************************************************** +函数名称:AuthClient_HTTPVer_GetDCode +函数功能:获取动态码 + 参数.一:lpszURLAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:服务器地址,完成的API地址,比如:http://127.0.0.1:5302/api?function=dcode&user=get + 参数.二:pInt_DYCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出动态码 + 参数.二:pxhToken + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出绑定的句柄 + 参数.三:pInt_Timeout + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出动态码超时时间 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout /* = NULL */) +{ + AuthClient_IsErrorOccur = true; + + if (NULL == lpszURLAddr) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARAMENT; + return false; + } +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) + int nHTTPCode = 0; + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + //请求 + int nMsgLen = 0; + XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("GET"), lpszURLAddr, NULL, &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + if (0 != st_JsonRoot["code"].asInt()) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_VERFAILED; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + + *pInt_DYCode = st_JsonRoot["nDynamicCode"].asInt(); + *pxhToken = st_JsonRoot["xhToken"].asUInt64(); + if (NULL != pInt_Timeout) + { + *pInt_Timeout = st_JsonRoot["nTimeout"].asInt(); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); +#endif + return true; +} \ No newline at end of file diff --git a/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.h b/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.h new file mode 100644 index 0000000..626b0db --- /dev/null +++ b/XEngine_Source/AuthClient_HTTPVer/AuthClient_HTTPVer.h @@ -0,0 +1,24 @@ +#pragma once +/******************************************************************** +// Created: 2024/01/04 09:42:55 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_HTTPVer\AuthClient_HTTPVer.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\AuthClient_HTTPVer +// File Base: AuthClient_HTTPVer +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 临时授权客户端 +// History: +*********************************************************************/ + +class CAuthClient_HTTPVer +{ +public: + CAuthClient_HTTPVer(); + ~CAuthClient_HTTPVer(); +public: + bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); + bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL); +protected: +private: +}; \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client.def b/XEngine_Source/AuthorizeModule_Client.def new file mode 100644 index 0000000..4051483 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Client.def @@ -0,0 +1,12 @@ +LIBRARY + +EXPORTS + AuthClient_GetLastError + + AuthClient_Connector_Connect + AuthClient_Connector_Close + AuthClient_Connector_GetAuth + AuthClient_Connector_Login + + AuthClient_HTTPVer_TryRequest + AuthClient_HTTPVer_GetDCode \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client.vcxproj b/XEngine_Source/AuthorizeModule_Client.vcxproj new file mode 100644 index 0000000..2f3fe3b --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Client.vcxproj @@ -0,0 +1,186 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {dd8cb5f1-980f-48c3-ba2f-3cf534903b14} + AuthorizeModuleClient + 10.0 + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);..\AuthorizeModule_Client;../XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;AUTHORIZEMODULECLIENT_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + AuthorizeModule_Client.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;AUTHORIZEMODULECLIENT_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + AuthorizeModule_Client.def + + + + + Level3 + true + _DEBUG;AUTHORIZEMODULECLIENT_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + AuthorizeModule_Client.def + + + + + Level3 + true + true + true + NDEBUG;AUTHORIZEMODULECLIENT_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + AuthorizeModule_Client.def + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client.vcxproj.filters b/XEngine_Source/AuthorizeModule_Client.vcxproj.filters new file mode 100644 index 0000000..94729c0 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Client.vcxproj.filters @@ -0,0 +1,68 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {8e7e2cf3-2b0b-423c-ac1e-1397e7a6b105} + + + {af74d4d4-f721-4060-b98b-6f9d5eda9354} + + + {4a9a85f2-55f9-47e4-9049-14245fc56628} + + + {a5434c6b-9493-4a10-ae83-7dc2f1f6d489} + + + + + 头文件 + + + 头文件 + + + 头文件\AuthClient_Connector + + + 头文件 + + + 头文件 + + + 头文件\AuthClient_HTTPVer + + + + + 源文件 + + + 源文件 + + + 源文件\AuthClient_Connector + + + 源文件\AuthClient_HTTPVer + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client.vcxproj.user b/XEngine_Source/AuthorizeModule_Client.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Client.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h b/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h index 04a3515..60ae015 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h @@ -104,11 +104,6 @@ extern "C" bool AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, i 类型:常量字符指针 可空:N 意思:服务器地址 - 参数.二:lpszPass - In/Out:In - 类型:常量字符指针 - 可空:Y - 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 @@ -128,21 +123,16 @@ extern "C" bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); 类型:整数型指针 可空:N 意思:输出动态码 - 参数.三:pxhToken + 参数.二:pxhToken In/Out:Out 类型:整数型指针 可空:N 意思:输出绑定的句柄 - 参数.四:pInt_Timeout + 参数.三:pInt_Timeout In/Out:Out 类型:整数型指针 可空:Y 意思:输出动态码超时时间 - 参数.五:lpszPass - In/Out:In - 类型:常量字符指针 - 可空:Y - 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp index 5e8caed..d571e21 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp @@ -28,17 +28,12 @@ CAuthClient_HTTPVer::~CAuthClient_HTTPVer() 类型:常量字符指针 可空:N 意思:函数的API地址,需要输入完整的URL - 参数.二:lpszPass - In/Out:In - 类型:常量字符指针 - 可空:Y - 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPCXSTR lpszPass /* = NULL */) +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) { AuthClient_IsErrorOccur = true; @@ -49,7 +44,6 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPC return false; } #if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) - int nHTTPCode = 0; XCHAR tszJsonStr[MAX_PATH] = {}; Json::Value st_JsonRoot; @@ -67,45 +61,18 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPC //请求 int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - - if (NULL != lpszPass) - { - XCHAR tszENCodec[2048] = {}; - XCHAR tszDECodec[2048] = {}; - - nMsgLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENCodec, lpszPass); - APIClient_Http_Request(_X("POST"), lpszURLAddr, tszENCodec, &nHTTPCode, &ptszMsgBuffer, &nMsgLen); - - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDECodec, lpszPass); - st_JsonRoot.clear(); - st_JsonObject.clear(); - //解析回复 - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszDECodec, tszDECodec + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; - } - } - else + APIClient_Http_Request(_X("POST"), lpszURLAddr, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + st_JsonRoot.clear(); + st_JsonObject.clear(); + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { - APIClient_Http_Request(_X("POST"), lpszURLAddr, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); - st_JsonRoot.clear(); - st_JsonObject.clear(); - //解析回复 - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; - } + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; } - if (0 != st_JsonRoot["code"].asInt()) { AuthClient_IsErrorOccur = true; @@ -130,27 +97,22 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPC 类型:整数型指针 可空:N 意思:输出动态码 - 参数.三:pxhToken + 参数.二:pxhToken In/Out:Out 类型:整数型指针 可空:N 意思:输出绑定的句柄 - 参数.四:pInt_Timeout + 参数.三:pInt_Timeout In/Out:Out 类型:整数型指针 可空:Y 意思:输出动态码超时时间 - 参数.五:lpszPass - In/Out:In - 类型:常量字符指针 - 可空:Y - 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout /* = NULL */, LPCXSTR lpszPass /* = NULL */) +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout /* = NULL */) { AuthClient_IsErrorOccur = true; @@ -168,35 +130,16 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* //请求 int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("GET"), lpszURLAddr, NULL, &nHTTPCode, &ptszMsgBuffer, &nMsgLen); - if (NULL != lpszPass) + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { - XCHAR tszDECodec[2048] = {}; - OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDECodec, lpszPass); - - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszDECodec, tszDECodec + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; - } - } - else - { - //解析回复 - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) - { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; - } + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; } - if (0 != st_JsonRoot["code"].asInt()) { AuthClient_IsErrorOccur = true; diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h index aff8887..626b0db 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h @@ -17,8 +17,8 @@ public: CAuthClient_HTTPVer(); ~CAuthClient_HTTPVer(); public: - bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPCXSTR lpszPass = NULL); - bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL, LPCXSTR lpszPass = NULL); + bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); + bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL); protected: private: }; \ 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 fa980f6..a54553c 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -15,6 +15,10 @@ ////////////////////////////////////////////////////////////////////////// typedef struct { + XCHAR tszIPAddr[128]; + XCHAR tszTopic[128]; + int nMQTTPort; + bool bDB; int nTCPPort; //TCP端口 int nWSPort; //WEBSOCKET端口 int nHTTPPort; //HTTP管理端口 @@ -65,6 +69,12 @@ typedef struct }st_XCrypto; struct { + // mysql + XCHAR tszSQLAddr[128]; //数据库地址 + XCHAR tszSQLUser[128]; //数据库账号 + XCHAR tszSQLPass[128]; //数据库密码 + XCHAR tszDBName[128]; //数据库名 + int nSQLPort; //数据库端口 XCHAR tszSQLite[MAX_PATH]; //数据库文件位置 }st_XSql; struct diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 9eff1c2..ecdc9a0 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -147,11 +147,29 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XCrypto.bEnable = st_JsonXCrypto["bEnable"].asBool(); pSt_ServerConfig->st_XCrypto.nPassword = st_JsonXCrypto["nPass"].asInt(); //数据库配置 - if (st_JsonRoot["XSQL"].empty() || (1 != st_JsonRoot["XSQL"].size())) + if (pSt_ServerConfig->bDB) { + if (st_JsonRoot["XSQL"].empty() || (1 != st_JsonRoot["XSQL"].size())) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XSQL; + return false; + } + Json::Value st_JsonXSQL = st_JsonRoot["XSQL"]; + _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLite, st_JsonXSQL["tszSQLFile"].asCString()); //数据库文件位置 + } + else { - Config_IsErrorOccur = true; - Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XSQL; - return false; + if (st_JsonRoot["XSql"].empty() || (4 != st_JsonRoot["XSql"].size())) + { + Config_IsErrorOccur = true; + Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XSQL; + return false; + } + Json::Value st_JsonXSql = st_JsonRoot["XSql"]; + pSt_ServerConfig->st_XSql.nSQLPort = st_JsonXSql["SQLPort"].asInt(); + _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLAddr, st_JsonXSql["SQLAddr"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLUser, st_JsonXSql["SQLUser"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLPass, st_JsonXSql["SQLPass"].asCString()); } Json::Value st_JsonXSQL = st_JsonRoot["XSQL"]; _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLite, st_JsonXSQL["tszSQLFile"].asCString()); diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def index eed0328..609f0b7 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def @@ -35,4 +35,39 @@ EXPORTS Database_SQLite_AnnouncementInsert Database_SQLite_AnnouncementDelete - Database_SQLite_AnnouncementList \ No newline at end of file + Database_SQLite_AnnouncementList + + + Database_MYSQL_Init + Database_MYSQL_Destroy + + Database_MYSQL_UserDelete + Database_MYSQL_UserRegister + Database_MYSQL_UserQuery + Database_MYSQL_UserPay + Database_MYSQL_UserLeave + Database_MYSQL_UserSet + Database_MYSQL_UserList + + Database_MYSQL_SerialInsert + Database_MYSQL_SerialDelete + Database_MYSQL_SerialQuery + Database_MYSQL_SerialQueryAll + Database_MYSQL_SerialPush + + Database_MYSQL_TryInsert + Database_MYSQL_TryQuery + Database_MYSQL_TryDelete + Database_MYSQL_TryClear + Database_MYSQL_TrySet + Database_MYSQL_TryList + + Database_MYSQL_BannedInsert + Database_MYSQL_BannedDelete + Database_MYSQL_BannedList + Database_MYSQL_BannedExist + Database_MYSQL_BannedUPDate + + Database_MYSQL_AnnouncementInsert + Database_MYSQL_AnnouncementDelete + Database_MYSQL_AnnouncementList \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj index d5e9218..82f9f63 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj @@ -161,11 +161,13 @@ + + diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters index 6cbd88b..b3c0192 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters @@ -19,6 +19,12 @@ {be64df35-6ef0-4c8c-b95a-444977d7d1c4} + + {b1fc88cc-dfc6-483e-b4e7-41bb469b29cc} + + + {4a258342-2326-48f1-8c8b-3a925feffa70} + @@ -36,6 +42,9 @@ 头文件 + + 头文件\Database_MySQL + @@ -47,6 +56,9 @@ 源文件\Database_SQLite + + 源文件\Database_MySQL + diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index dd02840..5d6fc82 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -503,4 +503,494 @@ extern "C" bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Ann 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); \ No newline at end of file +extern "C" bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); + + +/************************************************************************/ +/* MYSQL数据库服务导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:Database_MYSQL_Init +函数功能:初始化数据库管理器 + 参数.一:pSt_DBConnector + In/Out:In + 类型:数据结构指针 + 参数.二:bIsChange + In/Out:In + 类型:逻辑型 + 可空:Y + 意思:是否允许更改用户充值类型 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:先初始化数据库服务,在初始化网络服务,才可以使用本验证服务器! +*********************************************************************/ +extern "C" bool Database_MYSQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange = true); +/******************************************************************** +函数名称:Database_MYSQL_Destroy +函数功能:销毁数据库服务 +返回值 + 类型:逻辑型 + 意思:是否销毁成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_Destroy(); +/******************************************************************** +函数名称:Database_MYSQL_UserDelete +函数功能:删除一个用户从数据库中 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的用户 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserDelete(LPCXSTR lpszUserName); +/******************************************************************** +函数名称:Database_MYSQL_UserRegister +函数功能:用户注册处理数据库语句函数 + 参数.一:pSt_UserInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要插入的用户数据 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo); +/******************************************************************** +函数名称:Database_MYSQL_UserQuery +函数功能:查询用户相对应的值 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的指定用户 + 参数.二:pSt_UserInfo + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:如果为空NULL,那么将只判断此用户是否存在 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo); +/******************************************************************** +函数名称:Database_MYSQL_UserPay +函数功能:用户充值函数 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要充值的用户名 + 参数.二:lpszSerialName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:充值使用的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功充值 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName); +/******************************************************************** +函数名称:Database_MYSQL_UserLeave +函数功能:用户离开处理事件 + 参数.一:pSt_TimeProtocol + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:离开的用户信息 +返回值 + 类型:逻辑型 + 意思:是否处理成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); +/******************************************************************** +函数名称:Database_MYSQL_UserSet +函数功能:设置用户信息 + 参数.一:pSt_UserTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要设置的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable); +/******************************************************************** +函数名称:Database_MYSQL_UserList +函数功能:获取用户列表 + 参数.一:pppSt_UserInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出用户列表,内存由用户释放 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:Database_MYSQL_SerialInsert +函数功能:插入一个序列号到数据库 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要插入的序列号 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_SerialInsert(LPCXSTR lpszSerialNumber); +/******************************************************************** +函数名称:Database_MYSQL_SerialDelete +函数功能:从数据库删除指定序列号 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_SerialDelete(LPCXSTR lpszSerialNumber); +/******************************************************************** +函数名称:Database_MYSQL_SerialQuery +函数功能:查询一个指定的序列号信息 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的序列号 + 参数.二:pSt_SerialTable + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:导出查询到的信息,如果为NULL,此参数将不起作用 +返回值 + 类型:逻辑型 + 意思:是否查询成功,如果第二个参数为NULL,那么将只返回是否有这个序列号 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable); +/******************************************************************** +函数名称:Database_MYSQL_SerialQueryAll +函数功能:查询序列卡表中的所有序列号 + 参数.一:pppSt_SerialTable + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出多少张卡 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注:参数一需要调用基础库的释放内存函数进行内存释放 +*********************************************************************/ +extern "C" bool Database_MYSQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:Database_MYSQL_SerialPush +函数功能:插入一条指定的序列号信息到服务器 + 参数.一:pSt_SerialTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); +/******************************************************************** +函数名称:Database_MYSQL_TryInsert +函数功能:网络使用模式插入一条数据 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:Database_MYSQL_TryQuery +函数功能:试用序列号查询函数 + 参数.一:pSt_AuthVer + In/Out:In/Out + 类型:数据结构指针 + 可空:N + 意思:输入序列号,输出获取到的内容 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:Database_MYSQL_TryDelete +函数功能:删除一条指定的试用数据 + 参数.一:lpszSerial + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TryDelete(LPCXSTR lpszSerial); +/******************************************************************** +函数名称:Database_MYSQL_TryClear +函数功能:清理函数,自动清理过期数据 + 参数.一:nThanValue + In/Out:In + 类型:整数型 + 可空:N + 意思:清理用于判断需要大于此的值 + 参数.二:enVerMode + In/Out:In + 类型:枚举型 + 可空:Y + 意思:判断注册类型,默认不判断全部执行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); +/******************************************************************** +函数名称:Database_MYSQL_TrySet +函数功能:设置用户信息函数 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要更新的用户信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:Database_MYSQL_TryList +函数功能:请求试用期列表 + 参数.一:pppSt_AuthVer + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出获取到的列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询起始编号 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询结束编号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); +/******************************************************************** +函数名称:Database_MYSQL_BannedInsert +函数功能:黑名单列表插入 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_BannedInsert(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_MYSQL_BannedDelete +函数功能:黑名单列表删除 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_BannedDelete(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_MYSQL_BannedList +函数功能:黑名单列表查询 + 参数.一:pppSt_BannedUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的用户名列表 + 参数.二:pInt_UserCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出用户禁用列表个数 + 参数.三:pppSt_BannedAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的IP地址列表 + 参数.四:pInt_AddrCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出地址禁用列表个数 + 参数.五:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找起始位置 + 参数.六:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:Database_MYSQL_BannedExist +函数功能:名单是否存在黑名单列表 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_BannedExist(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_MYSQL_BannedUPDate +函数功能:更新名单列表信息 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:Database_MYSQL_AnnouncementInsert +函数功能:公告插入 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +/******************************************************************** +函数名称:Database_MYSQL_AnnouncementDelete +函数功能:公告删除 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +/******************************************************************** +函数名称:Database_MYSQL_AnnouncementList +函数功能:列举所有公告 + 参数.一:ppppSt_Announcement + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Database_MYSQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); diff --git a/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.cpp new file mode 100644 index 0000000..7b66552 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.cpp @@ -0,0 +1,2008 @@ +#include "pch.h" +#include "Database_MySQL.h" + +/******************************************************************** +// Created: 2022/05/26 11:01:13 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL\Database_MySQL.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL +// File Base: Database_SQLite +// File Ext: cpp +// Project: XEngine(ͨ) +// Author: qyt +// Purpose: ݿ +// History: +*********************************************************************/ +CDatabase_MySQL::CDatabase_MySQL() +{ + m_bChange = false; + xhData = 0; +} + +CDatabase_MySQL::~CDatabase_MySQL() +{ +} +////////////////////////////////////////////////////////////////////////// +// к +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +ƣDatabase_MYSQL_Init +ܣʼݿ + .һpSt_DBConnector + In/OutIn + ͣݽṹָ + ɿգN + ˼MYSQLݿϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange) +{ + SQLPacket_IsErrorOccur = false; + m_bChange = bIsChange; + if (NULL == pSt_DBConnector) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + _tcsxcpy(pSt_DBConnector->tszDBName, _X("XEngine_Authorize")); //ÿ + if (!DataBase_MySQL_Connect(&xhData, pSt_DBConnector)) //ݿ + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_Destroy +ܣݿ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_Destroy() +{ + SQLPacket_IsErrorOccur = false; + + DataBase_MySQL_Close(xhData); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserDelete +ܣɾһûݿ + .һlpszUserName + In/OutIn + ַָͣ + ɿգN + ˼Ҫɾû +ֵ + ͣ߼ + ˼Ƿɾɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserDelete(LPCXSTR lpszUserName) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("delete from Authorize_User where UserName = '%s'"), lpszUserName); + //ִ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXEC; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserRegister +ܣûעᴦݿ亯 + .һpSt_UserInfo + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫû +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + if (Database_MYSQL_UserQuery(pSt_UserInfo->st_UserInfo.tszUserName)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_User(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,NOW())"), pSt_UserInfo->st_UserInfo.tszUserName, pSt_UserInfo->st_UserInfo.tszUserPass, pSt_UserInfo->tszLeftTime, pSt_UserInfo->st_UserInfo.tszEMailAddr, pSt_UserInfo->tszHardCode, pSt_UserInfo->enSerialType, pSt_UserInfo->st_UserInfo.nPhoneNumber, pSt_UserInfo->st_UserInfo.nIDNumber, pSt_UserInfo->st_UserInfo.nUserLevel); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_INSERT; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserQuery +ܣѯûӦֵ + .һlpszUserName + In/OutIn + ַָͣ + ɿգN + ˼Ҫѯָû + .pSt_UserInfo + In/OutOut + ͣݽṹָ + ɿգY + ˼ΪNULLôֻжϴûǷ +ֵ + ͣ߼ + ˼Ƿѯɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo) +{ + SQLPacket_IsErrorOccur = false; + //ѯ + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("select * from Authorize_User where UserName = '%s'"), lpszUserName); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + XCHAR** pptszResult = DataBase_MySQL_GetResult(xhData, xhTable); + XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //NULLʾ֪ + if (NULL != pSt_UserInfo) + { + memset(pSt_UserInfo, '\0', sizeof(AUTHREG_USERTABLE)); + + //ID + int nFliedValue = 0; + + //û + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d û%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserName, pptszResult[nFliedValue]); + } + + // + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d 룺%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserPass, pptszResult[nFliedValue]); + } + + //ʱ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d ʱ䣺%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->tszLeftTime, pptszResult[nFliedValue]); + } + + //ʼ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d ʼ%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszEMailAddr, pptszResult[nFliedValue]); + } + + //Ӳ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d Ӳ룺%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->tszHardCode, pptszResult[nFliedValue]); + } + + //ֵ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d ֵͣ%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(pptszResult[nFliedValue]); + } + + //QQ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d QQţ%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nPhoneNumber = _ttxoll(pptszResult[nFliedValue]); + } + + //֤ID + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d ֤ID%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nIDNumber = _ttxoll(pptszResult[nFliedValue]); + } + + //û -1ʾ + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d û -1ʾ%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nUserLevel = _ttxoi(pptszResult[nFliedValue]); + } + + //¼ + nFliedValue++; + if (NULL != pptszResult[nFliedValue] && _tcsxlen(pptszResult[nFliedValue]) > 0) + { + //printf("%d ¼ڣ%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszLoginTime, pptszResult[nFliedValue]); + } + //ע + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) { + //printf("%d עڣ%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszCreateTime, pptszResult[nFliedValue]); + } + + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserPay +ܣûֵ + .һlpszUserName + In/OutIn + ַָͣ + ɿգN + ˼Ҫֵû + .lpszSerialName + In/OutIn + ַָͣ + ɿգN + ˼ֵʹõк +ֵ + ͣ߼ + ˼Ƿɹֵ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +{ + SQLPacket_IsErrorOccur = false; + + AUTHREG_SERIALTABLE st_SerialTable; + AUTHREG_USERTABLE st_UserTable; + XCHAR tszSQLStatement[1024]; //SQL + + memset(tszSQLStatement, '\0', 1024); + memset(&st_SerialTable, '\0', sizeof(st_SerialTable)); + memset(&st_UserTable, '\0', sizeof(st_UserTable)); + // + if ((NULL == lpszUserName) || (NULL == lpszSerialName)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + //ѯֵǷ + if (!Database_MYSQL_SerialQuery(lpszSerialName, &st_SerialTable)) + { + return false; + } + //ֵǷʹ + if (st_SerialTable.bIsUsed) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISUSED; + return false; + } + //ѯûϢ + if (!Database_MYSQL_UserQuery(lpszUserName, &st_UserTable)) + { + return false; + } + //뷽ʽ + switch (st_SerialTable.enSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + if (!Database_MYSQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + if (!Database_MYSQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + if (!Database_MYSQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + if (!Database_MYSQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + default: + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTSUPPORT; + return false; + } + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_Serial SET UserName = '%s',bIsUsed = '1' WHERE SerialNumber = '%s'"), lpszUserName, lpszSerialName); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATAUSEDNAME; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserLeave +ܣû뿪¼ + .һpSt_TimeProtocol + In/OutIn + ͣݽṹָ + ɿգN + ˼뿪ûϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + + if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) + { + //ֻʣʱûеʱҪ + if (pSt_TimeProtocol->nTimeLeft <= 0) + { + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); + } + } + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) + { + //ӿҪʱܼ + if (pSt_TimeProtocol->nTimeLeft <= 0) + { + pSt_TimeProtocol->nTimeLeft = 0; + } + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); + } + 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), pSt_TimeProtocol->tszUserName); + } + else + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UNKNOWTYPE; + return false; + } + //ûʣʱ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATA; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserSet +ܣûϢ + .һpSt_UserTable + In/OutIn + ͣݽṹָ + ɿգN + ˼ҪõϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',UPTime = NOW(),CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel/*, pSt_UserTable->st_UserInfo.tszLoginTime*/, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); + + //printf("22ûϢ(SQL)%s\n", tszSQLStatement); + //ûʣʱ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_UserList +ܣȡûб + .һpppSt_UserInfo + In/OutOut + ָͣ + ɿգN + ˼ûб,ڴûͷ + .pInt_ListCount + In/OutOut + ͣ + ɿգN + ˼б + .nPosStart + In/OutIn + ͣ + ɿգY + ˼ʼλ + .ģnPosEnd + In/OutIn + ͣ + ɿգY + ˼λ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + //ѯ + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + char** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_User LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; + return false; + } + *pInt_ListCount = nRow; + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_UserInfo, (int)nRow, sizeof(AUTHREG_USERTABLE)); + + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + nFliedValue++; + //û + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserName, ppszResult[nFliedValue]); + // + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserPass, ppszResult[nFliedValue]); + //ʱ + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->tszLeftTime, ppszResult[nFliedValue]); + //ʼ + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszEMailAddr, ppszResult[nFliedValue]); + //Ӳ + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->tszHardCode, ppszResult[nFliedValue]); + //ֵ + nFliedValue++; + (*pppSt_UserInfo)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + //QQ + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nPhoneNumber = _ttxoll(ppszResult[nFliedValue]); + //֤ID + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nIDNumber = _ttxoll(ppszResult[nFliedValue]); + //û -1ʾ + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nUserLevel = _ttxoi(ppszResult[nFliedValue]); + //¼ + nFliedValue++; + if (NULL != ppszResult[nFliedValue] && _tcsxlen(ppszResult[nFliedValue]) > 0) + { + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszLoginTime, ppszResult[nFliedValue]); + } + //ע + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_SerialInsert +ܣһкŵݿ + .һlpszSerialNumber + In/OutIn + ַָͣ + ɿգN + ˼Ҫк +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_SerialInsert(LPCXSTR lpszSerialNumber) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + if (Database_MYSQL_SerialQuery(lpszSerialNumber)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enAuthSerialType; + XENGINE_LIBTIMER st_AuthTimer; + memset(&st_AuthTimer, '\0', sizeof(st_AuthTimer)); + + if (!Authorize_Serial_GetType(lpszSerialNumber, &enAuthSerialType, &st_AuthTimer)) + { + return false; + } + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wSecond, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enAuthSerialType) + { + XCHAR tszLeftTime[MAX_PATH]; + memset(tszLeftTime, '\0', MAX_PATH); + _xstprintf(tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTimer.wYear, st_AuthTimer.wMonth, st_AuthTimer.wDay, st_AuthTimer.wHour, st_AuthTimer.wMinute, st_AuthTimer.wSecond); + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%s','%d',0,NOW())"), lpszSerialNumber, tszLeftTime, enAuthSerialType); + } + else + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s',0,'%d',0,NOW())"), lpszSerialNumber, enAuthSerialType); + } + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_SerialDelete +ܣݿɾָк + .һlpszSerialNumber + In/OutIn + ַָͣ + ɿգN + ˼Ҫɾк +ֵ + ͣ߼ + ˼Ƿɾɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_SerialDelete(LPCXSTR lpszSerialNumber) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("delete from Authorize_Serial where SerialNumber = '%s'"), lpszSerialNumber); + //ִ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_SerialQuery +ܣѯһָкϢ + .һlpszSerialNumber + In/OutIn + ַָͣ + ɿգN + ˼Ҫѯк + .pSt_SerialTable + In/OutOut + ͣݽṹָ + ɿգY + ˼ѯϢΪNULL˲ +ֵ + ͣ߼ + ˼ǷѯɹڶΪNULLôֻǷк +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL + char** ppszResult = NULL; + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("select * from Authorize_Serial where SerialNumber = '%s'"), lpszSerialNumber); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_SERIAL; + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + if (NULL != pSt_SerialTable) + { + memset(pSt_SerialTable, '\0', sizeof(AUTHREG_SERIALTABLE)); + //ID + int nFliedValue = 0; + //ʹ + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszUserName, ppszResult[nFliedValue]); + //к + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszSerialNumber, ppszResult[nFliedValue]); + //ʱʱ + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszMaxTime, ppszResult[nFliedValue]); + //п + nFliedValue++; + pSt_SerialTable->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + //ǷѾʹ + nFliedValue++; + pSt_SerialTable->bIsUsed = _ttxoi(ppszResult[nFliedValue]); + //ʱʱ + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_SerialQueryAll +ܣѯпек + .һpppSt_SerialTable + In/OutOut + ָͣ + ɿգN + ˼пб + .pInt_ListCount + In/OutOut + ָͣ + ɿգY + ˼ſ + .nPosStart + In/OutIn + ͣ + ɿգY + ˼ʼλ + .ģnPosEnd + In/OutIn + ͣ + ɿգY + ˼λ +ֵ + ͣ߼ + ˼Ƿѯɹ +עһҪûͷڴ溯ڴͷ +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + char** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_Serial LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NONE; + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_SerialTable, (int)nRow, sizeof(AUTHREG_SERIALTABLE)); + + *pInt_ListCount = nRow; + + for (int i = 0; i < nRow; i++) + { + // ȡݿ + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + //ID + nFliedValue++; + //ʹ + _tcsxcpy((*pppSt_SerialTable)[i]->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + //к + _tcsxcpy((*pppSt_SerialTable)[i]->tszSerialNumber, ppszResult[nFliedValue]); + nFliedValue++; + //ʱʱ + _tcsxcpy((*pppSt_SerialTable)[i]->tszMaxTime, ppszResult[nFliedValue]); + nFliedValue++; + //п + (*pppSt_SerialTable)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ǷѾʹ + (*pppSt_SerialTable)[i]->bIsUsed = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + _tcsxcpy((*pppSt_SerialTable)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_SerialPush +ܣһָкϢ + .һpSt_SerialTable + In/OutIn + ͣݽṹָ + ɿգN + ˼ҪϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + + if (Database_MYSQL_SerialQuery(pSt_SerialTable->tszSerialNumber)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'%s','%s','%s',%d,%d,'%s')"), pSt_SerialTable->tszUserName, pSt_SerialTable->tszSerialNumber, pSt_SerialTable->tszMaxTime, pSt_SerialTable->enSerialType, pSt_SerialTable->bIsUsed, pSt_SerialTable->tszCreateTime); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TryInsert +ܣʹģʽһ + .һpSt_AuthVer + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_AuthVer) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + AUTHREG_TEMPVER st_AuthVer; + + memset(tszSQLStatement, '\0', 1024); + memset(&st_AuthVer, '\0', sizeof(AUTHREG_TEMPVER)); + //printf("444444444444\n"); + //֤Ƿ + _tcsxcpy(st_AuthVer.tszVSerial, pSt_AuthVer->tszVSerial); + if (Database_MYSQL_TryQuery(&st_AuthVer)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + //ݿ + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_TempVer(tszVSerial,nVMode,nVTime,nLTime,CreateTime) VALUES('%s',%d,%d,%d,NOW())"), pSt_AuthVer->tszVSerial, pSt_AuthVer->enVMode, pSt_AuthVer->nVTime, pSt_AuthVer->nVTime); + + //printf("ʹģʽһݣSQL%s\n", tszSQLStatement); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TryQuery +ܣкŲѯ + .һpSt_AuthVer + In/OutIn/Out + ͣݽṹָ + ɿգN + ˼к,ȡ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_AuthVer) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_TempVer WHERE tszVSerial = '%s'"), pSt_AuthVer->tszVSerial); + + //printf("кŲѯLSQL䣺%s\n", tszSQLStatement); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + //printf("3333 :%d :%d\n", nRow, nColumn); + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NONE; + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + nFliedValue++; + //к + nFliedValue++; + + // + if (NULL != ppszResult[nFliedValue]) { + pSt_AuthVer->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + } + + //ʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_AuthVer->nVTime = _ttxoi(ppszResult[nFliedValue]); + } + + //ʣʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_AuthVer->nLTime = _ttxoi(ppszResult[nFliedValue]); + } + + //עʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_AuthVer->tszVDate, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TryDelete +ܣɾһָ + .һlpszSerial + In/OutIn + ַָͣ + ɿգN + ˼Ҫɾк +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TryDelete(LPCXSTR lpszSerial) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == lpszSerial) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_TempVer WHERE tszVSerial = '%s'"), lpszSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TryClear +ܣ,Զ + .һnThanValue + In/OutIn + ͣ + ɿգN + ˼жҪڴ˵ֵ + .enVMode + In/OutIn + ͣö + ɿգY + ˼жע,Ĭϲжȫִ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_TempVer")); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListVer; + //ѵ + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + AUTHREG_TEMPVER st_AuthVer; + memset(&st_AuthVer, '\0', sizeof(AUTHREG_TEMPVER)); + //ID + nFliedValue++; + //к + _tcsxcpy(st_AuthVer.tszVSerial, ppszResult[nFliedValue]); + nFliedValue++; + //ģʽ + st_AuthVer.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + st_AuthVer.nVTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + st_AuthVer.nLTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //עʱ + _tcsxcpy(st_AuthVer.tszVDate, ppszResult[nFliedValue]); + + stl_ListVer.push_back(st_AuthVer); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + // + list::const_iterator stl_ListIterator = stl_ListVer.begin(); + for (; stl_ListIterator != stl_ListVer.end(); stl_ListIterator++) + { + //жDzDzעģʽֱ + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == enVerMode) + { + if (nThanValue > stl_ListIterator->nVTime) + { + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_TempVer WHERE tszVSerial = '%s'"), stl_ListIterator->tszVSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + } + } + else + { + if (enVerMode == stl_ListIterator->enVMode) + { + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_TempVer WHERE tszVSerial = '%s'"), stl_ListIterator->tszVSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + } + } + } + stl_ListVer.clear(); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TrySet +ܣûϢ + .һpSt_AuthVer + In/OutIn + ͣݽṹָ + ɿգN + ˼ҪµûϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_TempVer SET nVMode = '%d',nVTime = '%d',nLTime = '%d',CreateTime = '%s' WHERE tszVSerial = '%s'"), pSt_AuthVer->enVMode, pSt_AuthVer->nVTime, pSt_AuthVer->nLTime, pSt_AuthVer->tszVDate, pSt_AuthVer->tszVSerial); + //û + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_TryList +ܣб + .һpppSt_AuthVer + In/OutOut + ָͣ + ɿգN + ˼ȡб + .pInt_ListCount + In/OutOut + ָͣ + ɿգN + ˼б + .nPosStart + In/OutIn + ͣ + ɿգN + ˼ѯʼ + .ģnPosEnd + In/OutIn + ͣ + ɿգN + ˼ѯ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStr[1024]; //SQL + + memset(tszSQLStr, '\0', 1024); + _xstprintf(tszSQLStr, _X("SELECT * FROM Authorize_TempVer LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStr, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_AuthVer, (int)nRow, sizeof(AUTHREG_TEMPVER)); + + //ѵ + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + //ID + (*pppSt_AuthVer)[i]->nID = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //Ƿ + _tcsxcpy((*pppSt_AuthVer)[i]->tszVSerial, ppszResult[nFliedValue]); + nFliedValue++; + // + (*pppSt_AuthVer)[i]->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + (*pppSt_AuthVer)[i]->nVTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + (*pppSt_AuthVer)[i]->nLTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //עʱ + _tcsxcpy((*pppSt_AuthVer)[i]->tszVDate, ppszResult[nFliedValue]); + nFliedValue++; + } + *pInt_ListCount = nRow; + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_BannedInsert +ܣб + .һpSt_Banned + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_BannedInsert(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + //ֱӷ + if (Database_MYSQL_BannedExist(pSt_Banned)) + { + return true; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + // + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_BannedUser(bEnable,tszUserName,tszLeftTime,tszCreateTime) VALUES(%d,'%s','%s',NOW())"), pSt_Banned->bEnable, pSt_Banned->tszUserName, pSt_Banned->tszLeftTime); + } + else + { + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_BannedAddr(bEnable,tszIPAddr,tszLeftTime,tszCreateTime) VALUES(%d,'%s','%s',NOW())"), pSt_Banned->bEnable, pSt_Banned->tszIPAddr, pSt_Banned->tszLeftTime); + } + + //printf("б(SQL):%s\n", tszSQLStatement); + //ݿ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_BannedDelete +ܣбɾ + .һpSt_Banned + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_BannedDelete(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + // + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + } + else + { + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + } + //ݿ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_BannedList +ܣбѯ + .һpppSt_BannedUser + In/OutOut + ָͣ + ɿգN + ˼õûб + .pInt_UserCount + In/OutOut + ָͣ + ɿգN + ˼ûб + .pppSt_BannedAddr + In/OutOut + ָͣ + ɿգN + ˼õIPַб + .ģpInt_AddrCount + In/OutOut + ָͣ + ɿգN + ˼ַб + .壺nPosStart + In/OutIn + ͣ + ɿգN + ˼ʼλ + .nPosEnd + In/OutIn + ͣ + ɿգN + ˼ҽλ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + //ѯ + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListAddr; + //ѵ + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + //ID + st_Banned.nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //Ƿ + st_Banned.bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //ַ + _tcsxcpy(st_Banned.tszIPAddr, ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + _tcsxcpy(st_Banned.tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //עʱ + _tcsxcpy(st_Banned.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + stl_ListAddr.push_back(st_Banned); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + //ûб + xhTable = 0; + nRow = 0; + nColumn = 0; + ppszResult = NULL; + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedUser LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListUser; + //ѵ + for (int i = 0; i < nRow; i++) + { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + + //ID + st_Banned.nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //Ƿ + st_Banned.bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //û + _tcsxcpy(st_Banned.tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + //ʱ + _tcsxcpy(st_Banned.tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //עʱ + _tcsxcpy(st_Banned.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + stl_ListUser.push_back(st_Banned); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + // + *pInt_AddrCount = stl_ListAddr.size(); + *pInt_UserCount = stl_ListUser.size(); + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedAddr, stl_ListAddr.size(), sizeof(AUTHREG_BANNED)); + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedUser, stl_ListUser.size(), sizeof(AUTHREG_BANNED)); + + list::const_iterator stl_ListIterator = stl_ListAddr.begin(); + for (int i = 0; stl_ListIterator != stl_ListAddr.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedAddr)[i]->nID = stl_ListIterator->nID; + (*pppSt_BannedAddr)[i]->bEnable = stl_ListIterator->bEnable; + _tcsxcpy((*pppSt_BannedAddr)[i]->tszIPAddr, stl_ListIterator->tszIPAddr); + _tcsxcpy((*pppSt_BannedAddr)[i]->tszLeftTime, stl_ListIterator->tszLeftTime); + _tcsxcpy((*pppSt_BannedAddr)[i]->tszCreateTime, stl_ListIterator->tszCreateTime); + } + stl_ListIterator = stl_ListUser.begin(); + for (int i = 0; stl_ListIterator != stl_ListUser.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedUser)[i]->nID = stl_ListIterator->nID; + (*pppSt_BannedUser)[i]->bEnable = stl_ListIterator->bEnable; + _tcsxcpy((*pppSt_BannedUser)[i]->tszUserName, stl_ListIterator->tszUserName); + _tcsxcpy((*pppSt_BannedUser)[i]->tszLeftTime, stl_ListIterator->tszLeftTime); + _tcsxcpy((*pppSt_BannedUser)[i]->tszCreateTime, stl_ListIterator->tszCreateTime); + } + + stl_ListAddr.clear(); + stl_ListUser.clear(); + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_BannedExist +ܣǷںб + .һpSt_Banned + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_BannedExist(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + XCHAR** ppszResult = nullptr; + XLONG* pInt_Length = nullptr; + + //жûǷ + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + __int64u nRow = 0; + __int64u nColumn = 0; + XNETHANDLE xhTable = 0; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + //Ƿ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + + //ַ + nFliedValue++; + + //ʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } + + //עʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + } + + //жIPַǷ + if (_tcsxlen(pSt_Banned->tszIPAddr) > 0) + { + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + ppszResult = nullptr; + pInt_Length = nullptr; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + //printf("2 :%d :%d\n", nRow, nColumn); + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) + { + //printf("%d ID%s\n", nFliedValue, ppszResult[nFliedValue]); + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + + //Ƿ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("%d Ƿã%s\n", nFliedValue, ppszResult[nFliedValue]); + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + + //ַ + nFliedValue++; + + //ʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("%d ʱ䣺%s\n", nFliedValue, ppszResult[nFliedValue]); + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } + + + //עʱ + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("%d עʱ䣺%s\n", nFliedValue, ppszResult[nFliedValue]); + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + } + //Ƿ񱻽 + if (!pSt_Banned->bEnable) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; + return false; + } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer > 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + return false; + } + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_BannedUPDate +ܣбϢ + .һpSt_Banned + In/OutIn + ͣݽṹָ + ɿգN + ˼Ҫ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + // + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_BannedUser SET bEnable = %d,tszLeftTime = '%s' WHERE tszUserName = '%s'"), pSt_Banned->bEnable, pSt_Banned->tszLeftTime, pSt_Banned->tszUserName); + } + else + { + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_BannedAddr SET bEnable = %d,tszLeftTime = '%s' WHERE tszIPAddr = '%s'"), pSt_Banned->bEnable, pSt_Banned->tszLeftTime, pSt_Banned->tszIPAddr); + } + //ݿ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_AnnouncementInsert +ܣ + .һpSt_Announcement + In/OutIn + ͣݽṹָ + ɿգN + ˼ҪϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Announcement) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[8192]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Announcement(tszContext,tszCreateTime) VALUES('%s',NOW())"), pSt_Announcement->tszContext); + + //printf("SQL䣺%s\n", tszSQLStatement); + //ݿ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_AnnouncementDelete +ܣɾ + .һpSt_Announcement + In/OutIn + ͣݽṹָ + ɿգN + ˼ҪɾϢ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Announcement) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("DELETE FROM Authorize_Announcement WHERE ID = %lld"), pSt_Announcement->nID); + //ݿ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +ƣDatabase_MYSQL_AnnouncementList +ܣой + .һppppSt_Announcement + In/OutOut + ָͣ + ɿգN + ˼о + .pInt_ListCount + In/OutOut + ָͣ + ɿգN + ˼ݸ +ֵ + ͣ߼ + ˼Ƿɹ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) +{ + SQLPacket_IsErrorOccur = false; + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_Announcement")); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + *pInt_ListCount = nRow; + if (NULL == ppppSt_Announcement) + { + return true; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppppSt_Announcement, (int)nRow, sizeof(AUTHREG_ANNOUNCEMENT)); + + //ѵ + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + (*ppppSt_Announcement)[i]->nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_Announcement)[i]->tszContext, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_Announcement)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} + +////////////////////////////////////////////////////////////////////////// +// +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +ƣDatabase_MYSQL_UserPayTime +ܣڷʽֵʽ + .һlpszUserName + In/OutIn + ַָͣ + ɿգN + ˼ֵû + .lpszUserTime + In/OutIn + ַָͣ + ɿգN + ˼ûǰijʱʱ + .lpszCardTime + In/OutIn + ַָͣ + ɿգN + ˼ֵʱ + .ģen_AuthSerialType + In/OutIn + ͣö + ɿգN + ˼ֵijֵ + .壺en_AuthUserType + In/OutIn + ͣö + ɿգN + ˼ûǰijֵ +ֵ + ͣ߼ + ˼Ƿɹֵ +ע +*********************************************************************/ +bool CDatabase_MySQL::Database_MYSQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + //жϺǰijֵǷƥ䡣 + if (en_AuthSerialType != en_AuthUserType) + { + //,Ҫд + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW != en_AuthUserType) + { + //жǷд + if (!m_bChange) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; + return false; + } + } + //ûijֵ + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET CardSerialType = '%d' WHERE UserName = '%s'"), en_AuthSerialType, lpszUserName); + //ִû£Ϊпͱı䣬Ҫ¡ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATATYPE; + return false; + } + // + switch (en_AuthSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + { + //Ƿӿ + //ǰijֵͲƥ䣬ôǰijֵȫᱻɾ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //ûĹʱ + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + { + // + //ûĹʱ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //ûĹʱ + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + { + //Ǵ + //ûĹʱ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + { + XCHAR tszTime[128]; + XENGINE_LIBTIMER st_AuthTime; + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + + memset(tszTime, '\0', sizeof(tszTime)); + memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); + //ȡÿͺʱ + if (!Authorize_Serial_GetType(lpszCardTime, &en_GeneraterSerialType, &st_AuthTime)) + { + return false; + } + _xstprintf(tszTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); + //ûĹʱ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTime, lpszUserName); + } + break; + default: + break; + } + } + else + { + switch (en_AuthSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + { + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //ǰûǰʱҲ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //ûĹʱ + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + { + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //ǰûǰʱҲ + //ûĹʱ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + { + //Ǵ + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //ǰûǰʱҲ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //ûĹʱ + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + { + //Զ忨,޷ + XCHAR tszTime[128]; + XENGINE_LIBTIMER st_AuthTime; + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + + memset(tszTime, '\0', sizeof(tszTime)); + memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); + //ȡÿͺʱ + if (!Authorize_Serial_GetType(lpszCardTime, &en_GeneraterSerialType, &st_AuthTime)) + { + return false; + } + _xstprintf(tszTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); + //ûĹʱ + _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%s' WHERE UserName = '%s'"), tszTime, lpszUserName); + } + break; + default: + break; + } + } + //ûĹʱ + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATA; + return false; + } + return true; +} + diff --git a/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.h b/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.h new file mode 100644 index 0000000..cd6c472 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Database/Database_MySQL/Database_MySQL.h @@ -0,0 +1,63 @@ +#pragma once +/******************************************************************** +// Created: 2022/05/26 11:01:06 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL\Database_MySQL.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL +// File Base: Database_MySQL +// File Ext: h +// Project: XEngine(ͨ) +// Author: qyt +// Purpose: ݿ +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// AuthReg_UserTableݣID û ע ʣʱ Ӳ עļ QQ ֤ +// AuthReg_SerialTableݣID ʹ к ʹʱ ʱ Ƿʹ +////////////////////////////////////////////////////////////////////////// +class CDatabase_MySQL +{ +public: + CDatabase_MySQL(); + ~CDatabase_MySQL(); +public: + bool Database_MYSQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange = true); //ʼ + bool Database_MYSQL_Destroy(); // +public: + bool Database_MYSQL_UserDelete(LPCXSTR lpszUserName); //ɾû + bool Database_MYSQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo); //ûע + bool Database_MYSQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo = NULL); //ûѯ + bool Database_MYSQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName); //ֵֵ + bool Database_MYSQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //û뿪± + bool Database_MYSQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable); //ûϢ + bool Database_MYSQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); //ȡûб +public: + bool Database_MYSQL_SerialInsert(LPCXSTR lpszSerialNumber); //п + bool Database_MYSQL_SerialDelete(LPCXSTR lpszSerialNumber); //ɾһк + bool Database_MYSQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable = NULL); //տŻûѯ + bool Database_MYSQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd);//ѯп + bool Database_MYSQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable);//һָкϢ +public: + bool Database_MYSQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); //ʹģʽһ + bool Database_MYSQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); //кŲѯ + bool Database_MYSQL_TryDelete(LPCXSTR lpszSerial); //ɾһָ + bool Database_MYSQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); //,Զ + bool Database_MYSQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); //ûϢ + bool Database_MYSQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); //б +public: + bool Database_MYSQL_BannedInsert(AUTHREG_BANNED* pSt_Banned); //б + bool Database_MYSQL_BannedDelete(AUTHREG_BANNED* pSt_Banned); //бɾ + bool Database_MYSQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); //бѯ + bool Database_MYSQL_BannedExist(AUTHREG_BANNED* pSt_Banned); //Ƿںб + bool Database_MYSQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned); //бϢ +public: + bool Database_MYSQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); // + bool Database_MYSQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //ɾ + bool Database_MYSQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); //ой + + +protected: + bool Database_MYSQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); //ڷʽֵʽ +private: + bool m_bChange; + XNETHANDLE xhData; //ݿ +}; diff --git a/XEngine_Source/AuthorizeModule_Database/pch.cpp b/XEngine_Source/AuthorizeModule_Database/pch.cpp index 7b844cf..1d0d83b 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Database/pch.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "Database_SQLite/Database_SQLite.h" +#include "Database_MySQL/Database_MySQL.h" /******************************************************************** // Created: 2022/05/26 11:02:23 // File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\pch.cpp @@ -15,6 +16,7 @@ bool SQLPacket_IsErrorOccur = false; XLONG SQLPacket_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CDatabase_SQLite m_SQLAuth; +CDatabase_MySQL m_MySQL; ////////////////////////////////////////////////////////////////////////// // 导出的函数 ////////////////////////////////////////////////////////////////////////// @@ -140,4 +142,122 @@ extern "C" bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT * pSt_An extern "C" bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT * **ppppSt_Announcement, int* pInt_ListCount) { return m_SQLAuth.Database_SQLite_AnnouncementList(ppppSt_Announcement, pInt_ListCount); -} \ No newline at end of file +} + + + +/************************************************************************/ +/* MYSQL数据库服务导出函数 */ +/************************************************************************/ +extern "C" bool Database_MYSQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange) +{ + return m_MySQL.Database_MYSQL_Init(pSt_DBConnector, bIsChange); +} +extern "C" bool Database_MYSQL_Destroy() +{ + return m_MySQL.Database_MYSQL_Destroy(); +} +extern "C" bool Database_MYSQL_UserDelete(LPCXSTR lpszUserName) +{ + return m_MySQL.Database_MYSQL_UserDelete(lpszUserName); +} +extern "C" bool Database_MYSQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) +{ + return m_MySQL.Database_MYSQL_UserRegister(pSt_UserInfo); +} +extern "C" bool Database_MYSQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo) +{ + return m_MySQL.Database_MYSQL_UserQuery(lpszUserName, pSt_UserInfo); +} +extern "C" bool Database_MYSQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +{ + return m_MySQL.Database_MYSQL_UserPay(lpszUserName, lpszSerialName); +} +extern "C" bool Database_MYSQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) +{ + return m_MySQL.Database_MYSQL_UserLeave(pSt_TimeProtocol); +} +extern "C" bool Database_MYSQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) +{ + return m_MySQL.Database_MYSQL_UserSet(pSt_UserTable); +} +extern "C" bool Database_MYSQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_MySQL.Database_MYSQL_UserList(pppSt_UserInfo, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool Database_MYSQL_SerialInsert(LPCXSTR lpszSerialNumber) +{ + return m_MySQL.Database_MYSQL_SerialInsert(lpszSerialNumber); +} +extern "C" bool Database_MYSQL_SerialDelete(LPCXSTR lpszSerialNumber) +{ + return m_MySQL.Database_MYSQL_SerialDelete(lpszSerialNumber); +} +extern "C" bool Database_MYSQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) +{ + return m_MySQL.Database_MYSQL_SerialQuery(lpszSerialNumber, pSt_SerialTable); +} +extern "C" bool Database_MYSQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_MySQL.Database_MYSQL_SerialQueryAll(pppSt_SerialTable, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool Database_MYSQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) +{ + return m_MySQL.Database_MYSQL_SerialPush(pSt_SerialTable); +} +extern "C" bool Database_MYSQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_MySQL.Database_MYSQL_TryInsert(pSt_AuthVer); +} +extern "C" bool Database_MYSQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_MySQL.Database_MYSQL_TryQuery(pSt_AuthVer); +} +extern "C" bool Database_MYSQL_TryDelete(LPCXSTR lpszSerial) +{ + return m_MySQL.Database_MYSQL_TryDelete(lpszSerial); +} +extern "C" bool Database_MYSQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +{ + return m_MySQL.Database_MYSQL_TryClear(nThanValue, enVerMode); +} +extern "C" bool Database_MYSQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_MySQL.Database_MYSQL_TrySet(pSt_AuthVer); +} +extern "C" bool Database_MYSQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_MySQL.Database_MYSQL_TryList(pppSt_AuthVer, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool Database_MYSQL_BannedInsert(AUTHREG_BANNED* pSt_Banned) +{ + return m_MySQL.Database_MYSQL_BannedInsert(pSt_Banned); +} +extern "C" bool Database_MYSQL_BannedDelete(AUTHREG_BANNED* pSt_Banned) +{ + return m_MySQL.Database_MYSQL_BannedDelete(pSt_Banned); +} +extern "C" bool Database_MYSQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +{ + return m_MySQL.Database_MYSQL_BannedList(pppSt_BannedUser, pInt_UserCount, pppSt_BannedAddr, pInt_AddrCount, nPosStart, nPosEnd); +} +extern "C" bool Database_MYSQL_BannedExist(AUTHREG_BANNED* pSt_Banned) +{ + return m_MySQL.Database_MYSQL_BannedExist(pSt_Banned); +} +extern "C" bool Database_MYSQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned) +{ + return m_MySQL.Database_MYSQL_BannedUPDate(pSt_Banned); +} +extern "C" bool Database_MYSQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + return m_MySQL.Database_MYSQL_AnnouncementInsert(pSt_Announcement); +} +extern "C" bool Database_MYSQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + return m_MySQL.Database_MYSQL_AnnouncementDelete(pSt_Announcement); +} +extern "C" bool Database_MYSQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) +{ + return m_MySQL.Database_MYSQL_AnnouncementList(ppppSt_Announcement, pInt_ListCount); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index fd8fca75f835f886c52b3660918e5a37080ec846..3f2745f24017de2b69ae42e70fc25b607fa5f87d 100644 GIT binary patch delta 1885 zcmb7@dq~q!6vxl`P3N#QA*;2PF0fd&=6XjEz3ib*TV|;}(6Tmz9?QZkBF!ucBUZoa zKt(7-1&JC364;y?k>v_ zZBx5aRN4zD@5#?xZ#Z^nn5BiW+B4IUgmKm~&p@Hle~Oo!#g zCP!?x2}}-4&SFS`bXWp;P+8Ko?ZnCx=Ub}8x}P^ZIrx3wwJb|kF2CIY4%o{57RZN% zV1rax#c?r|uv^GcWr@g{l4*j9yo(N?L&r^J@U^PBs_$$O?BT}=yJ0RQ^CKqO!zo+9 z%&9wJJA0+9elL*>N|rpD*?GL*uFD&IEC5jeylD$>T0JXtHXR!uBBzh~N z^&E+FI@W?|^yL{lffmdXPD(4D3^9S$5TkFybqI~6ZP=S=T)?X>gr!_yKA&4E$5vPY z%UD@C&f|DBWHUnz-55{hov2Zs;_5`bayk(H0&zWI*JKGl#qd6yZ8*bUz!iQ^Qx zQ?+`OZnV!%H@j5;N&KajLk=wBF&J#;9{AUZ&`1N3@Ioy@BL@oVq6f)K8=w9u4f3tR zT)AhH_J8*NLfyZ1rJQ6ikJL$K{vAp%t+VYuqqI$V=B_?cR0@^ z4l#EoD!#T_<3*)(M>lGXUZphOSgkQ>mcmNndYCR!N?Qb7tCY40I-rzx3VOzDg>}0G uU82Z`Kc&&_YCt9R9?S+J@c6Ee$9KYr)LK60S+G(P*(&5 zWPnZZ8$+bbHNq-ZWo!LyikNJvl|->jndnlO)b48b6Jts@A-l#%?XI=iim>OLdv5pZ z87fpYbKm)&bI(2Z-22|AZ%z2|KTSNA8vE@}gxvUq7?S%t#9VpuSyA=MsSXkAotQEV zW1(Tl7oP?A&Z8nFzkgIT3FDQY9~Ip*7p@*lXrsp{8c86%bm@8le~eh|xGMaM|K!CZ z;yZHLSH*n!{$GmkjaB^0r zkg|=0VMHHW4I|!W#1ox{lk&o>>EzO$nYE4O^8cO?i^eZE;;k`xp+n4=gTn++rNWeB zX58+u;M<;o&^Fo9DP}l0Y>yIT-IS9aAQBW`V)TnnVD%upEf$3*&0Nk-f$A^6CFZ6P z-4;a$-hdHrH{wR0ANJXv@3^@T%yo^F?K|B$8g>_)l$~*Mwr?1%iH`Pma$^z=ORg-? zkE7ku80FG{e!QGp8h1I@7!!DwWR04M-H6-X>IXW1D@gkj<^ldcySt%}{VG0JV~0fOp!kP7N)0Akv% zhB?>hP$Mhj`nJ)j9(wFd-sr-yneGokQJ8W3AnEoS@few>!B&r%>$Z*Y@fesTYi|@y z;FP@hglM@T9)ko$OUIXlBt5r?sfH-BIGU%JxkNt>v$U>-#uK7xLurbsOQ?yMt99#X zToonbWW^LFr#w5gOomH9E52&7GnZE z?MgE7V>rMnQjBONL(gPfqtV`|Sl9_-aY$l><4We#Mr$-!xd(|l9K_~a8h7#vqC>G0|$zW zllRd?#wpWDBgKI;g0#t1D@0ub6f>>W#RU?FiAU!q%k3*fqf6t66r6wrOg_e~(qyCHYpBO1CQdyOLUpcw-a+I1`0yFJ^^A&yG3Jadnzr#4z#>=JWH=Js7;4h|? zGUZ;;6x}q*5w!=#A>t9!`~g3(vxJ8Pk3)h-kjQ~M9yG>k!_y|`9V;k6PXzFau&5pd z!L3F^M39xSO%K7eTgx3g#GJK&hR)5*=Q9Ig&Mg|Ty{(w%3S4vslQ=a5}7nfoUh__&o|tU7CDkhiI5v(w_>cX-H+djn-HPEE>SbH+P76EfEqY2hCOBCRf`Q zw1GfI3ck5hG!!CKmYai~TM0viXNa|E&{!UR}cGL>{{Cvg_2Yo8BDHDGL zqT$q6>O2$;DeqL%b>U9c8)ywg(N;9c`p!rstuX8M*(FTGuVk2oETBVMn1$95^>@(} zDxpcWZEzb>AyLjoXzl(#t4?Wh}%DSXInE*D9yp%_^7P%|i5|bj> z;xOqdM>G)gIvA{o@MOILX!U%oj5h2p$fo5fT*i(^aPqX4boR26GIpDyrc4+qX}Q9w zNt(Z!ZCVL~(Kco5PDM=%X{4ksg;VA5*lJGnztw|xVSq_Ik`4Mq^3%GkpKN+c#jcly z-UNg85wbE+vX!JXOTwNrRC^U_fYt$6}p;7TF0yjTEe0nG86*JVyhUz>_MUK)m zuC@>`pV(-JP<%R7%5bKn$j+%QrJ(7EgB(+;yR7dLG?oppDSCDSeEy zOy4r$(v5Jm?Bo?$t_#=eK{hMuIE+|H;64VAi9!`?1G&WbD6D{XX*LyUSxQg+%bWP-4a(Q|=q36_85 z;&N>;ZYU8jSuEG&#Owj3!iDOk`VL*h5~^&%Y#@%NSoIBH2=`!7oNh-5s{(r_Cz@B4 z#j7lW{TjL!2ksGwQhSU#pq)vUt4Bgr583SUx?bUO^%-=z$=vVq%zX<6NzkO~e`)um z(uaClRkt?+J?OfyQ!BjM{lCzXZ!|^y4a#(wHpjvXz0fk@0~G(olpoX7;?7S zi#p*dJAz0K=&iLAj>dqHJJ*Oh-gF=au9pgRE$mWJmd~ycvnweum(iXs?og&BxwKxJ z6j#xZ~oPmSVX8+Jy>fo*LN*3Lq2VZTEfGVI?5opmX7?W z-HNGA@e4~VAiAcMm`{V7^%SH25&Z+9%j-b38JbC->Q6G7&yt zGspLA7ADeSR&CzRs|Z`_oFoCN%vh2ZONq0f2QQ^XgFKlQH3WvIC3?^x|Bx0lJ7FSl zX#`Hz_TYZ8GzC_iwjnW>zLa~`Jr!N>zgf6QNEPfvu1w;NhwoC zV&PInT4|ufk#~E%=#P1#u2`YUvwc{V%ARN+iDm@QU+T0?tK`(0pux0yoDA)YY2~22 z=y78?&sXbS6JyVXEf$yrK2z1yDA=?B6HrM9oLcvH0Y3%z5ufdT!DrF$0tEMN&EEs> zMMx~%fdTlNfw+=57X>^&u7>OiII(2Fh40mXv*)9LE8xXI)UAw24~i~!g`@zky(1VZ ziu%$T-D;zWkZTH}Iojl^gR0tR)KM2mY0+vAq7+IIZBG^GNQl~Ki>kmvMGfGkkz$6P z0be>?D6mV@`gq;N`*;V)_HitC^ocp!B0iZ=5Q>z`6&)2=D<>^eo!LbJA`$TmJy2A|uLjw}OPa4` zt!QqJ@WIP5IG)0L6SSWX2r^vDz8(N-3g^>n*?>3Ka;W}&EqgS1ooFoQX&#yylvpT< zjAWTc;yDJ3o65wb+OBG3E1wpgy_lAKRmJW|#gjz-IA#)Cd?DWBqE8TM;Px4tk_#6fcBd)R3lmp$n zr^3={Q&=FK>t%L>sG`XBZ(t?+_26kecyj}<&|hxg`2A@EFMzol*}EGzvT2+2;DL>7 z+KU@`fBm^8zMuzJY+`{iJ#h74=O&i?*e3PjO(%}&Sv_#q$jc{5^HhO@3tHQAuq#Z* z;ca3x7RZX(;pQ?bW0Mv0N1|;w38nSU6;IMEZmdvH^qjyhi-;6Xm_$?od4NY2Jj;Ly zk;-4jThOdgsf;Hn3FOgRIi!DcD`)F_w{qS2{jD6ODMLJ1I>a;5J;bwi`;fSX=1~qY z`x`^t{`{w=nYx*2R%~XPTQ_t0dw8>0yf_jme@!ODU(SV;4Af4L=u~an`Wyw8Txh31ZmGkSw zR?dqbXvjxfxeu(~CSoM#rfqD-&^Bg&d>adVeVeEwnqL5OI{kQW{dggWx(A#?Od(Acd4rbqYhnP17Z;H|hxB>$6BtTT(N~l(aQdvikHU&|| z1|jmxJH#Z465-nwUhS9wsh7RmxyNqVE#@zXgh0J)fsa^v19(>tHrVROCWm&jc@OOt zE!eEQw43MgtR8&2oBgiY!;wC-N7TjW@CI^dgHY=b?;G*Wk7)%?pRFTm$JDh3aLtyF z?%^Hd#2!`*V71l%b`R^R+RLF|x|eO~-OHMHXvo+0GW*MV@PVfJ<6h2;=KDllv_DO{ z)FY?uxLPpz`^4<>MXnzr-hoA>YLp!(v$bdH)p*ILxVi)T3`EG+?qi?m>BIYY&x5B$ z(K+DvI_3V+R&Qiv`#$!re;?P8J^MHmPwwMT`~Xnpu0sbppT}#Kw5@KZ|P1f%H9K@6RInZzJ=gIiB9*6^6?dBd}2R0rMGp6z7 zaN6db7J$u*N>)Mtq26!d4S?yXhTi6P6@Ptz7t}ikxDsACz>UY$`&s?6`#B_Q?q|z( z-_Kl6-7glUBARUKd~+ z7QCLt1WT%{_{||M=~o=)_$)s>lD*pwMzLFJLpgewJ$Ugj%X$AWPv##FvrmmjxEz>z zuLd>l1zjzB5L4kmuh&!Uj_eLn%7{K3?@?LqW20ok`bAFs`pC*=xIdbzfVb8|TBM%uhTc7o|^<}@Y6W{e4p)Jo$ z6SJ`-{$iR~jei%`ipTNqtF_{++&f)N#fJx{i^cf&^mLJ)j)IODZ?6@5Z$KGF%8^ww zL_6YF%@C_e(GlY(UvJ*}#peHhLeUtP5Z8{6^%};{Bm?j#A z&p`N|d5d&*Z{sUOE z2uvFUJ3swE$VaXg4NF&o=xzV3S&xlmHEIF><9|bZtsFifW=%)~p#CE{<{6Q!KJ+mn z)MCB<88NH++aukg#NxjHXj19(KVfe-QrvnZ)v( diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index 84e6ae6c4e5c1a045c4b996780efb79e632a9a23..be7835cf58717e30caf9bb864b0036cdd9651102 100644 GIT binary patch delta 238 zcmZ3pmg(MlrVV0Jlk>!s>d*OwF&Hy=6zQb%h3GKoq#J}gGq^B#Gq^HDGPIPv$mt2} znRT$6H+^Byr`Yp#zbjV+83aWDW%C%)88U%nDnmSjBSQd#CqpohUBplZ6io)QTFO9r zbp3P~nj+_ 10) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 510, "server limited"); @@ -32,7 +39,13 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN return false; } Protocol_Parse_HttpParseAnnouncement(lpszMsgBuffer, nMsgLen, &st_Announcement); - Database_SQLite_AnnouncementInsert(&st_Announcement); + if (st_AuthConfig.bDB) { + Database_SQLite_AnnouncementInsert(&st_Announcement); + } + else + { + Database_MYSQL_AnnouncementInsert(&st_Announcement); + } 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_Announcement.tszContext); @@ -43,7 +56,13 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN memset(&st_Announcement, '\0', sizeof(AUTHREG_ANNOUNCEMENT)); Protocol_Parse_HttpParseAnnouncement(lpszMsgBuffer, nMsgLen, &st_Announcement); - Database_SQLite_AnnouncementDelete(&st_Announcement); + if (st_AuthConfig.bDB) { + Database_SQLite_AnnouncementDelete(&st_Announcement); + } + else + { + Database_MYSQL_AnnouncementDelete(&st_Announcement); + } 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,删除公告成功.删除公告ID:%lld"), lpszClientAddr, st_Announcement.nID); @@ -53,7 +72,13 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN int nListCount = 0; AUTHREG_ANNOUNCEMENT** ppSt_Announcement; - Database_SQLite_AnnouncementList(&ppSt_Announcement, &nListCount); + if (st_AuthConfig.bDB) { + Database_SQLite_AnnouncementList(&ppSt_Announcement, &nListCount); + } + else + { + Database_MYSQL_AnnouncementList(&ppSt_Announcement, &nListCount); + } Protocol_Packet_HttpAnnouncement(tszSDBuffer, &nSDLen, &ppSt_Announcement, nListCount); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_Announcement, nListCount); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp index f066df2..fb33cee 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -17,7 +17,13 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedInsert(&st_Banned); + if (st_AuthConfig.bDB) { + Database_SQLite_BannedInsert(&st_Banned); + } + else + { + Database_MYSQL_BannedInsert(&st_Banned); + } 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,禁用的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); @@ -28,7 +34,13 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedDelete(&st_Banned); + if (st_AuthConfig.bDB) { + Database_SQLite_BannedDelete(&st_Banned); + } + else + { + Database_MYSQL_BannedDelete(&st_Banned); + } 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,删除禁用的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); @@ -44,7 +56,13 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L Protocol_Parse_HttpParseBanned2(lpszMsgBuffer, nMsgLen, &nPosStart, &nPosEnd); - Database_SQLite_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + if (st_AuthConfig.bDB) { + Database_SQLite_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + } + else + { + Database_MYSQL_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + } Protocol_Packet_HttpBanned(tszSDBuffer, &nSDLen, &ppSt_BannedUser, nCountUser, &ppSt_BannedAddr, nCountAddr); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_BannedAddr, nCountAddr); @@ -57,7 +75,13 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedUPDate(&st_Banned); + if (st_AuthConfig.bDB) { + Database_SQLite_BannedUPDate(&st_Banned); + } + else + { + Database_MYSQL_BannedUPDate(&st_Banned); + } 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,修改的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); 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 c4f257b..753a3b2 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 @@ -17,8 +17,15 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserTable.st_UserInfo); - if (!Database_SQLite_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable)) - { + + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable); + } + if (!bSuccess) { 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 信息失败,错误码:%lX"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName, DBModule_GetLastError()); @@ -63,7 +70,14 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L if (!bOnline) { //只有bOnline不是在线列表的时候才执行 - Database_SQLite_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + //判断是使用哪个数据库 + if (st_AuthConfig.bDB) { + Database_SQLite_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + } + else + { + Database_MYSQL_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + } } Protocol_Packet_HttpClientList(ptszMsgBuffer, &nSDLen, &ppSt_ListClient, nOnCount, &ppSt_UserInfo, nOffCount); @@ -104,8 +118,14 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseTable(lpszMsgBuffer, nMsgLen, &st_UserTable); - if (!Database_SQLite_UserSet(&st_UserTable)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserSet(&st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserSet(&st_UserTable); + } + if (!bSuccess) { 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 错误码:%lX"), lpszClientAddr, st_UserTable.st_UserInfo.tszUserName, DBModule_GetLastError()); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp index 94935d1..22e08b6 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp @@ -19,8 +19,14 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseAuth(lpszMsgBuffer, nMsgLen, &st_UserAuth); - if (!Database_SQLite_UserQuery(st_UserAuth.tszUserName, &st_UserTable)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserQuery(st_UserAuth.tszUserName, &st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserQuery(st_UserAuth.tszUserName, &st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user notfound"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("PASS客户端:%s,用户名:%s,登录失败,用户名不存在"), lpszClientAddr, st_UserAuth.tszUserName); @@ -43,7 +49,13 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); - Database_SQLite_UserLeave(&st_ProtocolTime); + if (st_AuthConfig.bDB) { + Database_SQLite_UserLeave(&st_ProtocolTime); + } + else + { + Database_MYSQL_UserLeave(&st_ProtocolTime); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -55,7 +67,13 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); - Database_SQLite_UserLeave(&st_ProtocolTime); + if (st_AuthConfig.bDB) { + Database_SQLite_UserLeave(&st_ProtocolTime); + } + else + { + Database_MYSQL_UserLeave(&st_ProtocolTime); + } 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("PASS客户端:%s,用户名:%s,超时通知成功"), lpszClientAddr, st_ProtocolTime.tszUserName); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp index 97bd0df..9cbefff 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp @@ -32,7 +32,13 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L return false; } AUTHREG_SERIALTABLE** ppSt_SerialTable; - Database_SQLite_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + if (st_AuthConfig.bDB) { + Database_SQLite_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + } + else + { + Database_MYSQL_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + } Protocol_Packet_HttpSerialList(ptszMsgBuffer, &nSDLen, &ppSt_SerialTable, nListCount); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); XEngine_Client_TaskSend(lpszClientAddr, ptszMsgBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -93,9 +99,15 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L return false; } //导入序列卡 - for (int i = 0; i < nSerialCount; i++) - { - Database_SQLite_SerialInsert(pptszSerialNumber[i]); + if (st_AuthConfig.bDB) { + for (int i = 0; i < nSerialCount; i++) {//导入序列卡 + Database_SQLite_SerialInsert(pptszSerialNumber[i]); + } + } + else { + for (int i = 0; i < nSerialCount; i++) {//导入序列卡 + Database_MYSQL_SerialInsert(pptszSerialNumber[i]); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialNumber, nSerialCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); @@ -108,9 +120,17 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L AUTHREG_SERIALTABLE** ppSt_SerialTable; Protocol_Parse_HttpParseSerial(lpszMsgBuffer, nMsgLen, &ppSt_SerialTable, &nListCount); - for (int i = 0; i < nListCount; i++) - { - Database_SQLite_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + if (st_AuthConfig.bDB) { + for (int i = 0; i < nListCount; i++) + { + Database_SQLite_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + } + } + else { + for (int i = 0; i < nListCount; i++) + { + Database_MYSQL_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); @@ -123,9 +143,17 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L AUTHREG_SERIALTABLE** ppSt_SerialTable; Protocol_Parse_HttpParseSerial(lpszMsgBuffer, nMsgLen, &ppSt_SerialTable, &nListCount); - for (int i = 0; i < nListCount; i++) - { - Database_SQLite_SerialPush(ppSt_SerialTable[i]); + if (st_AuthConfig.bDB) { + for (int i = 0; i < nListCount; i++) + { + Database_SQLite_SerialPush(ppSt_SerialTable[i]); + } + } + else { + for (int i = 0; i < nListCount; i++) + { + Database_MYSQL_SerialPush(ppSt_SerialTable[i]); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp index 86d7089..fd3c080 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp @@ -29,7 +29,13 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX int nListCount = 0; AUTHREG_TEMPVER** ppSt_AuthVer; - Database_SQLite_TryList(&ppSt_AuthVer, &nListCount); + if (st_AuthConfig.bDB) { + Database_SQLite_TryList(&ppSt_AuthVer, &nListCount); + } + else + { + Database_MYSQL_TryList(&ppSt_AuthVer, &nListCount); + } Protocol_Packet_HttpTryList(ptszMsgBuffer, &nSDLen, &ppSt_AuthVer, nListCount); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_AuthVer, nListCount); XEngine_Client_TaskSend(lpszClientAddr, ptszMsgBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -43,7 +49,14 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX memset(&st_VERTemp, '\0', sizeof(AUTHREG_TEMPVER)); Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - Database_SQLite_TryDelete(st_VERTemp.tszVSerial); + if (st_AuthConfig.bDB) { + Database_SQLite_TryDelete(st_VERTemp.tszVSerial); + } + else + { + Database_MYSQL_TryDelete(st_VERTemp.tszVSerial); + } + 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_VERTemp.tszVSerial); @@ -54,7 +67,13 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX memset(&st_VERTemp, '\0', sizeof(AUTHREG_TEMPVER)); Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - Database_SQLite_TrySet(&st_VERTemp); + if (st_AuthConfig.bDB) { + Database_SQLite_TrySet(&st_VERTemp); + } + else + { + Database_MYSQL_TrySet(&st_VERTemp); + } 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_VERTemp.tszVSerial); 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 6654cee..2172bb2 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 @@ -36,7 +36,13 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount); - Database_SQLite_UserDelete(st_UserInfo.tszUserName); + if (st_AuthConfig.bDB) { + Database_SQLite_UserDelete(st_UserInfo.tszUserName); + } + else + { + Database_MYSQL_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 成功,在线用户数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nListCount); @@ -60,8 +66,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); _tcsxcpy(st_Banned.tszUserName, st_UserTable.st_UserInfo.tszUserName); - if (Database_SQLite_BannedExist(&st_Banned)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_BannedExist(&st_Banned); + } + else { + bSuccess = Database_MYSQL_BannedExist(&st_Banned); + } + if (bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); 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_Banned.tszUserName); @@ -85,8 +97,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,注册失败,没有设置用户和密码"), lpszClientAddr); return false; } - if (!Database_SQLite_UserRegister(&st_UserTable)) - { + bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserRegister(&st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserRegister(&st_UserTable); + } + if (!bSuccess) { XLONG dwRet = DBModule_GetLastError(); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, dwRet, "user register is failed"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -113,14 +131,26 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParsePay(lpszMsgBuffer, nMsgLen, &st_UserPay); - if (!Database_SQLite_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber); + } + else { + bSuccess = Database_MYSQL_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "Serial number not available"); 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_UserPay.tszUserName, DBModule_GetLastError()); return false; } - Database_SQLite_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + if (st_AuthConfig.bDB) { + Database_SQLite_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + } + else + { + Database_MYSQL_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + } Session_Authorize_SetUser(&st_UserInfo); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -144,8 +174,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserInfo); - if (!Database_SQLite_UserQuery(st_UserInfo.tszUserName, &st_UserTable)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserQuery(st_UserInfo.tszUserName, &st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserQuery(st_UserInfo.tszUserName, &st_UserTable); + } + if (!bSuccess) { 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,找回密码失败,用户不存在"), lpszClientAddr, st_UserInfo.tszUserName); @@ -200,8 +236,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - if (Database_SQLite_TryQuery(&st_VERTemp)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_TryQuery(&st_VERTemp); + } + else { + bSuccess = Database_MYSQL_TryQuery(&st_VERTemp); + } + if (bSuccess) { __int64x nTimeSpan = 0; //根据方式来计算剩余时间 if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == st_VERTemp.enVMode) @@ -231,7 +273,13 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC //是否超过 if (nTimeSpan >= 0) { - Database_SQLite_TrySet(&st_VERTemp); + if (st_AuthConfig.bDB) { + Database_SQLite_TrySet(&st_VERTemp); + } + else + { + Database_MYSQL_TrySet(&st_VERTemp); + } 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,类型:%s,临时验证成功,剩余时间:%lld"), lpszClientAddr, st_VERTemp.tszVSerial, lpszXSerialType[st_VERTemp.enVMode], nTimeSpan); @@ -256,8 +304,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,序列号:%s,临时验证插入失败,因为服务器关闭了此功能"), lpszClientAddr, st_VERTemp.tszVSerial); return false; } - if (!Database_SQLite_TryInsert(&st_VERTemp)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_TryInsert(&st_VERTemp); + } + else { + bSuccess = Database_MYSQL_TryInsert(&st_VERTemp); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "Internal Server 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,临时验证插入失败,无法继续,错误:%X"), lpszClientAddr, st_VERTemp.tszVSerial, DBModule_GetLastError()); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index 78d426d..34784b8 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -40,6 +40,8 @@ using namespace std; #include #include #include +#include +#include #include "../../XAuth_Protocol.h" #include "../../AuthorizeModule_Configure/Config_Define.h" #include "../../AuthorizeModule_Configure/Config_Error.h" diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 1240c6b..5db9568 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -63,8 +63,14 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_BannedExist(&st_Banned); //IP地址是否在黑名单 + } + else { + bSuccess = Database_MYSQL_BannedExist(&st_Banned);//IP地址是否在黑名单 + } + if (bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 56e5781..80b86d1 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -164,7 +164,15 @@ bool XEngine_SendMsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, } else if (XENGINE_AUTH_APP_NETTYPE_TCP == nNetType) { - NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen); + if (NULL == lpszPass) + { + NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen); + } + else + { + OPenSsl_XCrypto_Encoder(lpszMsgBuffer, &nMsgLen, (XBYTE*)ptszMsgBuffer, lpszPass); + NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, ptszMsgBuffer, nMsgLen); + } } else { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index af26d11..5d6c9c4 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -61,8 +61,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_BannedExist(&st_Banned); //是否在黑名单 + } + else { + bSuccess = Database_MYSQL_BannedExist(&st_Banned);//是否在黑名单 + } + if (bSuccess) { pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); @@ -132,8 +138,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } else { - if (!Database_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable)) - { + bool bSuccess = false; + if (st_AuthConfig.bDB) { + bSuccess = Database_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable); + } + else { + bSuccess = Database_MYSQL_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable); + } + if (!bSuccess) { pSt_ProtocolHdr->wReserve = 251; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); @@ -268,7 +280,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1; _xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime); - Database_SQLite_UserSet(&st_UserTable); + if (st_AuthConfig.bDB) { + Database_SQLite_UserSet(&st_UserTable); + } + else + { + Database_MYSQL_UserSet(&st_UserTable); + + } } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) { @@ -278,7 +297,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1; _xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime); BaseLib_OperatorTime_TimeToStr(st_UserTable.st_UserInfo.tszLoginTime); - Database_SQLite_UserSet(&st_UserTable); + if (st_AuthConfig.bDB) { + Database_SQLite_UserSet(&st_UserTable); + } + else + { + Database_MYSQL_UserSet(&st_UserTable); + + } } } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp index 40e8fc8..9750b59 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp @@ -52,7 +52,13 @@ void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserNam _tcsxcpy(st_AuthTime.tszUserName, lpszUserName); _tcsxcpy(st_AuthTime.tszUserAddr, lpszUserAddr); - Database_SQLite_UserLeave(&st_AuthTime); + if (st_AuthConfig.bDB) { + Database_SQLite_UserLeave(&st_AuthTime); + } + else + { + Database_MYSQL_UserLeave(&st_AuthTime); + } } void CALLBACK XEngine_TaskEvent_Token(XNETHANDLE xhToken, XPVOID lParam) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index ef866c7..8f08465 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -50,7 +50,13 @@ void ServiceApp_Stop(int signo) Session_Authorize_Destroy(); Session_Token_Destroy(); AuthHelp_DynamicCode_Destory(); - Database_SQLite_Destroy(); + if (st_AuthConfig.bDB) { + Database_SQLite_Destroy();//销毁DB数据库服务 + } + else + { + Database_MYSQL_Destroy();// 待处理 销毁MYsql数据库服务 + } exit(0); } } @@ -138,13 +144,26 @@ int main(int argc, char** argv) goto XENGINE_EXITAPP; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化内存池成功")); - - if (!Database_SQLite_Init(st_AuthConfig.st_XSql.tszSQLite)) + + /*********** 初始化 MySql/DB数据库 ***********/ + if (st_AuthConfig.bDB) + { //SQLite数据库 + if (!Database_SQLite_Init(st_AuthConfig.st_XSql.tszSQLite)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化DB数据库服务失败,错误:%lX"), DBModule_GetLastError()); + goto XENGINE_EXITAPP; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化DB数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.tszSQLite); + } + else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化数据库服务失败,错误:%lX"), DBModule_GetLastError()); - goto XENGINE_EXITAPP; + if (!Database_MYSQL_Init((DATABASE_MYSQL_CONNECTINFO*)&st_AuthConfig.st_XSql)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化MySql数据库失败,错误:%lX"), DBModule_GetLastError()); + goto XENGINE_EXITAPP; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化MySql数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.tszDBName); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.tszSQLite); if (!Session_Authorize_Init(XEngine_TaskEvent_Client)) { @@ -332,7 +351,14 @@ XENGINE_EXITAPP: Session_Authorize_Destroy(); Session_Token_Destroy(); AuthHelp_DynamicCode_Destory(); - Database_SQLite_Destroy(); + + if (st_AuthConfig.bDB) { + Database_SQLite_Destroy();//销毁DB数据库服务 + } + else + { + Database_MYSQL_Destroy();// 待处理 销毁MYsql数据库服务 + } } #ifdef _WINDOWS WSACleanup(); diff --git a/XEngine_Source/dllmain.cpp b/XEngine_Source/dllmain.cpp new file mode 100644 index 0000000..daed8c8 --- /dev/null +++ b/XEngine_Source/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/framework.h b/XEngine_Source/framework.h new file mode 100644 index 0000000..80cbbc9 --- /dev/null +++ b/XEngine_Source/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/pch.cpp b/XEngine_Source/pch.cpp new file mode 100644 index 0000000..7cfd680 --- /dev/null +++ b/XEngine_Source/pch.cpp @@ -0,0 +1,60 @@ +#include "pch.h" +#include "AuthClient_Connector/AuthClient_Connector.h" +#include "AuthClient_HTTPVer/AuthClient_HTTPVer.h" +/******************************************************************** +// Created: 2023/11/15 11:28:22 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\pch.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +bool AuthClient_IsErrorOccur = false; +XLONG AuthClient_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CAuthClient_Connector m_Connector; +CAuthClient_HTTPVer m_HTTPVer; +////////////////////////////////////////////////////////////////////////// +// 导出的函数 +////////////////////////////////////////////////////////////////////////// +extern "C" XLONG AuthClient_GetLastError(int* pInt_SysError) +{ + if (NULL != pInt_SysError) + { + *pInt_SysError = errno; + } + return AuthClient_dwErrorCode; +} +/************************************************************************/ +/* 验证客户端导出函数 */ +/************************************************************************/ +extern "C" bool AuthClient_Connector_Connect(LPCXSTR lpszClientAddr, int nPort, LPCXSTR lpszPass) +{ + return m_Connector.AuthClient_Connector_Connect(lpszClientAddr, nPort, lpszPass); +} +extern "C" bool AuthClient_Connector_Close() +{ + return m_Connector.AuthClient_Connector_Close(); +} +extern "C" bool AuthClient_Connector_GetAuth(bool* pbAuth) +{ + return m_Connector.AuthClient_Connector_GetAuth(pbAuth); +} +extern "C" bool AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, int nDYCode, XNETHANDLE xhToken) +{ + return m_Connector.AuthClient_Connector_Login(lpszUser, lpszPass, nDYCode, xhToken); +} +/************************************************************************/ +/* 临时验证函数 */ +/************************************************************************/ +extern "C" bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) +{ + return m_HTTPVer.AuthClient_HTTPVer_TryRequest(lpszURLAddr); +} +extern "C" bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE * pxhToken, int* pInt_Timeout) +{ + return m_HTTPVer.AuthClient_HTTPVer_GetDCode(lpszURLAddr, pInt_DYCode, pxhToken, pInt_Timeout); +} \ No newline at end of file diff --git a/XEngine_Source/pch.h b/XEngine_Source/pch.h new file mode 100644 index 0000000..74f40fa --- /dev/null +++ b/XEngine_Source/pch.h @@ -0,0 +1,80 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +// 添加要在此处预编译的标头 +#ifdef _MSC_BUILD +#include "framework.h" +#include +#endif +#endif //PCH_H +#include "../XAuth_BuildSwitch.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_TCP) +#include +#include +#include +#include +#include +#include +#include "../XAuth_Protocol.h" +#endif +#if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) +#include +#include +#include +#include +#endif +#include "AuthClient_Define.h" +#include "AuthClient_Error.h" +using namespace std; +/******************************************************************** +// Created: 2023/11/15 10:37:19 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client\pch.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Client +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 公有头文件 +// History: +*********************************************************************/ +extern bool AuthClient_IsErrorOccur; +extern XLONG AuthClient_dwErrorCode; + + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl") +#pragma comment(lib,"XEngine_Client/XClient_Socket") +#pragma comment(lib,"XEngine_Client/XClient_APIHelp") +#pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi") +#ifdef _DEBUG +#ifdef _WIN64 +#pragma comment(lib,"../x64/Debug/jsoncpp") +#else +#pragma comment(lib,"../Debug/jsoncpp") +#endif +#else +#ifdef _WIN64 +#pragma comment(lib,"../x64/Release/jsoncpp") +#else +#pragma comment(lib,"../Release/jsoncpp") +#endif +#endif +#endif \ No newline at end of file -- Gitee