diff --git a/CHANGELOG b/CHANGELOG index 7bf1df5f5d5da72b978c366fe06e0901fe27e2f8..76f5c8ed08860a5131c12c8a2876c83a1c4b81f5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,15 @@ +XEngine_APIService V2.8.0.1001 + +添加:二维码识别与创建功能 +添加:网络测试与数据验证功能 +修改:现在错误请求会响应 +修正:http请求的日志打印标记不正确 + +added:qr code parse and create +added:network test +modify:reply failed requestion now +fixed:http request log flag is incorrent +====================================================================================== XEngine_APIService V2.7.0.1001 增加:日志信息操作API相关函数 diff --git a/README.en.md b/README.en.md index faea26eddf2d740d0ceee0af0c22c97b15927cae..dcb6ef891cdbf637bf623f7d04176c2b57fd0e71 100644 --- a/README.en.md +++ b/README.en.md @@ -33,12 +33,12 @@ Support privatization deployment, free, safe, open source, controllable 13. Administrative zip code 14. Bank card verification 15. Exchange rate calculation (planned) -16. QR code generation and parse (planned) +16. QR code generation and parse 17. Simplified and Traditional Conversion 18. Twenty-four solar terms (planned) 19. Xinhua Dictionary 20. Metering Conversion -21. CDKey Creator +21. network test 22. Distributed lock 23. short url creator(planned) 24. local system time @@ -64,7 +64,7 @@ MYSQL database version 8.0 or above is required. Create a table through CreateDa Modify the database configuration in XSQL in the configuration file to your #### Windows -need to vcpkg configure third-part env.refer vcpkg install guide.after installed and execution:vcpkg.exe install lua lua:x64-windows opencc opencc:x64-windows +need to vcpkg configure third-part env.refer vcpkg install guide.after installed and execution:vcpkg.exe install lua lua:x64-windows opencc opencc:x64-windows opencv[contrib] libqrencode opencv[contrib]:x64-windows libqrencode:x64-windows use vs open and compile,suport windows 7sp1 and above Just Run it @@ -176,29 +176,6 @@ api:http://app.xyry.org:5501/api?function=translation¶ms1=中国¶ms2=0 "msg":"success" } ``` -Authorize CDKey -Api:http://app.xyry.org:5501/api?function=cdkey¶ms1=0 -```json -{ - "tszAddr":"服务器地址", - "nPort":5000, - "st_AuthAppInfo":{ - "tszAppName":"自定义名称", - "tszAppVer":"自定义版本" - }, - "st_AuthRegInfo":{ - "tszHardware":"硬件吗", - "enSerialType":1, - "enRegType":1, - "enHWType":1 - }, - "st_AuthUserInfo":{ - "tszUserName":"注册的用户名", - "tszUserContact":"联系方式", - "tszCustom":"自定义,可选参数" - } -} -``` Distributed Lock Api:http://app.xyry.org:5501/api?function=lock¶ms1=1000154321¶ms2=1 ```json @@ -210,6 +187,27 @@ Api:http://app.xyry.org:5501/api?function=lock¶ms1=1000154321¶ms2=1 "msg":"success" } ``` +ZIPCode +Api:http://app.xyry.org:5501/api?function=zipcode¶ms1=0 +```json +{ + "nZipCode":100010 +} +``` +Log +Api:http://app.xyry.org:5501/api?function=log¶ms1=1 +```json +{ + "tszTableName":"xengine", + "tszLogBuffer":"d12d", + "nLogSize":4, + "tszFileName":"file.cpp", + "tszFuncName":"xengine_file_insert", + "tszLogTimer":"2023-01-13 22:10:01", + "nLogLine":102, + "nLogLevel":4 +} +``` ## Participate in contribution I hope you will submit more code to participate in the contribution diff --git a/README.md b/README.md index e666033d9252a06cab166c0282fc0e44e2a9bbcf..836a479eb696784ccc69fb1122e8c76b39550c65 100644 --- a/README.md +++ b/README.md @@ -33,12 +33,12 @@ c c++ interface api service 13. 行政邮编 14. 银行卡验证 15. 汇率计算(计划中) -16. 二维码生成解析(计划中) +16. 二维码生成解析 17. 简繁转换 18. 二十四节气(计划中) 19. 新华词典 20. 计量转换 -21. CDKey创建支持 +21. 网络测试 22. 分布式锁API 23. 短连接生成(计划中) 24. 本地标准时间 @@ -64,12 +64,12 @@ macos执行:./XEngine_LINEnv.sh -i 3 修改配置文件里面XSQL里面的数据库配置为你的 #### Windows -需要vcpkg配置第三方环境,具体参考vcpkg安装方式,安装好后执行:vcpkg.exe install lua lua:x64-windows opencc opencc:x64-windows +需要vcpkg配置第三方环境,具体参考vcpkg安装方式,安装好后执行:vcpkg.exe install lua lua:x64-windows opencc opencc:x64-windows opencv[contrib] libqrencode opencv[contrib]:x64-windows libqrencode:x64-windows 使用VS打开并且编译,支持WINDOWS 7SP1以上系统 直接运行即可 #### Linux -ubuntu:sudo apt install liblua5.3-dev libopencc-dev +ubuntu:sudo apt install liblua5.3-dev libopencc-dev libopencv-dev libopencv-contrib-dev libqrencode-dev centos:需要自己编译 Linux使用Makefile编译,UBUNTU20.04 x64或者CENTOS8 x64 在控制台运行 @@ -174,29 +174,6 @@ make FLAGS=CleanAll 清理编译 "msg":"success" } ``` -CDKey授权 -接口:http://app.xyry.org:5501/api?function=cdkey¶ms1=0 -```json -{ - "tszAddr":"服务器地址", - "nPort":5000, - "st_AuthAppInfo":{ - "tszAppName":"自定义名称", - "tszAppVer":"自定义版本" - }, - "st_AuthRegInfo":{ - "tszHardware":"硬件吗", - "enSerialType":1, - "enRegType":1, - "enHWType":1 - }, - "st_AuthUserInfo":{ - "tszUserName":"注册的用户名", - "tszUserContact":"联系方式", - "tszCustom":"自定义,可选参数" - } -} -``` 分布式锁 接口:http://app.xyry.org:5501/api?function=lock¶ms1=1000154321¶ms2=1 ```json @@ -208,6 +185,27 @@ CDKey授权 "msg":"success" } ``` +行政邮编 +接口:http://app.xyry.org:5501/api?function=zipcode¶ms1=0 +```json +{ + "nZipCode":100010 +} +``` +日志操作 +接口:http://app.xyry.org:5501/api?function=log¶ms1=1 +```json +{ + "tszTableName":"xengine", + "tszLogBuffer":"d12d", + "nLogSize":4, + "tszFileName":"file.cpp", + "tszFuncName":"xengine_file_insert", + "tszLogTimer":"2023-01-13 22:10:01", + "nLogLine":102, + "nLogLevel":4 +} +``` ## 参与贡献 希望大家多多提交代码参与贡献 diff --git a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.cpp b/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.cpp deleted file mode 100644 index 1679b11fa6c7cc5e4215f9e7f40d3fd52d8a6148..0000000000000000000000000000000000000000 --- a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#ifdef _MSC_BUILD -#include -#include -#pragma comment(lib,"Ws2_32") -#pragma comment(lib,"jsoncpp") -#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") -#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl") -#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIClient") -#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Authorize") -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//需要优先配置XEngine -//WINDOWS支持VS2022 x64 debug 编译调试 -//linux::g++ -std=c++17 -Wall -g APPClient_CDKeyExample.cpp -o APPClient_CDKeyExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_NetHelp -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -lXEngine_BaseLib -lXEngine_OPenSsl -lNetHelp_APIClient -lHelpComponents_Authorize -//macos::g++ -std=c++17 -Wall -g APPClient_CDKeyExample.cpp -o APPClient_CDKeyExample.exe -lXEngine_BaseLib -lXEngine_OPenSsl -lNetHelp_APIClient -lHelpComponents_Authorize - -int main() -{ -#ifdef _MSC_BUILD - WSADATA st_WSAData; - WSAStartup(MAKEWORD(2, 2), &st_WSAData); -#endif - int nLen = 0; - int nCode = 0; - LPCTSTR lpszCreateUrl = _T("http://127.0.0.1:5501/api?function=cdkey¶ms1=0"); - - Json::Value st_JsonRoot; - Json::Value st_JsonAPPInfo; - Json::Value st_JsonREGInfo; - Json::Value st_JsonUserInfo; - st_JsonRoot["tszAddr"] = "http://app.xyry.org"; - st_JsonRoot["nPort"] = 5501; - - st_JsonAPPInfo["tszAppName"] = "XEngine"; - st_JsonAPPInfo["tszAppVer"] = "1.0.0.1001"; - - st_JsonREGInfo["tszHardware"] = "5501012NE21N"; - st_JsonREGInfo["enSerialType"] = 3; - st_JsonREGInfo["enRegType"] = 2; - st_JsonREGInfo["enHWType"] = 1; - - st_JsonUserInfo["tszUserName"] = "qyt"; - st_JsonUserInfo["tszUserContact"] = "486179@qq.com"; - - st_JsonRoot["st_AuthAppInfo"] = st_JsonAPPInfo; - st_JsonRoot["st_AuthRegInfo"] = st_JsonREGInfo; - st_JsonRoot["st_AuthUserInfo"] = st_JsonUserInfo; - - TCHAR* ptszCreateBuffer = NULL; - TCHAR* ptszAuthBuffer = NULL; - if (!APIClient_Http_Request(_T("POST"), lpszCreateUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszCreateBuffer, &nLen)) - { - printf("发送投递失败!\n"); - return 0; - } - printf("接受到数据,大小:%d,内容:%s\n", nLen, ptszCreateBuffer); - - TCHAR tszMsgBuffer[4096]; - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - //你也可以通过授权模块的API函数来读内存,都一回事,这里为了方便直接写了,请求分钟卡,拥有10分钟,也可以写自定义时间格式 - BaseLib_OperatorFile_WriteProfileFromMemory(ptszCreateBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszCreateBuffer); - - LPCTSTR lpszAuthUrl = _T("http://127.0.0.1:5501/api?function=cdkey¶ms1=1¶ms2=123123"); - if (!APIClient_Http_Request(_T("POST"), lpszAuthUrl, tszMsgBuffer, &nCode, &ptszAuthBuffer, &nLen)) - { - printf("发送投递失败!\n"); - return 0; - } - //ptszAuthBuffer 写文件,然后验证即可.如下所示 - //step 1.解密 - CHAR tszCodecBuffer[4096]; - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - OPenSsl_XCrypto_Decoder(ptszAuthBuffer, &nLen, tszCodecBuffer, "123123"); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszAuthBuffer); - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); - //step 2.转换格式 - XENGINE_AUTHORIZE_LOCAL st_Authorize; - memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); - - Authorize_Local_ReadMemory(tszCodecBuffer, nLen, &st_Authorize); - //step 3.判断您是否超时 - if (Authorize_Local_GetLeftTimer(&st_Authorize)) - { - printf("ok\n"); - } - else - { - printf("timeout\n"); - } -#ifdef _MSC_BUILD - WSACleanup(); -#endif - return 0; -} \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.cpp b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ac336c4fe272ad52cb5562a59eeb23a1ed9dd2c4 --- /dev/null +++ b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.cpp @@ -0,0 +1,95 @@ +#ifdef _MSC_BUILD +#include +#include +#pragma comment(lib,"Ws2_32") +#pragma comment(lib,"jsoncpp") +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIClient") +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//需要优先配置XEngine +//WINDOWS支持VS2022 x64 debug 编译调试 +//linux::g++ -std=c++17 -Wall -g APPClient_QRExample.cpp -o APPClient_QRExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_NetHelp -lXEngine_BaseLib -lNetHelp_APIClient +//macos::g++ -std=c++17 -Wall -g APPClient_QRExample.cpp -o APPClient_QRExample.exe -lXEngine_BaseLib -lNetHelp_APIClient + +#define QRCODE_BUFFER_SIZE 1024 * 1024 * 10 + +LPCTSTR lpszFileName = _T("D:\\XEngine_APIService\\XEngine_APPClient\\x64\\Debug\\1.png"); + +int test_create() +{ + int nLen = 0; + int nCode = 0; + LPCTSTR lpszAPIUrl = _T("http://127.0.0.1:5501/api?function=qrcode¶ms1=0"); + + Json::Value st_JsonRoot; + st_JsonRoot["tszMsgBuffer"] = lpszAPIUrl; + st_JsonRoot["tszFmtBuffer"] = ".png"; + + TCHAR* ptszMsgBuffer = NULL; + if (!APIClient_Http_Request(_T("POST"), lpszAPIUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + { + printf("发送投递失败!\n"); + return 0; + } + FILE* pSt_File = fopen(lpszFileName, "wb"); + if (NULL != pSt_File) + { + fwrite(ptszMsgBuffer, 1, nLen, pSt_File); + fclose(pSt_File); + } + printf("接受到数据,大小:%d,内容:%s\n", nLen, ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + + return 0; +} +int test_parse() +{ + int nCode = 0; + TCHAR* ptszMsgBuffer = (TCHAR*)malloc(QRCODE_BUFFER_SIZE); + + LPCTSTR lpszAPIUrl = _T("http://127.0.0.1:5501/api?function=qrcode¶ms1=1"); + FILE* pSt_File = fopen(lpszFileName, "rb"); + if (NULL != pSt_File) + { + LPCTSTR lpszCustomHdr = _T("Content-Type: image/png\r\n"); + memset(ptszMsgBuffer, '\0', QRCODE_BUFFER_SIZE); + int nRet = fread(ptszMsgBuffer, 1, QRCODE_BUFFER_SIZE, pSt_File); + + TCHAR* ptszBodyBuffer = NULL; + if (!APIClient_Http_Request(_T("POST"), lpszAPIUrl, ptszMsgBuffer, &nCode, &ptszBodyBuffer, &nRet, lpszCustomHdr)) + { + printf("发送投递失败!\n"); + return 0; + } + printf("接受到数据,大小:%d,内容:%s\n", nRet, ptszBodyBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszBodyBuffer); + } + return 0; +} + +int main() +{ +#ifdef _MSC_BUILD + WSADATA st_WSAData; + WSAStartup(MAKEWORD(2, 2), &st_WSAData); +#endif + test_create(); + test_parse(); + +#ifdef _MSC_BUILD + WSACleanup(); +#endif + return 0; +} \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..af544fa2f6bf5df15933c86420f2eb0ec4664bae --- /dev/null +++ b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {2c532e9a-6f98-425d-8d44-db3ae2afda5a} + APPClientQRExample + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);../../XEngine_Source/XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);../../XEngine_Source/x64/Debug;$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj.filters b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj.filters similarity index 94% rename from XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj.filters rename to XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj.filters index 486d4d2d5d02a1b9ffac4fedddb7e955a6859a0d..8633784204c713a2714fe601533e3f778277320d 100644 --- a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj.filters +++ b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj.filters @@ -15,7 +15,7 @@ - + 源文件 diff --git a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj.user b/XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj.user similarity index 100% rename from XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj.user rename to XEngine_APPClient/APPClient_QRExample/APPClient_QRExample.vcxproj.user diff --git a/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.cpp b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ec72aa417bf6852360e715e0e5f350942928ac06 --- /dev/null +++ b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.cpp @@ -0,0 +1,106 @@ +#ifdef _MSC_BUILD +#include +#include +#pragma comment(lib,"Ws2_32") +#pragma comment(lib,"jsoncpp") +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIClient") +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//需要优先配置XEngine +//WINDOWS支持VS2022 x64 debug 编译调试 +//linux::g++ -std=c++17 -Wall -g APPClient_TestExample.cpp -o APPClient_TestExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_NetHelp -lXEngine_BaseLib -lNetHelp_APIClient +//macos::g++ -std=c++17 -Wall -g APPClient_TestExample.cpp -o APPClient_TestExample.exe -lXEngine_BaseLib -lNetHelp_APIClient + +XNETHANDLE xhToken = 0; +#define QRCODE_BUFFER_SIZE 1024 * 1024 * 10 +LPCTSTR lpszFileName = _T("D:\\XEngine_APIService\\XEngine_APPClient\\x64\\Debug\\1.png"); + +int test_create() +{ + int nLen = 0; + int nCode = 0; + LPCTSTR lpszAPIUrl = _T("http://127.0.0.1:5501/api?function=test¶ms1=0"); + + Json::Value st_JsonRoot; + st_JsonRoot["tszAPIUrl"] = "http://127.0.0.1:5501/api?function=report¶ms1=0"; + st_JsonRoot["bTCP"] = true; + st_JsonRoot["bConn"] = true; + st_JsonRoot["tszAddr"] = "127.0.0.1"; + st_JsonRoot["nPort"] = 5501; + st_JsonRoot["nCloseWaitContTime"] = 2000; + st_JsonRoot["nConnectCount"] = 2; + st_JsonRoot["nConnectTest"] = 1; + st_JsonRoot["nContWaitTime"] = 1000; + + TCHAR* ptszMsgBuffer = NULL; + if (!APIClient_Http_Request(_T("POST"), lpszAPIUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + { + printf("发送投递失败!\n"); + return 0; + } + printf("接受到数据,大小:%d,内容:%s\n", nLen, ptszMsgBuffer); + + st_JsonRoot.clear(); + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + //解析JSON + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nLen, &st_JsonRoot, &st_JsonError)) + { + return 0; + } + Json::Value st_JsonObject = st_JsonRoot["data"]; + if (!st_JsonObject["xhToken"].isNull()) + { + xhToken = st_JsonObject["xhToken"].asInt64(); + } + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return 0; +} +int test_delete() +{ + int nLen = 0; + int nCode = 0; + TCHAR* ptszMsgBuffer; + Json::Value st_JsonRoot; + st_JsonRoot["bTCP"] = true; + st_JsonRoot["bConn"] = true; + st_JsonRoot["xhToken"] = xhToken; + + LPCTSTR lpszAPIUrl = _T("http://127.0.0.1:5501/api?function=test¶ms1=1"); + if (!APIClient_Http_Request(_T("POST"), lpszAPIUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + { + printf("发送投递失败!\n"); + return 0; + } + printf("接受到数据,大小:%d,内容:%s\n", nLen, ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return 0; +} + +int main() +{ +#ifdef _MSC_BUILD + WSADATA st_WSAData; + WSAStartup(MAKEWORD(2, 2), &st_WSAData); +#endif + test_create(); + test_delete(); + +#ifdef _MSC_BUILD + WSACleanup(); +#endif + return 0; +} \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj similarity index 97% rename from XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj rename to XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj index 6894c53b24fb3768f207d8336d7c5e0d1162f070..b33903662f22cce5377af851a355d6fc9a697bba 100644 --- a/XEngine_APPClient/APPClient_CDKeyExample/APPClient_CDKeyExample.vcxproj +++ b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj @@ -21,8 +21,8 @@ 16.0 Win32Proj - {155b430d-7cda-488c-b3ae-333d179d1943} - APPClientCDKeyExample + {c5f955b3-2701-4c5a-8f41-92ce536b8913} + APPClientTestExample 10.0 @@ -131,7 +131,7 @@ - + diff --git a/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.filters b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..ca99a949960ad94eaedc8d425bc88d820ce62def --- /dev/null +++ b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {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 + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.user b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..88a550947edbc3c5003a41726f0749201fdb6822 --- /dev/null +++ b/XEngine_APPClient/APPClient_TestExample/APPClient_TestExample.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_APPClient/XEngine_APPClient.sln b/XEngine_APPClient/XEngine_APPClient.sln index 3bd098d0f35a1557404c75a79d6355c7887496ba..06fccb504e0f6e1fa1078f6762ab48c9d6ac5387 100644 --- a/XEngine_APPClient/XEngine_APPClient.sln +++ b/XEngine_APPClient/XEngine_APPClient.sln @@ -17,8 +17,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_TranslationExampl EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_P2PExample", "APPClient_P2PExample\APPClient_P2PExample.vcxproj", "{D3C54AFE-44F5-4D2F-B4C6-7B3F9FAED95B}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_CDKeyExample", "APPClient_CDKeyExample\APPClient_CDKeyExample.vcxproj", "{155B430D-7CDA-488C-B3AE-333D179D1943}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_LockExample", "APPClient_LockExample\APPClient_LockExample.vcxproj", "{6EC0E212-E8DF-4DD2-8DA5-2BCFD18405F9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_ZIPCodeExample", "APPClient_ZIPCodeExample\APPClient_ZIPCodeExample.vcxproj", "{4D665697-A449-490F-8CE6-CED6752EE128}" @@ -29,6 +27,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_LibPluginExample" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_XLogExample", "APPClient_XLogExample\APPClient_XLogExample.vcxproj", "{FF3EF369-C7A8-4866-8CF3-FC38A36EE6AF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_QRExample", "APPClient_QRExample\APPClient_QRExample.vcxproj", "{2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_TestExample", "APPClient_TestExample\APPClient_TestExample.vcxproj", "{C5F955B3-2701-4C5A-8F41-92CE536B8913}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -93,14 +95,6 @@ Global {D3C54AFE-44F5-4D2F-B4C6-7B3F9FAED95B}.Release|x64.Build.0 = Release|x64 {D3C54AFE-44F5-4D2F-B4C6-7B3F9FAED95B}.Release|x86.ActiveCfg = Release|Win32 {D3C54AFE-44F5-4D2F-B4C6-7B3F9FAED95B}.Release|x86.Build.0 = Release|Win32 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Debug|x64.ActiveCfg = Debug|x64 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Debug|x64.Build.0 = Debug|x64 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Debug|x86.ActiveCfg = Debug|Win32 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Debug|x86.Build.0 = Debug|Win32 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Release|x64.ActiveCfg = Release|x64 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Release|x64.Build.0 = Release|x64 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Release|x86.ActiveCfg = Release|Win32 - {155B430D-7CDA-488C-B3AE-333D179D1943}.Release|x86.Build.0 = Release|Win32 {6EC0E212-E8DF-4DD2-8DA5-2BCFD18405F9}.Debug|x64.ActiveCfg = Debug|x64 {6EC0E212-E8DF-4DD2-8DA5-2BCFD18405F9}.Debug|x64.Build.0 = Debug|x64 {6EC0E212-E8DF-4DD2-8DA5-2BCFD18405F9}.Debug|x86.ActiveCfg = Debug|Win32 @@ -141,6 +135,22 @@ Global {FF3EF369-C7A8-4866-8CF3-FC38A36EE6AF}.Release|x64.Build.0 = Release|x64 {FF3EF369-C7A8-4866-8CF3-FC38A36EE6AF}.Release|x86.ActiveCfg = Release|Win32 {FF3EF369-C7A8-4866-8CF3-FC38A36EE6AF}.Release|x86.Build.0 = Release|Win32 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Debug|x64.ActiveCfg = Debug|x64 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Debug|x64.Build.0 = Debug|x64 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Debug|x86.ActiveCfg = Debug|Win32 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Debug|x86.Build.0 = Debug|Win32 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Release|x64.ActiveCfg = Release|x64 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Release|x64.Build.0 = Release|x64 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Release|x86.ActiveCfg = Release|Win32 + {2C532E9A-6F98-425D-8D44-DB3AE2AFDA5A}.Release|x86.Build.0 = Release|Win32 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Debug|x64.ActiveCfg = Debug|x64 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Debug|x64.Build.0 = Debug|x64 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Debug|x86.ActiveCfg = Debug|Win32 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Debug|x86.Build.0 = Debug|Win32 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Release|x64.ActiveCfg = Release|x64 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Release|x64.Build.0 = Release|x64 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Release|x86.ActiveCfg = Release|Win32 + {C5F955B3-2701-4C5A-8F41-92CE536B8913}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 5693a93c2f7e0b2f5d58d4e80c9f67dc25e9165b..7e53a8f39ef53d3b2a25a50b14e54e57e0cddeda 100644 Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 63302e6ab4753eb92a2bcd7aacf6525a29f62da9..57c0df5639148de3edb78b9ff99b6399752b26df 100644 Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 1f7837b4d0adf38af7363b621a6d031cbf7e1f91..57b29fae4747b00789d5302850a98284a6ef7bc9 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -33,7 +33,12 @@ "tszPluginLib":"./XEngine_Config/XEngine_PluginLib.json", "tszPluginLua":"./XEngine_Config/XEngine_PluginLua.json" }, + "XConfig":{ + "tszConfigOPencc":"./XEngine_Config/XEngine_OPenccConfig.json", + "tszConfigQRCode":"./XEngine_Config/XEngine_QRCode.json" + }, "XVer":[ + "2.8.0.1001 Build20230207", "2.7.0.1001 Build20230117", "2.6.1.1001 Build20221213", "2.6.0.1001 Build20221212", diff --git a/XEngine_Release/XEngine_Config/XEngine_QRCode.json b/XEngine_Release/XEngine_Config/XEngine_QRCode.json new file mode 100644 index 0000000000000000000000000000000000000000..3592c863be5e074d91087a29fdfe778fd03d1191 --- /dev/null +++ b/XEngine_Release/XEngine_Config/XEngine_QRCode.json @@ -0,0 +1,6 @@ +{ + "tszModelDetect":"./XEngine_Config/qrmodel/detect.caffemodel", + "tszModelSr":"./XEngine_Config/qrmodel/sr.caffemodel", + "tszProtoDetect":"./XEngine_Config/qrmodel/detect.prototxt", + "tszProtoSr":"./XEngine_Config/qrmodel/sr.prototxt" +} \ No newline at end of file diff --git a/XEngine_Release/XEngine_Config/qrmodel/detect.caffemodel b/XEngine_Release/XEngine_Config/qrmodel/detect.caffemodel new file mode 100644 index 0000000000000000000000000000000000000000..453126c7b0415490197cf4f050ff5fc166a41437 Binary files /dev/null and b/XEngine_Release/XEngine_Config/qrmodel/detect.caffemodel differ diff --git a/XEngine_Release/XEngine_Config/qrmodel/detect.prototxt b/XEngine_Release/XEngine_Config/qrmodel/detect.prototxt new file mode 100644 index 0000000000000000000000000000000000000000..bd2417c96ba8ba6e9048cac1c0f43523fd14ddb2 --- /dev/null +++ b/XEngine_Release/XEngine_Config/qrmodel/detect.prototxt @@ -0,0 +1,2716 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 384 + dim: 384 + } + } +} +layer { + name: "data/bn" + type: "BatchNorm" + bottom: "data" + top: "data" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } +} +layer { + name: "data/bn/scale" + type: "Scale" + bottom: "data" + top: "data" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1" + type: "Convolution" + bottom: "data" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage1/bn" + type: "BatchNorm" + bottom: "stage1" + top: "stage1" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + param { + lr_mult: 0.0 + decay_mult: 0.0 + } +} +layer { + name: "stage1/bn/scale" + type: "Scale" + bottom: "stage1" + top: "stage1" + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + scale_param { + filler { + type: "constant" + value: 1.0 + } + bias_term: true + bias_filler { + type: "constant" + value: 0.0 + } + } +} +layer { + name: "stage1/relu" + type: "ReLU" + bottom: "stage1" + top: "stage1" +} +layer { + name: "stage2" + type: "Pooling" + bottom: "stage1" + top: "stage2" + pooling_param { + pool: MAX + kernel_size: 3 + stride: 2 + pad: 0 + } +} +layer { + name: "stage3_1/conv1" + type: "Convolution" + bottom: "stage2" + top: "stage3_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv1/relu" + type: "ReLU" + bottom: "stage3_1/conv1" + top: "stage3_1/conv1" +} +layer { + name: "stage3_1/conv2" + type: "Convolution" + bottom: "stage3_1/conv1" + top: "stage3_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/conv3" + type: "Convolution" + bottom: "stage3_1/conv2" + top: "stage3_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_1/relu" + type: "ReLU" + bottom: "stage3_1/conv3" + top: "stage3_1/conv3" +} +layer { + name: "stage3_2/conv1" + type: "Convolution" + bottom: "stage3_1/conv3" + top: "stage3_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv1/relu" + type: "ReLU" + bottom: "stage3_2/conv1" + top: "stage3_2/conv1" +} +layer { + name: "stage3_2/conv2" + type: "Convolution" + bottom: "stage3_2/conv1" + top: "stage3_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/conv3" + type: "Convolution" + bottom: "stage3_2/conv2" + top: "stage3_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_2/sum" + type: "Eltwise" + bottom: "stage3_1/conv3" + bottom: "stage3_2/conv3" + top: "stage3_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_2/relu" + type: "ReLU" + bottom: "stage3_2/sum" + top: "stage3_2/sum" +} +layer { + name: "stage3_3/conv1" + type: "Convolution" + bottom: "stage3_2/sum" + top: "stage3_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv1/relu" + type: "ReLU" + bottom: "stage3_3/conv1" + top: "stage3_3/conv1" +} +layer { + name: "stage3_3/conv2" + type: "Convolution" + bottom: "stage3_3/conv1" + top: "stage3_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/conv3" + type: "Convolution" + bottom: "stage3_3/conv2" + top: "stage3_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_3/sum" + type: "Eltwise" + bottom: "stage3_2/sum" + bottom: "stage3_3/conv3" + top: "stage3_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_3/relu" + type: "ReLU" + bottom: "stage3_3/sum" + top: "stage3_3/sum" +} +layer { + name: "stage3_4/conv1" + type: "Convolution" + bottom: "stage3_3/sum" + top: "stage3_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv1/relu" + type: "ReLU" + bottom: "stage3_4/conv1" + top: "stage3_4/conv1" +} +layer { + name: "stage3_4/conv2" + type: "Convolution" + bottom: "stage3_4/conv1" + top: "stage3_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 16 + pad: 1 + kernel_size: 3 + group: 16 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/conv3" + type: "Convolution" + bottom: "stage3_4/conv2" + top: "stage3_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 64 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage3_4/sum" + type: "Eltwise" + bottom: "stage3_3/sum" + bottom: "stage3_4/conv3" + top: "stage3_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage3_4/relu" + type: "ReLU" + bottom: "stage3_4/sum" + top: "stage3_4/sum" +} +layer { + name: "stage4_1/conv1" + type: "Convolution" + bottom: "stage3_4/sum" + top: "stage4_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv1/relu" + type: "ReLU" + bottom: "stage4_1/conv1" + top: "stage4_1/conv1" +} +layer { + name: "stage4_1/conv2" + type: "Convolution" + bottom: "stage4_1/conv1" + top: "stage4_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/conv3" + type: "Convolution" + bottom: "stage4_1/conv2" + top: "stage4_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_1/relu" + type: "ReLU" + bottom: "stage4_1/conv3" + top: "stage4_1/conv3" +} +layer { + name: "stage4_2/conv1" + type: "Convolution" + bottom: "stage4_1/conv3" + top: "stage4_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv1/relu" + type: "ReLU" + bottom: "stage4_2/conv1" + top: "stage4_2/conv1" +} +layer { + name: "stage4_2/conv2" + type: "Convolution" + bottom: "stage4_2/conv1" + top: "stage4_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/conv3" + type: "Convolution" + bottom: "stage4_2/conv2" + top: "stage4_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_2/sum" + type: "Eltwise" + bottom: "stage4_1/conv3" + bottom: "stage4_2/conv3" + top: "stage4_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_2/relu" + type: "ReLU" + bottom: "stage4_2/sum" + top: "stage4_2/sum" +} +layer { + name: "stage4_3/conv1" + type: "Convolution" + bottom: "stage4_2/sum" + top: "stage4_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv1/relu" + type: "ReLU" + bottom: "stage4_3/conv1" + top: "stage4_3/conv1" +} +layer { + name: "stage4_3/conv2" + type: "Convolution" + bottom: "stage4_3/conv1" + top: "stage4_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/conv3" + type: "Convolution" + bottom: "stage4_3/conv2" + top: "stage4_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_3/sum" + type: "Eltwise" + bottom: "stage4_2/sum" + bottom: "stage4_3/conv3" + top: "stage4_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_3/relu" + type: "ReLU" + bottom: "stage4_3/sum" + top: "stage4_3/sum" +} +layer { + name: "stage4_4/conv1" + type: "Convolution" + bottom: "stage4_3/sum" + top: "stage4_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv1/relu" + type: "ReLU" + bottom: "stage4_4/conv1" + top: "stage4_4/conv1" +} +layer { + name: "stage4_4/conv2" + type: "Convolution" + bottom: "stage4_4/conv1" + top: "stage4_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/conv3" + type: "Convolution" + bottom: "stage4_4/conv2" + top: "stage4_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_4/sum" + type: "Eltwise" + bottom: "stage4_3/sum" + bottom: "stage4_4/conv3" + top: "stage4_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_4/relu" + type: "ReLU" + bottom: "stage4_4/sum" + top: "stage4_4/sum" +} +layer { + name: "stage4_5/conv1" + type: "Convolution" + bottom: "stage4_4/sum" + top: "stage4_5/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv1/relu" + type: "ReLU" + bottom: "stage4_5/conv1" + top: "stage4_5/conv1" +} +layer { + name: "stage4_5/conv2" + type: "Convolution" + bottom: "stage4_5/conv1" + top: "stage4_5/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/conv3" + type: "Convolution" + bottom: "stage4_5/conv2" + top: "stage4_5/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_5/sum" + type: "Eltwise" + bottom: "stage4_4/sum" + bottom: "stage4_5/conv3" + top: "stage4_5/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_5/relu" + type: "ReLU" + bottom: "stage4_5/sum" + top: "stage4_5/sum" +} +layer { + name: "stage4_6/conv1" + type: "Convolution" + bottom: "stage4_5/sum" + top: "stage4_6/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv1/relu" + type: "ReLU" + bottom: "stage4_6/conv1" + top: "stage4_6/conv1" +} +layer { + name: "stage4_6/conv2" + type: "Convolution" + bottom: "stage4_6/conv1" + top: "stage4_6/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/conv3" + type: "Convolution" + bottom: "stage4_6/conv2" + top: "stage4_6/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_6/sum" + type: "Eltwise" + bottom: "stage4_5/sum" + bottom: "stage4_6/conv3" + top: "stage4_6/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_6/relu" + type: "ReLU" + bottom: "stage4_6/sum" + top: "stage4_6/sum" +} +layer { + name: "stage4_7/conv1" + type: "Convolution" + bottom: "stage4_6/sum" + top: "stage4_7/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv1/relu" + type: "ReLU" + bottom: "stage4_7/conv1" + top: "stage4_7/conv1" +} +layer { + name: "stage4_7/conv2" + type: "Convolution" + bottom: "stage4_7/conv1" + top: "stage4_7/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/conv3" + type: "Convolution" + bottom: "stage4_7/conv2" + top: "stage4_7/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_7/sum" + type: "Eltwise" + bottom: "stage4_6/sum" + bottom: "stage4_7/conv3" + top: "stage4_7/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_7/relu" + type: "ReLU" + bottom: "stage4_7/sum" + top: "stage4_7/sum" +} +layer { + name: "stage4_8/conv1" + type: "Convolution" + bottom: "stage4_7/sum" + top: "stage4_8/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv1/relu" + type: "ReLU" + bottom: "stage4_8/conv1" + top: "stage4_8/conv1" +} +layer { + name: "stage4_8/conv2" + type: "Convolution" + bottom: "stage4_8/conv1" + top: "stage4_8/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 1 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/conv3" + type: "Convolution" + bottom: "stage4_8/conv2" + top: "stage4_8/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage4_8/sum" + type: "Eltwise" + bottom: "stage4_7/sum" + bottom: "stage4_8/conv3" + top: "stage4_8/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage4_8/relu" + type: "ReLU" + bottom: "stage4_8/sum" + top: "stage4_8/sum" +} +layer { + name: "stage5_1/conv1" + type: "Convolution" + bottom: "stage4_8/sum" + top: "stage5_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/conv1/relu" + type: "ReLU" + bottom: "stage5_1/conv1" + top: "stage5_1/conv1" +} +layer { + name: "stage5_1/conv2" + type: "Convolution" + bottom: "stage5_1/conv1" + top: "stage5_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_1/conv3" + type: "Convolution" + bottom: "stage5_1/conv2" + top: "stage5_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_1/relu" + type: "ReLU" + bottom: "stage5_1/conv3" + top: "stage5_1/conv3" +} +layer { + name: "stage5_2/conv1" + type: "Convolution" + bottom: "stage5_1/conv3" + top: "stage5_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/conv1/relu" + type: "ReLU" + bottom: "stage5_2/conv1" + top: "stage5_2/conv1" +} +layer { + name: "stage5_2/conv2" + type: "Convolution" + bottom: "stage5_2/conv1" + top: "stage5_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_2/conv3" + type: "Convolution" + bottom: "stage5_2/conv2" + top: "stage5_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_2/sum" + type: "Eltwise" + bottom: "stage5_1/conv3" + bottom: "stage5_2/conv3" + top: "stage5_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_2/relu" + type: "ReLU" + bottom: "stage5_2/sum" + top: "stage5_2/sum" +} +layer { + name: "stage5_3/conv1" + type: "Convolution" + bottom: "stage5_2/sum" + top: "stage5_3/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/conv1/relu" + type: "ReLU" + bottom: "stage5_3/conv1" + top: "stage5_3/conv1" +} +layer { + name: "stage5_3/conv2" + type: "Convolution" + bottom: "stage5_3/conv1" + top: "stage5_3/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_3/conv3" + type: "Convolution" + bottom: "stage5_3/conv2" + top: "stage5_3/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_3/sum" + type: "Eltwise" + bottom: "stage5_2/sum" + bottom: "stage5_3/conv3" + top: "stage5_3/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_3/relu" + type: "ReLU" + bottom: "stage5_3/sum" + top: "stage5_3/sum" +} +layer { + name: "stage5_4/conv1" + type: "Convolution" + bottom: "stage5_3/sum" + top: "stage5_4/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/conv1/relu" + type: "ReLU" + bottom: "stage5_4/conv1" + top: "stage5_4/conv1" +} +layer { + name: "stage5_4/conv2" + type: "Convolution" + bottom: "stage5_4/conv1" + top: "stage5_4/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage5_4/conv3" + type: "Convolution" + bottom: "stage5_4/conv2" + top: "stage5_4/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage5_4/sum" + type: "Eltwise" + bottom: "stage5_3/sum" + bottom: "stage5_4/conv3" + top: "stage5_4/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage5_4/relu" + type: "ReLU" + bottom: "stage5_4/sum" + top: "stage5_4/sum" +} +layer { + name: "stage6_1/conv4" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1" + type: "Convolution" + bottom: "stage5_4/sum" + top: "stage6_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/conv1/relu" + type: "ReLU" + bottom: "stage6_1/conv1" + top: "stage6_1/conv1" +} +layer { + name: "stage6_1/conv2" + type: "Convolution" + bottom: "stage6_1/conv1" + top: "stage6_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_1/conv3" + type: "Convolution" + bottom: "stage6_1/conv2" + top: "stage6_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_1/sum" + type: "Eltwise" + bottom: "stage6_1/conv4" + bottom: "stage6_1/conv3" + top: "stage6_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_1/relu" + type: "ReLU" + bottom: "stage6_1/sum" + top: "stage6_1/sum" +} +layer { + name: "stage6_2/conv1" + type: "Convolution" + bottom: "stage6_1/sum" + top: "stage6_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/conv1/relu" + type: "ReLU" + bottom: "stage6_2/conv1" + top: "stage6_2/conv1" +} +layer { + name: "stage6_2/conv2" + type: "Convolution" + bottom: "stage6_2/conv1" + top: "stage6_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage6_2/conv3" + type: "Convolution" + bottom: "stage6_2/conv2" + top: "stage6_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage6_2/sum" + type: "Eltwise" + bottom: "stage6_1/sum" + bottom: "stage6_2/conv3" + top: "stage6_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage6_2/relu" + type: "ReLU" + bottom: "stage6_2/sum" + top: "stage6_2/sum" +} +layer { + name: "stage7_1/conv4" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1" + type: "Convolution" + bottom: "stage6_2/sum" + top: "stage7_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/conv1/relu" + type: "ReLU" + bottom: "stage7_1/conv1" + top: "stage7_1/conv1" +} +layer { + name: "stage7_1/conv2" + type: "Convolution" + bottom: "stage7_1/conv1" + top: "stage7_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_1/conv3" + type: "Convolution" + bottom: "stage7_1/conv2" + top: "stage7_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_1/sum" + type: "Eltwise" + bottom: "stage7_1/conv4" + bottom: "stage7_1/conv3" + top: "stage7_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_1/relu" + type: "ReLU" + bottom: "stage7_1/sum" + top: "stage7_1/sum" +} +layer { + name: "stage7_2/conv1" + type: "Convolution" + bottom: "stage7_1/sum" + top: "stage7_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/conv1/relu" + type: "ReLU" + bottom: "stage7_2/conv1" + top: "stage7_2/conv1" +} +layer { + name: "stage7_2/conv2" + type: "Convolution" + bottom: "stage7_2/conv1" + top: "stage7_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage7_2/conv3" + type: "Convolution" + bottom: "stage7_2/conv2" + top: "stage7_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage7_2/sum" + type: "Eltwise" + bottom: "stage7_1/sum" + bottom: "stage7_2/conv3" + top: "stage7_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage7_2/relu" + type: "ReLU" + bottom: "stage7_2/sum" + top: "stage7_2/sum" +} +layer { + name: "stage8_1/conv4" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv4" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1" + type: "Convolution" + bottom: "stage7_2/sum" + top: "stage8_1/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/conv1/relu" + type: "ReLU" + bottom: "stage8_1/conv1" + top: "stage8_1/conv1" +} +layer { + name: "stage8_1/conv2" + type: "Convolution" + bottom: "stage8_1/conv1" + top: "stage8_1/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_1/conv3" + type: "Convolution" + bottom: "stage8_1/conv2" + top: "stage8_1/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_1/sum" + type: "Eltwise" + bottom: "stage8_1/conv4" + bottom: "stage8_1/conv3" + top: "stage8_1/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_1/relu" + type: "ReLU" + bottom: "stage8_1/sum" + top: "stage8_1/sum" +} +layer { + name: "stage8_2/conv1" + type: "Convolution" + bottom: "stage8_1/sum" + top: "stage8_2/conv1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/conv1/relu" + type: "ReLU" + bottom: "stage8_2/conv1" + top: "stage8_2/conv1" +} +layer { + name: "stage8_2/conv2" + type: "Convolution" + bottom: "stage8_2/conv1" + top: "stage8_2/conv2" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 3 + group: 32 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 2 + } +} +layer { + name: "stage8_2/conv3" + type: "Convolution" + bottom: "stage8_2/conv2" + top: "stage8_2/conv3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + convolution_param { + num_output: 128 + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "stage8_2/sum" + type: "Eltwise" + bottom: "stage8_1/sum" + bottom: "stage8_2/conv3" + top: "stage8_2/sum" + eltwise_param { + operation: SUM + } +} +layer { + name: "stage8_2/relu" + type: "ReLU" + bottom: "stage8_2/sum" + top: "stage8_2/sum" +} +layer { + name: "cls1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "cls1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls1/permute" + type: "Permute" + bottom: "cls1/conv" + top: "cls1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls1/flatten" + type: "Flatten" + bottom: "cls1/permute" + top: "cls1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc1/conv" + type: "Convolution" + bottom: "stage4_8/sum" + top: "loc1/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc1/permute" + type: "Permute" + bottom: "loc1/conv" + top: "loc1/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc1/flatten" + type: "Flatten" + bottom: "loc1/permute" + top: "loc1/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage4_8/sum/prior_box" + type: "PriorBox" + bottom: "stage4_8/sum" + bottom: "data" + top: "stage4_8/sum/prior_box" + prior_box_param { + min_size: 50.0 + max_size: 100.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 16.0 + } +} +layer { + name: "cls2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "cls2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls2/permute" + type: "Permute" + bottom: "cls2/conv" + top: "cls2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls2/flatten" + type: "Flatten" + bottom: "cls2/permute" + top: "cls2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc2/conv" + type: "Convolution" + bottom: "stage5_4/sum" + top: "loc2/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc2/permute" + type: "Permute" + bottom: "loc2/conv" + top: "loc2/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc2/flatten" + type: "Flatten" + bottom: "loc2/permute" + top: "loc2/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage5_4/sum/prior_box" + type: "PriorBox" + bottom: "stage5_4/sum" + bottom: "data" + top: "stage5_4/sum/prior_box" + prior_box_param { + min_size: 100.0 + max_size: 150.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "cls3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls3/permute" + type: "Permute" + bottom: "cls3/conv" + top: "cls3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls3/flatten" + type: "Flatten" + bottom: "cls3/permute" + top: "cls3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc3/conv" + type: "Convolution" + bottom: "stage6_2/sum" + top: "loc3/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc3/permute" + type: "Permute" + bottom: "loc3/conv" + top: "loc3/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc3/flatten" + type: "Flatten" + bottom: "loc3/permute" + top: "loc3/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage6_2/sum/prior_box" + type: "PriorBox" + bottom: "stage6_2/sum" + bottom: "data" + top: "stage6_2/sum/prior_box" + prior_box_param { + min_size: 150.0 + max_size: 200.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "cls4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls4/permute" + type: "Permute" + bottom: "cls4/conv" + top: "cls4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls4/flatten" + type: "Flatten" + bottom: "cls4/permute" + top: "cls4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc4/conv" + type: "Convolution" + bottom: "stage7_2/sum" + top: "loc4/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc4/permute" + type: "Permute" + bottom: "loc4/conv" + top: "loc4/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc4/flatten" + type: "Flatten" + bottom: "loc4/permute" + top: "loc4/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage7_2/sum/prior_box" + type: "PriorBox" + bottom: "stage7_2/sum" + bottom: "data" + top: "stage7_2/sum/prior_box" + prior_box_param { + min_size: 200.0 + max_size: 300.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "cls5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "cls5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 12 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "cls5/permute" + type: "Permute" + bottom: "cls5/conv" + top: "cls5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "cls5/flatten" + type: "Flatten" + bottom: "cls5/permute" + top: "cls5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "loc5/conv" + type: "Convolution" + bottom: "stage8_2/sum" + top: "loc5/conv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 24 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + dilation: 1 + } +} +layer { + name: "loc5/permute" + type: "Permute" + bottom: "loc5/conv" + top: "loc5/permute" + permute_param { + order: 0 + order: 2 + order: 3 + order: 1 + } +} +layer { + name: "loc5/flatten" + type: "Flatten" + bottom: "loc5/permute" + top: "loc5/flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "stage8_2/sum/prior_box" + type: "PriorBox" + bottom: "stage8_2/sum" + bottom: "data" + top: "stage8_2/sum/prior_box" + prior_box_param { + min_size: 300.0 + max_size: 400.0 + aspect_ratio: 2.0 + aspect_ratio: 0.5 + aspect_ratio: 3.0 + aspect_ratio: 0.3333333432674408 + flip: false + clip: false + variance: 0.10000000149011612 + variance: 0.10000000149011612 + variance: 0.20000000298023224 + variance: 0.20000000298023224 + step: 32.0 + } +} +layer { + name: "mbox_conf" + type: "Concat" + bottom: "cls1/flatten" + bottom: "cls2/flatten" + bottom: "cls3/flatten" + bottom: "cls4/flatten" + bottom: "cls5/flatten" + top: "mbox_conf" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_loc" + type: "Concat" + bottom: "loc1/flatten" + bottom: "loc2/flatten" + bottom: "loc3/flatten" + bottom: "loc4/flatten" + bottom: "loc5/flatten" + top: "mbox_loc" + concat_param { + axis: 1 + } +} +layer { + name: "mbox_priorbox" + type: "Concat" + bottom: "stage4_8/sum/prior_box" + bottom: "stage5_4/sum/prior_box" + bottom: "stage6_2/sum/prior_box" + bottom: "stage7_2/sum/prior_box" + bottom: "stage8_2/sum/prior_box" + top: "mbox_priorbox" + concat_param { + axis: 2 + } +} +layer { + name: "mbox_conf_reshape" + type: "Reshape" + bottom: "mbox_conf" + top: "mbox_conf_reshape" + reshape_param { + shape { + dim: 0 + dim: -1 + dim: 2 + } + } +} +layer { + name: "mbox_conf_softmax" + type: "Softmax" + bottom: "mbox_conf_reshape" + top: "mbox_conf_softmax" + softmax_param { + axis: 2 + } +} +layer { + name: "mbox_conf_flatten" + type: "Flatten" + bottom: "mbox_conf_softmax" + top: "mbox_conf_flatten" + flatten_param { + axis: 1 + } +} +layer { + name: "detection_output" + type: "DetectionOutput" + bottom: "mbox_loc" + bottom: "mbox_conf_flatten" + bottom: "mbox_priorbox" + top: "detection_output" + detection_output_param { + num_classes: 2 + share_location: true + background_label_id: 0 + nms_param { + nms_threshold: 0.44999998807907104 + top_k: 100 + } + code_type: CENTER_SIZE + keep_top_k: 100 + confidence_threshold: 0.20000000298023224 + } +} diff --git a/XEngine_Release/XEngine_Config/qrmodel/sr.caffemodel b/XEngine_Release/XEngine_Config/qrmodel/sr.caffemodel new file mode 100644 index 0000000000000000000000000000000000000000..168b54d43ec27a3782da14c6a03d3f7bb61bdda3 Binary files /dev/null and b/XEngine_Release/XEngine_Config/qrmodel/sr.caffemodel differ diff --git a/XEngine_Release/XEngine_Config/qrmodel/sr.prototxt b/XEngine_Release/XEngine_Config/qrmodel/sr.prototxt new file mode 100644 index 0000000000000000000000000000000000000000..e85caa177d54e8f23306bf12de1b7c3fe9a1da83 --- /dev/null +++ b/XEngine_Release/XEngine_Config/qrmodel/sr.prototxt @@ -0,0 +1,403 @@ +layer { + name: "data" + type: "Input" + top: "data" + input_param { + shape { + dim: 1 + dim: 1 + dim: 224 + dim: 224 + } + } +} +layer { + name: "conv0" + type: "Convolution" + bottom: "data" + top: "conv0" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv0/lrelu" + type: "ReLU" + bottom: "conv0" + top: "conv0" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/reduce" + type: "Convolution" + bottom: "conv0" + top: "db1/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/reduce/lrelu" + type: "ReLU" + bottom: "db1/reduce" + top: "db1/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/3x3" + type: "Convolution" + bottom: "db1/reduce" + top: "db1/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/3x3/lrelu" + type: "ReLU" + bottom: "db1/3x3" + top: "db1/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/1x1" + type: "Convolution" + bottom: "db1/3x3" + top: "db1/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db1/1x1/lrelu" + type: "ReLU" + bottom: "db1/1x1" + top: "db1/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db1/concat" + type: "Concat" + bottom: "conv0" + bottom: "db1/1x1" + top: "db1/concat" + concat_param { + axis: 1 + } +} +layer { + name: "db2/reduce" + type: "Convolution" + bottom: "db1/concat" + top: "db2/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/reduce/lrelu" + type: "ReLU" + bottom: "db2/reduce" + top: "db2/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/3x3" + type: "Convolution" + bottom: "db2/reduce" + top: "db2/3x3" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 8 + bias_term: true + pad: 1 + kernel_size: 3 + group: 8 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/3x3/lrelu" + type: "ReLU" + bottom: "db2/3x3" + top: "db2/3x3" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/1x1" + type: "Convolution" + bottom: "db2/3x3" + top: "db2/1x1" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "db2/1x1/lrelu" + type: "ReLU" + bottom: "db2/1x1" + top: "db2/1x1" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "db2/concat" + type: "Concat" + bottom: "db1/concat" + bottom: "db2/1x1" + top: "db2/concat" + concat_param { + axis: 1 + } +} +layer { + name: "upsample/reduce" + type: "Convolution" + bottom: "db2/concat" + top: "upsample/reduce" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/reduce/lrelu" + type: "ReLU" + bottom: "upsample/reduce" + top: "upsample/reduce" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/deconv" + type: "Deconvolution" + bottom: "upsample/reduce" + top: "upsample/deconv" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 32 + bias_term: true + pad: 1 + kernel_size: 3 + group: 32 + stride: 2 + weight_filler { + type: "msra" + } + } +} +layer { + name: "upsample/lrelu" + type: "ReLU" + bottom: "upsample/deconv" + top: "upsample/deconv" + relu_param { + negative_slope: 0.05000000074505806 + } +} +layer { + name: "upsample/rec" + type: "Convolution" + bottom: "upsample/deconv" + top: "upsample/rec" + param { + lr_mult: 1.0 + decay_mult: 1.0 + } + param { + lr_mult: 1.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: true + pad: 0 + kernel_size: 1 + group: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "nearest" + type: "Deconvolution" + bottom: "data" + top: "nearest" + param { + lr_mult: 0.0 + decay_mult: 0.0 + } + convolution_param { + num_output: 1 + bias_term: false + pad: 0 + kernel_size: 2 + group: 1 + stride: 2 + weight_filler { + type: "constant" + value: 1.0 + } + } +} +layer { + name: "Crop1" + type: "Crop" + bottom: "nearest" + bottom: "upsample/rec" + top: "Crop1" +} +layer { + name: "fc" + type: "Eltwise" + bottom: "Crop1" + bottom: "upsample/rec" + top: "fc" + eltwise_param { + operation: SUM + } +} diff --git a/XEngine_Source/VSCopy-Debug.bat b/XEngine_Source/VSCopy-Debug.bat index 3e81107665b5b91397ab61eb7dd7694205641975..538d0850fa927ed9d00d77eb1ed21fe09dfdebba 100644 --- a/XEngine_Source/VSCopy-Debug.bat +++ b/XEngine_Source/VSCopy-Debug.bat @@ -6,6 +6,7 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_OPenSsl.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_SystemApi.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIHelp.dll" "./" +copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Socket.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_DataBase.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Packets.dll" "./" diff --git a/XEngine_Source/VSCopy-x64.bat b/XEngine_Source/VSCopy-x64.bat index 827aeb8312387d673daafdfa0afa29933e6c3761..1aa89b2411a98d06732053519ba7da9ade69dad5 100644 --- a/XEngine_Source/VSCopy-x64.bat +++ b/XEngine_Source/VSCopy-x64.bat @@ -6,6 +6,7 @@ copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_OPenSsl.dll" "./" copy /y "%XEngine_Lib64%\XEngine_SystemSdk\XEngine_SystemApi.dll" "./" copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_APIClient.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_DataBase.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" @@ -20,7 +21,7 @@ copy /y "%XEngine_Lib64%\XEngine_HelpComponents\libpq.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\sqlite3.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\zlib1.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\plugin\caching_sha2_password.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_NetHelp\libcurl.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_NetHelp\nghttp2.dll" "./" copy /y "%XEngine_Lib64%\XEngine_LibEx\libssl-3-x64.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_LibEx\libcrypto-3-x64.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_LibEx\libcurl.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_LibEx\nghttp2.dll" "./" \ No newline at end of file +copy /y "%XEngine_Lib64%\XEngine_LibEx\libcrypto-3-x64.dll" "./" \ No newline at end of file diff --git a/XEngine_Source/VSCopy-x86.bat b/XEngine_Source/VSCopy-x86.bat index 9979173031171347330b0cfaa5f0d2aac2639d9d..0cf9981ec76a68053b81ac9fa20ace557bf9beb6 100644 --- a/XEngine_Source/VSCopy-x86.bat +++ b/XEngine_Source/VSCopy-x86.bat @@ -6,6 +6,7 @@ copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_OPenSsl.dll" "./" copy /y "%XEngine_Lib32%\XEngine_SystemSdk\XEngine_SystemApi.dll" "./" copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIClient.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_DataBase.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" @@ -19,8 +20,7 @@ copy /y "%XEngine_Lib32%\XEngine_HelpComponents\libmariadb.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\libpq.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\sqlite3.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\zlib1.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_HelpComponents\plugin\caching_sha2_password.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_NetHelp\libcurl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_NetHelp\nghttp2.dll" "./" copy /y "%XEngine_Lib32%\XEngine_LibEx\libcrypto-3.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-3.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_LibEx\libcurl.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_LibEx\nghttp2.dll" "./" \ No newline at end of file +copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-3.dll" "./" \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 4d9a6b818ce14f17ce38daf7a23cabefd8c4633e..f4291eef4f50490aa3e3f595d004875e4ea7d54f 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -56,6 +56,11 @@ typedef struct TCHAR tszPluginLib[MAX_PATH]; //配置文件地址 TCHAR tszPluginLua[MAX_PATH]; //配置文件地址 }st_XPlugin; + struct + { + TCHAR tszConfigOPencc[MAX_PATH]; //OPENCC配置地址 + TCHAR tszConfigQRCode[MAX_PATH]; //二维码配置地址 + }st_XConfig; struct { list* pStl_ListVer; @@ -79,6 +84,14 @@ typedef struct TCHAR tszFilejp2t[MAX_PATH]; TCHAR tszFiletw2t[MAX_PATH]; }XENGINE_OPENCCCONFIG; +//二维码模型库 +typedef struct +{ + TCHAR tszModelDetect[MAX_PATH]; + TCHAR tszModelSr[MAX_PATH]; + TCHAR tszProtoDetect[MAX_PATH]; + TCHAR tszProtoSr[MAX_PATH]; +}XENGINE_QRCODECONFIG; //插件 typedef struct { @@ -148,6 +161,25 @@ extern "C" BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVIC *********************************************************************/ extern "C" BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_OPENCCCONFIG* pSt_OPenccConfig); /******************************************************************** +函数名称:ModuleConfigure_Json_QRCodeFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_QRCodeConfig + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出二维码配置信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleConfigure_Json_QRCodeFile(LPCTSTR lpszConfigFile, XENGINE_QRCODECONFIG* pSt_QRCodeConfig); +/******************************************************************** 函数名称:ModuleConfigure_Json_PluginFile 函数功能:读取JSON配置文件 参数.一:lpszConfigFile diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h index 597d742f2ea5d90e6079a0e15dc6e6eddcbae01a..f771ce0578fb6f9ddbbff38fd15199424c796012 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h @@ -21,6 +21,7 @@ #define ERROR_MODULE_CONFIGURE_JSON_XVER 0xA0009 //版本配置文件读取错误 #define ERROR_MODULE_CONFIGURE_JSON_MALLOC 0xA000A //申请内存失败 #define ERROR_MODULE_CONFIGURE_JSON_XAPI 0xA000B //API配置失败 +#define ERROR_MODULE_CONFIGURE_JSON_XCONFIG 0xA000C //配置文件配置加载失败 ////////////////////////////////////////////////////////////////////////// #define ERROR_MODULE_CONFIGURE_FILE_PARAMENT 0xA1001 //参数错误 #define ERROR_MODULE_CONFIGURE_FILE_OPENFILE 0xA1002 //打开文件失败 diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 3c05eecf8cff835e953e102feafbb102710d9e8b..854a6160ba0734da43d6bcce9735b25eb6ef0ab9 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -152,6 +152,16 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE _tcscpy(pSt_ServerConfig->st_XPlugin.tszPluginLib, st_JsonXPlugin["tszPluginLib"].asCString()); _tcscpy(pSt_ServerConfig->st_XPlugin.tszPluginLua, st_JsonXPlugin["tszPluginLua"].asCString()); + if (st_JsonRoot["XConfig"].empty() || (2 != st_JsonRoot["XConfig"].size())) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XCONFIG; + return FALSE; + } + Json::Value st_JsonXConfig = st_JsonRoot["XConfig"]; + _tcscpy(pSt_ServerConfig->st_XConfig.tszConfigOPencc, st_JsonXConfig["tszConfigOPencc"].asCString()); + _tcscpy(pSt_ServerConfig->st_XConfig.tszConfigQRCode, st_JsonXConfig["tszConfigQRCode"].asCString()); + if (st_JsonRoot["XVer"].empty()) { Config_IsErrorOccur = TRUE; @@ -248,6 +258,71 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFi return TRUE; } /******************************************************************** +函数名称:ModuleConfigure_Json_QRCodeFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_QRCodeConfig + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出二维码配置信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleConfigure_Json::ModuleConfigure_Json_QRCodeFile(LPCTSTR lpszConfigFile, XENGINE_QRCODECONFIG* pSt_QRCodeConfig) +{ + Config_IsErrorOccur = FALSE; + + if ((NULL == lpszConfigFile) || (NULL == pSt_QRCodeConfig)) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_JsonBuilder; + //读取配置文件所有内容到缓冲区 + FILE* pSt_File = _tfopen(lpszConfigFile, _T("rb")); + if (NULL == pSt_File) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; + return FALSE; + } + size_t nCount = 0; + TCHAR tszMsgBuffer[4096]; + while (1) + { + size_t nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); + if (nRet <= 0) + { + break; + } + nCount += nRet; + } + fclose(pSt_File); + //开始解析配置文件 + std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; + return FALSE; + } + _tcscpy(pSt_QRCodeConfig->tszModelDetect, st_JsonRoot["tszModelDetect"].asCString()); + _tcscpy(pSt_QRCodeConfig->tszModelSr, st_JsonRoot["tszModelSr"].asCString()); + _tcscpy(pSt_QRCodeConfig->tszProtoDetect, st_JsonRoot["tszProtoDetect"].asCString()); + _tcscpy(pSt_QRCodeConfig->tszProtoSr, st_JsonRoot["tszProtoSr"].asCString()); + return TRUE; +} +/******************************************************************** 函数名称:ModuleConfigure_Json_PluginFile 函数功能:读取JSON配置文件 参数.一:lpszConfigFile diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h index d5c720d683be0f5d8fb395621a5d0e400ac88599..acee48702d5ae4946e3eb05162f372ecd5241bbc 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h @@ -19,6 +19,7 @@ public: public: BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_OPENCCCONFIG* pSt_OPenccConfig); + BOOL ModuleConfigure_Json_QRCodeFile(LPCTSTR lpszConfigFile, XENGINE_QRCODECONFIG* pSt_QRCodeConfig); BOOL ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig); protected: private: diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def index 892d206c25b7ec4e966b7e9fd638ac718f38a81e..3983d3c5e6e0eaf2d775786871325e13f6597597 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def @@ -5,4 +5,5 @@ EXPORTS ModuleConfigure_Json_File ModuleConfigure_Json_OPenccFile + ModuleConfigure_Json_QRCodeFile ModuleConfigure_Json_PluginFile \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp index a411594c2e809c0d38b58cb84bc42748c08d0805..5d11a22d6658be3b8031b9e03139cda34bce4c7a 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -37,6 +37,10 @@ extern "C" BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_ { return m_ConfigJson.ModuleConfigure_Json_OPenccFile(lpszConfigFile, pSt_OPenccConfig); } +extern "C" BOOL ModuleConfigure_Json_QRCodeFile(LPCTSTR lpszConfigFile, XENGINE_QRCODECONFIG * pSt_QRCodeConfig) +{ + return m_ConfigJson.ModuleConfigure_Json_QRCodeFile(lpszConfigFile, pSt_QRCodeConfig); +} extern "C" BOOL ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG * pSt_PluginConfig) { return m_ConfigJson.ModuleConfigure_Json_PluginFile(lpszConfigFile, pSt_PluginConfig); diff --git a/XEngine_Source/XEngine_ModuleHelp/Makefile b/XEngine_Source/XEngine_ModuleHelp/Makefile index b2de767fc49abf90d44899319999ac94799818ec..1300a6024c8046d287d51737c5af9bba7d64241f 100644 --- a/XEngine_Source/XEngine_ModuleHelp/Makefile +++ b/XEngine_Source/XEngine_ModuleHelp/Makefile @@ -3,12 +3,26 @@ SHAREFLAG = -shared SHAREDLL = so RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -LIB = -lXEngine_BaseLib -lopencc +INCLUDE = -I ./ -I /usr/include/opencv4 +LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client +LIB = -lXEngine_BaseLib -lXClient_Socket -lopencc LIBEX = -ldl -lpthread LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o pch.o +LIBINCLUDE = ModuleHelp_IDCard.o ModuleHelp_Language.o ModuleHelp_P2PClient.o ModuleHelp_Locker.o ModuleHelp_QRCode.o ModuleHelp_SocketTest.o pch.o + +ifeq ($(OS),Windows_NT) + PLATFORM="Windows" +else + ifeq ($(shell uname),Darwin) + PLATFORM="MacOS" + else + ifeq ($(FILECENTOS), $(wildcard $(FILECENTOS))) +# LIB += -lopencv_core -lopencv_imgcodecs -lopencv_imgproc + else +# LIB += -llzma -lpng16 -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -ltiff + endif + endif +endif ifeq ($(shell uname),Darwin) SHAREDLL = dylib @@ -45,6 +59,10 @@ ModuleHelp_P2PClient.o:./ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp ModuleHelp_Locker.o:./ModuleHelp_Locker/ModuleHelp_Locker.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleHelp_Locker/ModuleHelp_Locker.cpp +ModuleHelp_QRCode.o:./ModuleHelp_QRCode/ModuleHelp_QRCode.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleHelp_QRCode/ModuleHelp_QRCode.cpp +ModuleHelp_SocketTest.o:./ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp pch.o:./pch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h index cebc0912080f7d4980ab593d3d84c71d9782f045..8b3938b69a56bb461db855746a53985b0ce45098 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h @@ -14,6 +14,8 @@ // 导出回调函数 ////////////////////////////////////////////////////////////////////////// typedef void(CALLBACK* CALLBACK_APISERVICE_MODULE_HELP_P2PCLIENT)(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, LPVOID lParam); +//套接字测试回调:测试句柄,测试的服务器地址,测试的端口,当前测试次数,失败次数,成功次数,状态:0成功报告,1失败报告,2结束报告,自定义参数 +typedef void(CALLBACK* CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST)(XNETHANDLE xhToken, LPCSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, LPVOID lParam); ////////////////////////////////////////////////////////////////////////// // 导出数据结构 ////////////////////////////////////////////////////////////////////////// @@ -386,4 +388,266 @@ extern "C" BOOL ModuleHelp_Locker_WriteUNLock(XNETHANDLE xhToken); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleHelp_Locker_Close(XNETHANDLE xhToken); \ No newline at end of file +extern "C" BOOL ModuleHelp_Locker_Close(XNETHANDLE xhToken); +/************************************************************************/ +/* 二维码导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleHelp_QRCode_QREncodecFile +函数功能:二维码生成器 + 参数.一:lpszFileName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要生成的图片位置 + 参数.二:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要编码的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_QRCode_QREncodecFile(LPCTSTR lpszFileName, LPCTSTR lpszMsgBuffer); +/******************************************************************** +函数名称:ModuleHelp_QRCode_QREncodecMemory +函数功能:编码数据为二维码格式PNG图片 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要编码的数据 + 参数.二:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出编码的数据 + 参数.三:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出数据大小 + 意思:输出数据大小 + 参数.四:lpszFmt + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入文件格式.png +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_QRCode_QREncodecMemory(LPCTSTR lpszMsgBuffer, TCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCTSTR lpszFmt); +/******************************************************************** +函数名称:ModuleHelp_QRCode_QRDecodecFile +函数功能:从文件解码二维码 + 参数.一:lpszFileName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的图片地址 + 参数.二:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出识别到的内容 + 参数.三:lpszDetectProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.四:lpszDetectModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.五:lpszSrProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.六:lpszSrModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_QRCode_QRDecodecFile(LPCTSTR lpszFileName, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel); +/******************************************************************** +函数名称:ModuleHelp_QRCode_QRDecodecMemory +函数功能:从内存解析二维码 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的图片缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入缓冲区大小 + 参数.三:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出识别到的内容 + 参数.四:lpszDetectProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.五:lpszDetectModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.六:lpszSrProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.七:lpszSrModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_QRCode_QRDecodecMemory(LPCSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel); +/************************************************************************/ +/* 网络测试导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StartConnect +函数功能:测试连接 + 参数.一:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:导出句柄 + 参数.二:pSt_ReConnect + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要测试的属性 + 参数.三:fpCall_ReConnect + In/Out:In/Out + 类型:回调函数 + 可空:N + 意思:测试回调信息 + 参数.四:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:回调函数自定义参数 +返回值 + 类型:句柄型 + 意思:成功返回连接的句柄,失败返回NULL +备注:链接测试函数,链接一次后就关闭 +*********************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_StartConnect(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_RECONNECT* pSt_ReConnect, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_ReConnect, LPVOID lParam = NULL); +/******************************************************************** +函数名称:ModuleHelp_SocketTest_GetConnect +函数功能:获取是否在处理中 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入操作的句柄 + 参数.二:pbRun + In/Out:Out + 类型:逻辑型指针 + 可空:N + 意思:输出是否在运行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_GetConnect(XNETHANDLE xhToken, BOOL* pbRun); +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StopConnect +函数功能:停止短连接测试 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入测试的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_StopConnect(XNETHANDLE xhToken); +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StartDatas +函数功能:数据包测试函数 + 参数.一:pxhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输出创建的句柄 + 参数.二:pSt_SocketDatas + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要测试的属性 + 参数.三:fpCall_DataTest + In/Out:In/Out + 类型:回调函数 + 可空:N + 意思:测试回调信息 + 参数.四:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:回调函数自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_StartDatas(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_DATAS* pSt_SocketDatas, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_DataTest, BOOL bTCP = TRUE, LPVOID lParam = NULL); +/******************************************************************** +函数名称:ModuleHelp_SocketTest_GetDatas +函数功能:获取是否在处理中 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入操作的句柄 + 参数.二:pbRun + In/Out:Out + 类型:逻辑型指针 + 可空:N + 意思:输出是否在运行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_GetDatas(XNETHANDLE xhToken, BOOL* pbRun); +/************************************************************************ +函数名称:ModuleHelp_SocketTest_DatasStop +函数功能:停止大数据包测试 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入测试的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +************************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_StopDatas(XNETHANDLE xhToken); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h index 9a014f9187c6ed2745fb09c98f8db763fd627eb2..058f12f652af1baa78d680fc44cb825f622f4d84 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h @@ -41,4 +41,20 @@ #define ERROR_XENGINE_APISERVICE_MODULE_HELP_LOCK_EXIST 0xD3003 //已经存在 #define ERROR_XENGINE_APISERVICE_MODULE_HELP_LOCK_NOTFOUND 0xD3004 //没有找到锁 #define ERROR_XENGINE_APISERVICE_MODULE_HELP_LOCK_LOCKED 0xD3005 //已锁定 -#define ERROR_XENGINE_APISERVICE_MODULE_HELP_LOCK_STATUS 0xD3006 //解锁状态错误 \ No newline at end of file +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_LOCK_STATUS 0xD3006 //解锁状态错误 +////////////////////////////////////////////////////////////////////////// +// 二维码错误 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_PARAMENT 0xD4001 //参数错误 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_FAILED 0xD4002 //处理失败 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_WRITE 0xD4003 //写入失败 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_EMPTY 0xD4004 //空的数据 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTQR 0xD4005 //不是QR +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTSUPPORT 0xD4006 //暂时不支持 +////////////////////////////////////////////////////////////////////////// +// 套接字测试错误 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_PARAMRT 0xD5001 //参数错误 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_MALLOC 0xD5002 //申请内存失败 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_THREAD 0xD5003 //创建线程失败 +#define ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_NOTFOUND 0xD5004 //没有找到 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.cpp new file mode 100644 index 0000000000000000000000000000000000000000..89442ed3ac1123e3799d1c318a63a226fa13c7e9 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.cpp @@ -0,0 +1,369 @@ +#include "pch.h" +#include "ModuleHelp_QRCode.h" +/******************************************************************** +// Created: 2023/01/31 09:38:48 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_QRCode\ModuleHelp_QRCode.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_QRCode +// File Base: ModuleHelp_QRCode +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: 二维码处理代码 +// History: +*********************************************************************/ +CModuleHelp_QRCode::CModuleHelp_QRCode() +{ +#ifdef _MSC_BUILD + cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_SILENT); +#endif +} +CModuleHelp_QRCode::~CModuleHelp_QRCode() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleHelp_QRCode_QREncodecFile +函数功能:二维码生成器 + 参数.一:lpszFileName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要生成的图片位置 + 参数.二:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要编码的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_QRCode::ModuleHelp_QRCode_QREncodecFile(LPCTSTR lpszFileName, LPCTSTR lpszMsgBuffer) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == lpszFileName) || (NULL == lpszMsgBuffer)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_PARAMENT; + return FALSE; + } +#ifdef _MSC_BUILD + //使用qrencode进行字符串编码 +#ifdef _UNICODE + USES_CONVERSION; + QRcode* pSt_QRCodec = QRcode_encodeString(W2A(lpszMsgBuffer), 0, QR_ECLEVEL_H, QR_MODE_8, 1); +#else + QRcode* pSt_QRCodec = QRcode_encodeString(lpszMsgBuffer, 0, QR_ECLEVEL_H, QR_MODE_8, 1); +#endif + if (NULL == pSt_QRCodec) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_FAILED; + return FALSE; + } + cv::Mat m_SrcFrame; + //转换数据 + m_SrcFrame = cv::Mat(pSt_QRCodec->width, pSt_QRCodec->width, CV_8U); + for (int i = 0; i < pSt_QRCodec->width; ++i) + { + for (int j = 0; j < pSt_QRCodec->width; ++j) + { + m_SrcFrame.at(i, j) = (pSt_QRCodec->data[i * pSt_QRCodec->width + j] & 0x01) == 0x01 ? 0 : 255; + } + } + //调整大小 + cv::resize(m_SrcFrame, m_SrcFrame, cv::Size(m_SrcFrame.rows * 10, m_SrcFrame.cols * 10), 0, 0, cv::INTER_NEAREST); + //转换成彩色 + cv::cvtColor(m_SrcFrame, m_SrcFrame, cv::COLOR_GRAY2BGR); +#ifdef _UNICODE + //USES_CONVERSION; + if (!cv::imwrite(W2A(lpszFileName), m_SrcFrame)) +#else + if (!cv::imwrite(lpszFileName, m_SrcFrame)) +#endif + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_WRITE; + return FALSE; + } +#else + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTSUPPORT; + return FALSE; +#endif + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_QRCode_QREncodecMemory +函数功能:编码数据为二维码格式PNG图片 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要编码的数据 + 参数.二:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出编码的数据 + 参数.三:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出数据大小 + 参数.四:lpszFmt + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入文件格式.png +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_QRCode::ModuleHelp_QRCode_QREncodecMemory(LPCTSTR lpszMsgBuffer, TCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCTSTR lpszFmt) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == ptszMsgBuffer)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_PARAMENT; + return FALSE; + } +#ifdef _MSC_BUILD + //使用qrencode进行字符串编码 +#ifdef _UNICODE + USES_CONVERSION; + QRcode* pSt_QRCodec = QRcode_encodeString(W2A(lpszMsgBuffer), 0, QR_ECLEVEL_H, QR_MODE_8, 1); +#else + QRcode* pSt_QRCodec = QRcode_encodeString(lpszMsgBuffer, 0, QR_ECLEVEL_H, QR_MODE_8, 1); +#endif + if (NULL == pSt_QRCodec) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_FAILED; + return FALSE; + } + cv::Mat m_SrcFrame; + vector stl_VecImg; + //转换数据 + m_SrcFrame = cv::Mat(pSt_QRCodec->width, pSt_QRCodec->width, CV_8U); + for (int i = 0; i < pSt_QRCodec->width; ++i) + { + for (int j = 0; j < pSt_QRCodec->width; ++j) + { + m_SrcFrame.at(i, j) = (pSt_QRCodec->data[i * pSt_QRCodec->width + j] & 0x01) == 0x01 ? 0 : 255; + } + } + //调整大小 + cv::resize(m_SrcFrame, m_SrcFrame, cv::Size(m_SrcFrame.rows * 10, m_SrcFrame.cols * 10), 0, 0, cv::INTER_NEAREST); + //转换成彩色 + cv::cvtColor(m_SrcFrame, m_SrcFrame, cv::COLOR_GRAY2BGR); + //是否成功 + if (!cv::imencode(lpszFmt, m_SrcFrame, stl_VecImg)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_FAILED; + return FALSE; + } + *pInt_MsgLen = stl_VecImg.size(); + for (int i = 0; i < (*pInt_MsgLen); i++) + { + ptszMsgBuffer[i] = stl_VecImg[i]; + } +#else + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTSUPPORT; + return FALSE; +#endif + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_QRCode_QRDecodecFile +函数功能:从文件解码二维码 + 参数.一:lpszFileName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的图片地址 + 参数.二:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出识别到的内容 + 参数.三:lpszDetectProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.四:lpszDetectModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.五:lpszSrProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.六:lpszSrModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_QRCode::ModuleHelp_QRCode_QRDecodecFile(LPCTSTR lpszFileName, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == lpszFileName) || (NULL == ptszMsgBuffer)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_PARAMENT; + return FALSE; + } +#ifdef _MSC_BUILD + cv::Mat m_Frame; + vector m_MatPoint; + cv::Ptr m_QRDetector; + +#ifdef _UNICODE + USES_CONVERSION; + m_Frame = cv::imread(W2A(lpszFileName)); +#else + m_Frame = cv::imread(lpszFileName); +#endif // _UNICODE + //是否成功 + if (m_Frame.empty()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_EMPTY; + return FALSE; + } +#ifdef _UNICODE + m_QRDetector = cv::makePtr(W2A(lpszDetectProto), W2A(lpszDetectModel), W2A(lpszSrProto), W2A(lpszSrModel)); +#else + m_QRDetector = cv::makePtr(lpszDetectProto, lpszDetectModel, lpszSrProto, lpszSrModel); +#endif + vector stl_VectorQRList = m_QRDetector->detectAndDecode(m_Frame, m_MatPoint); + + if (stl_VectorQRList.empty()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTQR; + return FALSE; + } +#ifdef _UNICODE + wcscpy(ptszMsgBuffer, A2W(stl_VectorQRList[0].c_str())); +#else + strcpy(ptszMsgBuffer, stl_VectorQRList[0].c_str()); +#endif +#else + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTSUPPORT; + return FALSE; +#endif + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_QRCode_QRDecodecMemory +函数功能:从内存解析二维码 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的图片缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入缓冲区大小 + 参数.三:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出识别到的内容 + 参数.四:lpszDetectProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.五:lpszDetectModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.六:lpszSrProto + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 + 参数.七:lpszSrModel + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:学习模型地址,参考示例 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_QRCode::ModuleHelp_QRCode_QRDecodecMemory(LPCSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == ptszMsgBuffer)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_PARAMENT; + return FALSE; + } +#ifdef _MSC_BUILD + cv::Mat m_Frame; + vector m_MatPoint; + cv::Ptr m_QRDetector; + + cv::_InputArray m_InputArray(lpszMsgBuffer, nMsgLen); + m_Frame = cv::imdecode(m_InputArray, cv::IMREAD_UNCHANGED); + //是否成功 + if (m_Frame.empty()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_EMPTY; + return FALSE; + } +#ifdef _UNICODE + USES_CONVERSION; + m_QRDetector = cv::makePtr(W2A(lpszDetectProto), W2A(lpszDetectModel), W2A(lpszSrProto), W2A(lpszSrModel)); +#else + m_QRDetector = cv::makePtr(lpszDetectProto, lpszDetectModel, lpszSrProto, lpszSrModel); +#endif + vector stl_VectorQRList = m_QRDetector->detectAndDecode(m_Frame, m_MatPoint); + + if (stl_VectorQRList.empty()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTQR; + return FALSE; + } +#ifdef _UNICODE + wcscpy(ptszMsgBuffer, A2W(stl_VectorQRList[0].c_str())); +#else + strcpy(ptszMsgBuffer, stl_VectorQRList[0].c_str()); +#endif +#else + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_QRCODE_NOTSUPPORT; + return FALSE; +#endif + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.h new file mode 100644 index 0000000000000000000000000000000000000000..417d86d0e62042def07f783e46874d9e052cc96c --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_QRCode/ModuleHelp_QRCode.h @@ -0,0 +1,26 @@ +#pragma once +/******************************************************************** +// Created: 2023/01/31 09:38:32 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_QRCode\ModuleHelp_QRCode.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_QRCode +// File Base: ModuleHelp_QRCode +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 二维码处理代码 +// History: +*********************************************************************/ + +class CModuleHelp_QRCode +{ +public: + CModuleHelp_QRCode(); + ~CModuleHelp_QRCode(); +public: + BOOL ModuleHelp_QRCode_QREncodecFile(LPCTSTR lpszFileName, LPCTSTR lpszMsgBuffer); + BOOL ModuleHelp_QRCode_QREncodecMemory(LPCTSTR lpszMsgBuffer, TCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCTSTR lpszFmt); + BOOL ModuleHelp_QRCode_QRDecodecFile(LPCTSTR lpszFileName, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel); + BOOL ModuleHelp_QRCode_QRDecodecMemory(LPCSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel); +protected: +private: +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..81da20e19a53f43809caec40435df8a9bcd0ddb7 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp @@ -0,0 +1,434 @@ +#include "pch.h" +#include "ModuleHelp_SocketTest.h" +/******************************************************************** +// Created: 2023/02/06 11:26:27 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_SocketTest\ModuleHelp_SocketTest.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_SocketTest +// File Base: ModuleHelp_SocketTest +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: 套接字测试 +// History: +*********************************************************************/ +CModuleHelp_SocketTest::CModuleHelp_SocketTest() +{ +} +CModuleHelp_SocketTest::~CModuleHelp_SocketTest() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StartConnect +函数功能:测试连接 + 参数.一:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:导出句柄 + 参数.二:pSt_ReConnect + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要测试的属性 + 参数.三:fpCall_ReConnect + In/Out:In/Out + 类型:回调函数 + 可空:N + 意思:测试回调信息 + 参数.四:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:回调函数自定义参数 +返回值 + 类型:句柄型 + 意思:成功返回连接的句柄,失败返回NULL +备注:链接测试函数,链接一次后就关闭 +*********************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_StartConnect(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_RECONNECT* pSt_ReConnect, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_ReConnect, LPVOID lParam /* = NULL */) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == pSt_ReConnect) || (NULL == fpCall_ReConnect)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_PARAMRT; + return FALSE; + } + MODULEHELP_SOCKETTEST_CONNINFO* pSt_ConnSocket = new MODULEHELP_SOCKETTEST_CONNINFO; + if (NULL == pSt_ConnSocket) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_MALLOC; + return FALSE; + } + memset(pSt_ConnSocket, '\0', sizeof(MODULEHELP_SOCKETTEST_CONNINFO)); + //结构体赋值 + pSt_ConnSocket->bIsRun = TRUE; + pSt_ConnSocket->lParam = lParam; + pSt_ConnSocket->lpCall_ReConnect = fpCall_ReConnect; + BaseLib_OperatorHandle_Create(&pSt_ConnSocket->xhToken); + memcpy(&pSt_ConnSocket->st_SocketConn, pSt_ReConnect, sizeof(MODULEHELP_SOCKETTEST_RECONNECT)); + //创建线程 + pSt_ConnSocket->pSTDThread = make_shared(ModuleHelp_SocketTest_ThreadConn, pSt_ConnSocket); + if (NULL == pSt_ConnSocket->pSTDThread) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_THREAD; + return FALSE; + } + *pxhToken = pSt_ConnSocket->xhToken; + st_LockConn.lock(); + stl_MapConnTest.insert(make_pair(pSt_ConnSocket->xhToken, pSt_ConnSocket)); + st_LockConn.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_SocketTest_GetConnect +函数功能:获取是否在处理中 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入操作的句柄 + 参数.二:pbRun + In/Out:Out + 类型:逻辑型指针 + 可空:N + 意思:输出是否在运行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_GetConnect(XNETHANDLE xhToken, BOOL* pbRun) +{ + ModuleHelp_IsErrorOccur = FALSE; + + st_LockConn.lock_shared(); + unordered_map::iterator stl_MapIterator = stl_MapConnTest.find(xhToken); + if (stl_MapIterator == stl_MapConnTest.end()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_NOTFOUND; + st_LockConn.unlock_shared(); + return FALSE; + } + *pbRun = stl_MapIterator->second->bIsRun; + st_LockConn.unlock_shared(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StopConnect +函数功能:停止短连接测试 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入测试的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_StopConnect(XNETHANDLE xhToken) +{ + ModuleHelp_IsErrorOccur = FALSE; + + st_LockConn.lock(); + unordered_map::iterator stl_MapIterator = stl_MapConnTest.find(xhToken); + if (stl_MapIterator != stl_MapConnTest.end()) + { + stl_MapIterator->second->bIsRun = FALSE; + stl_MapIterator->second->pSTDThread->join(); + + if (NULL != stl_MapIterator->second->lParam) + { + delete (TCHAR*)stl_MapIterator->second->lParam; + stl_MapIterator->second->lParam = NULL; + } + + delete stl_MapIterator->second; + stl_MapIterator->second = NULL; + + stl_MapConnTest.erase(stl_MapIterator); + } + st_LockConn.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_SocketTest_StartDatas +函数功能:数据包测试函数 + 参数.一:pxhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输出创建的句柄 + 参数.二:pSt_SocketDatas + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要测试的属性 + 参数.三:fpCall_DataTest + In/Out:In/Out + 类型:回调函数 + 可空:N + 意思:测试回调信息 + 参数.四:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:回调函数自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_StartDatas(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_DATAS* pSt_SocketDatas, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_DataTest, BOOL bTCP /* = TRUE */, LPVOID lParam /* = NULL */) +{ + ModuleHelp_IsErrorOccur = FALSE; + + if ((NULL == pSt_SocketDatas) || (NULL == fpCall_DataTest)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_PARAMRT; + return FALSE; + } + MODULEHELP_SOCKETTEST_DATAINFO *pSt_DataSocket = new MODULEHELP_SOCKETTEST_DATAINFO; + if (NULL == pSt_DataSocket) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_MALLOC; + return FALSE; + } + pSt_DataSocket->bIsRun = TRUE; + pSt_DataSocket->bIsTCP = bTCP; + pSt_DataSocket->lParam = lParam; + pSt_DataSocket->lpCall_TestDatas = fpCall_DataTest; + BaseLib_OperatorHandle_Create(&pSt_DataSocket->xhToken); + memcpy(&pSt_DataSocket->st_SocketData, pSt_SocketDatas, sizeof(MODULEHELP_SOCKETTEST_DATAS)); + //创建客户端 + if (pSt_DataSocket->bIsTCP) + { + if (!XClient_TCPSelect_Create(&pSt_DataSocket->hSocket, pSt_SocketDatas->st_REConnect.tszAddr, pSt_SocketDatas->st_REConnect.nPort)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = XClient_GetLastError(); + return FALSE; + } + } + else + { + if (!XClient_UDPSelect_Create(&pSt_DataSocket->hSocket)) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = XClient_GetLastError(); + return FALSE; + } + } + //创建线程 + pSt_DataSocket->pSTDThread = make_shared(ModuleHelp_SocketTest_ThreadData, pSt_DataSocket); + if (!pSt_DataSocket->pSTDThread->joinable()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_THREAD; + return FALSE; + } + *pxhToken = pSt_DataSocket->xhToken; + st_LockData.lock(); + stl_MapDataTest.insert(make_pair(pSt_DataSocket->xhToken, pSt_DataSocket)); + st_LockData.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModuleHelp_SocketTest_GetDatas +函数功能:获取是否在处理中 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入操作的句柄 + 参数.二:pbRun + In/Out:Out + 类型:逻辑型指针 + 可空:N + 意思:输出是否在运行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_GetDatas(XNETHANDLE xhToken, BOOL* pbRun) +{ + ModuleHelp_IsErrorOccur = FALSE; + + st_LockData.lock_shared(); + unordered_map::iterator stl_MapIterator = stl_MapDataTest.find(xhToken); + if (stl_MapIterator == stl_MapDataTest.end()) + { + ModuleHelp_IsErrorOccur = TRUE; + ModuleHelp_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_HELP_SOCKETTEST_NOTFOUND; + st_LockData.unlock_shared(); + return FALSE; + } + *pbRun = stl_MapIterator->second->bIsRun; + st_LockData.unlock_shared(); + return TRUE; +} +/************************************************************************ +函数名称:ModuleHelp_SocketTest_DatasStop +函数功能:停止大数据包测试 + 参数.一:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入测试的句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +************************************************************************/ +BOOL CModuleHelp_SocketTest::ModuleHelp_SocketTest_StopDatas(XNETHANDLE xhToken) +{ + ModuleHelp_IsErrorOccur = FALSE; + + st_LockData.unlock(); + unordered_map::iterator stl_MapIterator = stl_MapDataTest.find(xhToken); + if (stl_MapIterator != stl_MapDataTest.end()) + { + //关闭客户端 + stl_MapIterator->second->bIsRun = FALSE; + stl_MapIterator->second->pSTDThread->join(); + XClient_TCPSelect_Close(stl_MapIterator->second->hSocket); + + if (NULL != stl_MapIterator->second->lParam) + { + delete (TCHAR*)stl_MapIterator->second->lParam; + stl_MapIterator->second->lParam = NULL; + } + + delete stl_MapIterator->second; + stl_MapIterator->second = NULL; + + stl_MapDataTest.erase(stl_MapIterator); + } + st_LockData.unlock(); + return TRUE; +} +////////////////////////////////////////////////////////////////////////// +// 线程函数 +////////////////////////////////////////////////////////////////////////// +XHTHREAD CModuleHelp_SocketTest::ModuleHelp_SocketTest_ThreadConn(LPVOID lParam) +{ + MODULEHELP_SOCKETTEST_CONNINFO* pSt_ReConnect = (MODULEHELP_SOCKETTEST_CONNINFO*)lParam; + __int64x nFailed = 0; + __int64x nSucess = 0; + __int64x nNumber = 0; + + while (TRUE) + { + if ((nNumber >= pSt_ReConnect->st_SocketConn.nConnectTest) && (-1 != pSt_ReConnect->st_SocketConn.nConnectTest)) + { + break; + } + if (!pSt_ReConnect->bIsRun) + { + break; + } + //设置TCP + SOCKET hSocket = INVALID_SOCKET; + if (XClient_TCPSelect_Create(&hSocket, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, 100)) + { + pSt_ReConnect->lpCall_ReConnect(pSt_ReConnect->xhToken, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, ++nNumber, nFailed, ++nSucess, 0, pSt_ReConnect->lParam); + } + else + { + pSt_ReConnect->lpCall_ReConnect(pSt_ReConnect->xhToken, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, ++nNumber, ++nFailed, nSucess, 1, pSt_ReConnect->lParam); + } + //等待指定时间关闭客户端 + std::this_thread::sleep_for(std::chrono::milliseconds(pSt_ReConnect->st_SocketConn.nContWaitTime)); + XClient_TCPSelect_Close(hSocket); + //等待指定时链接 + std::this_thread::sleep_for(std::chrono::milliseconds(pSt_ReConnect->st_SocketConn.nCloseWaitContTime)); + } + pSt_ReConnect->lpCall_ReConnect(pSt_ReConnect->xhToken, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, nNumber, nFailed, nSucess, 2, pSt_ReConnect->lParam); + pSt_ReConnect->bIsRun = FALSE; + return 0; +} +XHTHREAD CModuleHelp_SocketTest::ModuleHelp_SocketTest_ThreadData(LPVOID lParam) +{ + MODULEHELP_SOCKETTEST_DATAINFO* pSt_DataSocket = (MODULEHELP_SOCKETTEST_DATAINFO*)lParam; + __int64x nFailed = 0; + __int64x nSucess = 0; + __int64x nNumber = 0; + + while (TRUE) + { + if ((nNumber >= pSt_DataSocket->st_SocketData.st_REConnect.nConnectTest) && (-1 != pSt_DataSocket->st_SocketData.st_REConnect.nConnectTest)) + { + break; + } + if (!pSt_DataSocket->bIsRun) + { + break; + } + //发送数据 + BOOL bRet = FALSE; + if (pSt_DataSocket->bIsTCP) + { + bRet = XClient_TCPSelect_SendMsg(pSt_DataSocket->hSocket, pSt_DataSocket->st_SocketData.tszSDBuffer, pSt_DataSocket->st_SocketData.nSDLen); + } + else + { + bRet = XClient_UDPSelect_SendMsg(pSt_DataSocket->hSocket, pSt_DataSocket->st_SocketData.tszSDBuffer, pSt_DataSocket->st_SocketData.nSDLen, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort); + } + if (bRet) + { + //是否需要接受数据 + if (pSt_DataSocket->st_SocketData.nRVLen > 0) + { + //是否需要可读判断 + if (XClient_OPTSocket_IOSelect(pSt_DataSocket->hSocket, TRUE, pSt_DataSocket->st_SocketData.st_REConnect.nContWaitTime)) + { + //接受数据 + int nMsgLen = pSt_DataSocket->st_SocketData.nRVLen; + TCHAR tszMsgBuffer[4096]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + if (pSt_DataSocket->bIsTCP) + { + XClient_TCPSelect_RecvMsg(pSt_DataSocket->hSocket, tszMsgBuffer, &nMsgLen); + } + else + { + XClient_UDPSelect_RecvMsg(pSt_DataSocket->hSocket, tszMsgBuffer, &nMsgLen); + } + //需要验证数据 + if (0 == memcmp(pSt_DataSocket->st_SocketData.tszRVBuffer, tszMsgBuffer, pSt_DataSocket->st_SocketData.nRVLen)) + { + pSt_DataSocket->lpCall_TestDatas(pSt_DataSocket->xhToken, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort, ++nNumber, nFailed, ++nSucess, 0, pSt_DataSocket->lParam); + } + else + { + pSt_DataSocket->lpCall_TestDatas(pSt_DataSocket->xhToken, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort, ++nNumber, ++nFailed, nSucess, 1, pSt_DataSocket->lParam); + } + } + else + { + pSt_DataSocket->lpCall_TestDatas(pSt_DataSocket->xhToken, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort, ++nNumber, ++nFailed, nSucess, 1, pSt_DataSocket->lParam); + } + } + } + else + { + pSt_DataSocket->lpCall_TestDatas(pSt_DataSocket->xhToken, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort, ++nNumber, ++nFailed, nSucess, 1, pSt_DataSocket->lParam); + } + std::this_thread::sleep_for(std::chrono::milliseconds(pSt_DataSocket->st_SocketData.st_REConnect.nCloseWaitContTime)); + } + pSt_DataSocket->lpCall_TestDatas(pSt_DataSocket->xhToken, pSt_DataSocket->st_SocketData.st_REConnect.tszAddr, pSt_DataSocket->st_SocketData.st_REConnect.nPort, nNumber, nFailed, nSucess, 2, pSt_DataSocket->lParam); + pSt_DataSocket->bIsRun = FALSE; + return 0; +} diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.h new file mode 100644 index 0000000000000000000000000000000000000000..8daa663fc0262e3545f5943df9a3d6375b66c2f6 --- /dev/null +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.h @@ -0,0 +1,60 @@ +#pragma once +/******************************************************************** +// Created: 2023/02/06 11:26:18 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_SocketTest\ModuleHelp_SocketTest.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\ModuleHelp_SocketTest +// File Base: ModuleHelp_SocketTest +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 套接字测试 +// History: +*********************************************************************/ +typedef struct +{ + MODULEHELP_SOCKETTEST_DATAS st_SocketData; + XNETHANDLE xhToken; //句柄 + SOCKET hSocket; + BOOL bIsTCP; + BOOL bIsRun; //是否运行 + + shared_ptr pSTDThread; + LPVOID lParam; + CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST lpCall_TestDatas; +}MODULEHELP_SOCKETTEST_DATAINFO; +typedef struct +{ + MODULEHELP_SOCKETTEST_RECONNECT st_SocketConn; + XNETHANDLE xhToken; //句柄 + BOOL bIsRun; //是否运行 + + shared_ptr pSTDThread; //线程句柄 + LPVOID lParam; + CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST lpCall_ReConnect; +}MODULEHELP_SOCKETTEST_CONNINFO; + + +class CModuleHelp_SocketTest +{ +public: + CModuleHelp_SocketTest(); + ~CModuleHelp_SocketTest(); +public: + //链接测试 + BOOL ModuleHelp_SocketTest_StartConnect(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_RECONNECT* pSt_ReConnect, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_ReConnect, LPVOID lParam = NULL); + BOOL ModuleHelp_SocketTest_GetConnect(XNETHANDLE xhToken, BOOL* pbRun); + BOOL ModuleHelp_SocketTest_StopConnect(XNETHANDLE xhToken); + //数据包压力测试 + BOOL ModuleHelp_SocketTest_StartDatas(XNETHANDLE* pxhToken, MODULEHELP_SOCKETTEST_DATAS* pSt_SocketDatas, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_DataTest, BOOL bTCP = TRUE, LPVOID lParam = NULL); + BOOL ModuleHelp_SocketTest_GetDatas(XNETHANDLE xhToken, BOOL* pbRun); + BOOL ModuleHelp_SocketTest_StopDatas(XNETHANDLE xhToken); +protected: + static XHTHREAD ModuleHelp_SocketTest_ThreadConn(LPVOID lParam); //反复连接测试线程 + static XHTHREAD ModuleHelp_SocketTest_ThreadData(LPVOID lParam); //大数据包长连接测试 +private: + shared_mutex st_LockConn; + shared_mutex st_LockData; +private: + unordered_map stl_MapConnTest; + unordered_map stl_MapDataTest; +}; diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def index a001998006f2c6d36b8d19c41fe7b1bf0b16a87b..0ea486ee8330531dec1d1d8e0127059776b6dd97 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def @@ -26,4 +26,16 @@ EXPORTS ModuleHelp_Locker_ReadUNLock ModuleHelp_Locker_WriteLock ModuleHelp_Locker_WriteUNLock - ModuleHelp_Locker_Close \ No newline at end of file + ModuleHelp_Locker_Close + + ModuleHelp_QRCode_QREncodecFile + ModuleHelp_QRCode_QREncodecMemory + ModuleHelp_QRCode_QRDecodecFile + ModuleHelp_QRCode_QRDecodecMemory + + ModuleHelp_SocketTest_StartConnect + ModuleHelp_SocketTest_GetConnect + ModuleHelp_SocketTest_StopConnect + ModuleHelp_SocketTest_StartDatas + ModuleHelp_SocketTest_GetDatas + ModuleHelp_SocketTest_StopDatas \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj index 0a0d106beed4e42aa14fb70b607651f483e78d61..9d54c9149934c324c3573c6e251261652b019295 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj @@ -170,6 +170,8 @@ + + @@ -178,6 +180,8 @@ + + Create Create diff --git a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters index 7650929bd7b77b59e1a86c257e5e66a86393cab5..98c30b1c0f98050a15fe7027d63c3ffa6fc89a65 100644 --- a/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters +++ b/XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj.filters @@ -37,6 +37,18 @@ {7e3b001c-b07c-4457-ab32-54b6d25ccbae} + + {133df44f-aebf-43ba-840b-a75388ba2143} + + + {54085aa4-6c15-4804-b7f0-5e9ca22048f1} + + + {f2db5c16-904c-40ff-b9e4-5d92a8de34bc} + + + {55b22eea-ccd0-48d4-96e7-232b15fdb0dc} + @@ -63,6 +75,12 @@ 头文件\ModuleHelp_Locker + + 头文件\ModuleHelp_QRCode + + + 头文件\ModuleHelp_SocketTest + @@ -83,6 +101,12 @@ 源文件\ModuleHelp_Locker + + 源文件\ModuleHelp_QRCode + + + 源文件\ModuleHelp_SocketTest + diff --git a/XEngine_Source/XEngine_ModuleHelp/pch.cpp b/XEngine_Source/XEngine_ModuleHelp/pch.cpp index 786aac64a7cc8688fd7eabe9ab33ec17ab9eb5f6..eb5d864bd402253b06574a467b6e7b1386efaa29 100644 --- a/XEngine_Source/XEngine_ModuleHelp/pch.cpp +++ b/XEngine_Source/XEngine_ModuleHelp/pch.cpp @@ -3,6 +3,8 @@ #include "ModuleHelp_Language/ModuleHelp_Language.h" #include "ModuleHelp_P2PClient/ModuleHelp_P2PClient.h" #include "ModuleHelp_Locker/ModuleHelp_Locker.h" +#include "ModuleHelp_QRCode/ModuleHelp_QRCode.h" +#include "ModuleHelp_SocketTest/ModuleHelp_SocketTest.h" /******************************************************************** // Created: 2022/03/04 13:37:38 // File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleHelp\pch.cpp @@ -21,6 +23,8 @@ CModuleHelp_IDCard m_IDCard; CModuleHelp_Language m_Language; CModuleHelp_P2PClient m_P2PClient; CModuleHelp_Locker m_Locker; +CModuleHelp_QRCode m_QRCode; +CModuleHelp_SocketTest m_SocketTest; ////////////////////////////////////////////////////////////////////////// /// 导出的函数 ////////////////////////////////////////////////////////////////////////// @@ -127,4 +131,50 @@ extern "C" BOOL ModuleHelp_Locker_WriteUNLock(XNETHANDLE xhToken) extern "C" BOOL ModuleHelp_Locker_Close(XNETHANDLE xhToken) { return m_Locker.ModuleHelp_Locker_Close(xhToken); +} +/************************************************************************/ +/* 二维码导出函数 */ +/************************************************************************/ +extern "C" BOOL ModuleHelp_QRCode_QREncodecFile(LPCTSTR lpszFileName, LPCTSTR lpszMsgBuffer) +{ + return m_QRCode.ModuleHelp_QRCode_QREncodecFile(lpszFileName, lpszMsgBuffer); +} +extern "C" BOOL ModuleHelp_QRCode_QREncodecMemory(LPCTSTR lpszMsgBuffer, TCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCTSTR lpszFmt) +{ + return m_QRCode.ModuleHelp_QRCode_QREncodecMemory(lpszMsgBuffer, ptszMsgBuffer, pInt_MsgLen, lpszFmt); +} +extern "C" BOOL ModuleHelp_QRCode_QRDecodecFile(LPCTSTR lpszFileName, TCHAR * ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel) +{ + return m_QRCode.ModuleHelp_QRCode_QRDecodecFile(lpszFileName, ptszMsgBuffer, lpszDetectProto, lpszDetectModel, lpszSrProto, lpszSrModel); +} +extern "C" BOOL ModuleHelp_QRCode_QRDecodecMemory(LPCSTR lpszMsgBuffer, int nMsgLen, TCHAR * ptszMsgBuffer, LPCTSTR lpszDetectProto, LPCTSTR lpszDetectModel, LPCTSTR lpszSrProto, LPCTSTR lpszSrModel) +{ + return m_QRCode.ModuleHelp_QRCode_QRDecodecMemory(lpszMsgBuffer, nMsgLen, ptszMsgBuffer, lpszDetectProto, lpszDetectModel, lpszSrProto, lpszSrModel); +} +/************************************************************************/ +/* 网络测试导出函数 */ +/************************************************************************/ +extern "C" BOOL ModuleHelp_SocketTest_StartConnect(XNETHANDLE * pxhToken, MODULEHELP_SOCKETTEST_RECONNECT * pSt_ReConnect, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_ReConnect, LPVOID lParam) +{ + return m_SocketTest.ModuleHelp_SocketTest_StartConnect(pxhToken, pSt_ReConnect, fpCall_ReConnect, lParam); +} +extern "C" BOOL ModuleHelp_SocketTest_GetConnect(XNETHANDLE xhToken, BOOL * pbRun) +{ + return m_SocketTest.ModuleHelp_SocketTest_GetConnect(xhToken, pbRun); +} +extern "C" BOOL ModuleHelp_SocketTest_StopConnect(XNETHANDLE xhToken) +{ + return m_SocketTest.ModuleHelp_SocketTest_StopConnect(xhToken); +} +extern "C" BOOL ModuleHelp_SocketTest_StartDatas(XNETHANDLE * pxhToken, MODULEHELP_SOCKETTEST_DATAS * pSt_SocketDatas, CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST fpCall_DataTest, BOOL bTCP, LPVOID lParam) +{ + return m_SocketTest.ModuleHelp_SocketTest_StartDatas(pxhToken, pSt_SocketDatas, fpCall_DataTest, bTCP, lParam); +} +extern "C" BOOL ModuleHelp_SocketTest_GetDatas(XNETHANDLE xhToken, BOOL * pbRun) +{ + return m_SocketTest.ModuleHelp_SocketTest_GetDatas(xhToken, pbRun); +} +extern "C" BOOL ModuleHelp_SocketTest_StopDatas(XNETHANDLE xhToken) +{ + return m_SocketTest.ModuleHelp_SocketTest_StopDatas(xhToken); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleHelp/pch.h b/XEngine_Source/XEngine_ModuleHelp/pch.h index cf8824c90a3adfd9cc3600fe2a03b86dfb594bca..8b7a4c84fc9fec803d58783ababcea46a2da0dcf 100644 --- a/XEngine_Source/XEngine_ModuleHelp/pch.h +++ b/XEngine_Source/XEngine_ModuleHelp/pch.h @@ -11,22 +11,32 @@ // 添加要在此处预编译的标头 #include "framework.h" #include +#include #endif #endif //PCH_H #include #include #include #include +#include #include #include #include #include +#ifdef _MSC_BUILD +#include +#include +#include +#include +#endif using namespace std; #include #include #include #include #include +#include +#include #include "../XEngine_UserProtocol.h" #include "ModuleHelp_Define.h" #include "ModuleHelp_Error.h" @@ -46,4 +56,9 @@ extern DWORD ModuleHelp_dwErrorCode; #ifdef _MSC_BUILD #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_Client/XClient_Socket") +#else +#if __linux__ && !__ANDROID__ +#pragma GCC diagnostic ignored "-Wclass-memaccess" +#endif #endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h index a11ba459eaa2590d4c5dd6fdae449fdebcd5c123..86554dd05fb13c303ff34d6e8f7ffca380ed4743 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h @@ -222,6 +222,83 @@ extern "C" BOOL ModuleProtocol_Packet_Locker(TCHAR* ptszMsgBuffer, int* pInt_Msg *********************************************************************/ extern "C" BOOL ModuleProtocol_Packet_ZIPCode(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_ZIPINFO* pSt_ZIPInfo, int nCode = 0, LPCTSTR lpszMsgBuffer = NULL); /******************************************************************** +函数名称:ModuleProtocol_Packet_TestReport +函数功能:套接字测试信息打包 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打包的数据信息 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出打包大小 + 参数.三:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入句柄 + 参数.四:lpszIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 参数.五:nIPPort + In/Out:In + 类型:整数型 + 可空:N + 意思:测试的端口 + 参数.六:nNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:测试的次数 + 参数.七:nFailed + In/Out:In + 类型:整数型 + 可空:N + 意思:失败的次数 + 参数.八:nSuccess + In/Out:In + 类型:整数型 + 可空:N + 意思:成功的次数 + 参数.九:nStatus + In/Out:In + 类型:整数型 + 可空:N + 意思:运行状态 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Packet_TestReport(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, LPCTSTR lpszIPAddr, int nIPPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus); +/******************************************************************** +函数名称:ModuleProtocol_Packet_TestReply +函数功能:请求返回 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打包的数据信息 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出打包大小 + 参数.三:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Packet_TestReply(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken); +/******************************************************************** 函数名称:ModuleProtocol_Packet_P2PLan 函数功能:响应同步局域网地址列表 参数.一:ptszMsgBuffer @@ -497,4 +574,52 @@ extern "C" BOOL ModuleProtocol_Parse_ZIPCode(LPCTSTR lpszMsgBuffer, int nMsgLen, 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleProtocol_Parse_XLog(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_XLOGINFO* pSt_XLogInfo); \ No newline at end of file +extern "C" BOOL ModuleProtocol_Parse_XLog(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_XLOGINFO* pSt_XLogInfo); +/******************************************************************** +函数名称:ModuleProtocol_Parse_QRCode +函数功能:二维码协议解析 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入数据大小 + 参数.三:pSt_QRCode + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Parse_QRCode(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_QRCODE* pSt_QRCode); +/******************************************************************** +函数名称:ModuleProtocol_Parse_SocketTest +函数功能:套接字测试协议解析 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:pSt_SocketTest + 参数.三:pSt_QRCode + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleProtocol_Parse_SocketTest(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_SOCKETTEST* pSt_SocketTest); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp index 928509337ce4b26053f766c3ff41459ee1d0e808..b715fde742936f9fd14ec1e0a890d0844925e4a0 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -531,6 +531,137 @@ BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_Log(TCHAR* ptszMsgBuffer, int return TRUE; } /******************************************************************** +函数名称:ModuleProtocol_Packet_TestReport +函数功能:套接字测试信息打包 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打包的数据信息 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出打包大小 + 参数.三:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入句柄 + 参数.四:lpszIPAddr + In/Out:In + 类型:常量字符指针 + 可空:N + 参数.五:nIPPort + In/Out:In + 类型:整数型 + 可空:N + 意思:测试的端口 + 参数.六:nNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:测试的次数 + 参数.七:nFailed + In/Out:In + 类型:整数型 + 可空:N + 意思:失败的次数 + 参数.八:nSuccess + In/Out:In + 类型:整数型 + 可空:N + 意思:成功的次数 + 参数.九:nStatus + In/Out:In + 类型:整数型 + 可空:N + 意思:运行状态 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_TestReport(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, LPCTSTR lpszIPAddr, int nIPPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus) +{ + ModuleProtocol_IsErrorOccur = FALSE; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PACKET_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + Json::StreamWriterBuilder st_JsonBuilder; + + st_JsonObject["lpszIPAddr"] = lpszIPAddr; + st_JsonObject["nIPPort"] = nIPPort; + st_JsonObject["xhToken"] = (Json::Value::Int64)xhToken; + st_JsonObject["nNumber"] = (Json::Value::Int64)nNumber; + st_JsonObject["nFailed"] = (Json::Value::Int64)nFailed; + st_JsonObject["nSuccess"] = (Json::Value::Int64)nSuccess; + st_JsonObject["nStatus"] = nStatus; + + st_JsonRoot["code"] = 0; + st_JsonRoot["msg"] = "success"; + st_JsonRoot["data"] = st_JsonObject; + st_JsonBuilder["emitUTF8"] = true; + + *pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length(); + memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen); + return TRUE; +} +/******************************************************************** +函数名称:ModuleProtocol_Packet_TestReply +函数功能:请求返回 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出打包的数据信息 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出打包大小 + 参数.三:xhToken + In/Out:In + 类型:句柄 + 可空:N + 意思:输入句柄 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_TestReply(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken) +{ + ModuleProtocol_IsErrorOccur = FALSE; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PACKET_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + Json::StreamWriterBuilder st_JsonBuilder; + + st_JsonObject["xhToken"] = (Json::Value::Int64)xhToken; + + st_JsonRoot["code"] = 0; + st_JsonRoot["msg"] = "success"; + st_JsonRoot["data"] = st_JsonObject; + st_JsonBuilder["emitUTF8"] = true; + + *pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length(); + memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen); + return TRUE; +} +/******************************************************************** 函数名称:ModuleProtocol_Packet_P2PLan 函数功能:响应同步局域网地址列表 参数.一:ptszMsgBuffer diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h index 9816e7033677588d4720fe3364459251aeaf870f..05049baa9c9a0193b3cb9071a44e13a98c042b8f 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h @@ -29,6 +29,8 @@ public: BOOL ModuleProtocol_Packet_Locker(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, int nCode = 0, LPCTSTR lpszMsgBuffer = NULL); BOOL ModuleProtocol_Packet_ZIPCode(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_ZIPINFO* pSt_ZIPInfo, int nCode = 0, LPCTSTR lpszMsgBuffer = NULL); BOOL ModuleProtocol_Packet_Log(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_XLOGINFO*** pppSt_XLogList, int nListCount); + BOOL ModuleProtocol_Packet_TestReport(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, LPCTSTR lpszIPAddr, int nIPPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus); + BOOL ModuleProtocol_Packet_TestReply(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken); public: BOOL ModuleProtocol_Packet_P2PLan(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_P2XPPEER_PROTOCOL*** pppSt_ListClients, int nListCount); BOOL ModuleProtocol_Packet_P2PWLan(TCHAR* ptszMsgBuffer, int* pInt_MsgLen, list* pStl_ListClients); diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp index 685fae1f79eec003c4251c12065e4c502e7140b2..819108a2879c21134c36e209ba09cc13639da62e 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp @@ -461,4 +461,164 @@ BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_XLog(LPCTSTR lpszMsgBuffer, int pSt_XLogInfo->st_ProtocolLog.nLogLevel = st_JsonRoot["nLogLevel"].asInt(); } return TRUE; +} +/******************************************************************** +函数名称:ModuleProtocol_Parse_QRCode +函数功能:二维码协议解析 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入数据大小 + 参数.三:pSt_QRCode + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_QRCode(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_QRCODE* pSt_QRCode) +{ + ModuleProtocol_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_QRCode)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + //解析JSON + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT; + return FALSE; + } + + if (!st_JsonRoot["tszMsgBuffer"].isNull()) + { + _tcscpy(pSt_QRCode->tszMsgBuffer, st_JsonRoot["tszMsgBuffer"].asCString()); + } + if (!st_JsonRoot["tszFmtBuffer"].isNull()) + { + _tcscpy(pSt_QRCode->tszFmtBuffer, st_JsonRoot["tszFmtBuffer"].asCString()); + } + return TRUE; +} +/******************************************************************** +函数名称:ModuleProtocol_Parse_SocketTest +函数功能:套接字测试协议解析 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:pSt_SocketTest + 参数.三:pSt_QRCode + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_SocketTest(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_SOCKETTEST* pSt_SocketTest) +{ + ModuleProtocol_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_SocketTest)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + //解析JSON + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + ModuleProtocol_IsErrorOccur = TRUE; + ModuleProtocol_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PROTOCOL_PARSE_PARAMENT; + return FALSE; + } + + if (!st_JsonRoot["tszAPIUrl"].isNull()) + { + _tcscpy(pSt_SocketTest->tszAPIUrl, st_JsonRoot["tszAPIUrl"].asCString()); + } + if (!st_JsonRoot["xhToken"].isNull()) + { + pSt_SocketTest->xhToken = st_JsonRoot["xhToken"].asInt64(); + } + if (!st_JsonRoot["bTCP"].isNull()) + { + pSt_SocketTest->bTCP = st_JsonRoot["bTCP"].asBool(); + } + if (!st_JsonRoot["bConn"].isNull()) + { + pSt_SocketTest->bConn = st_JsonRoot["bConn"].asBool(); + } + //链接 + if (!st_JsonRoot["tszAddr"].isNull()) + { + _tcscpy(pSt_SocketTest->st_SocketConn.tszAddr, st_JsonRoot["tszAddr"].asCString()); + } + if (!st_JsonRoot["nPort"].isNull()) + { + pSt_SocketTest->st_SocketConn.nPort = st_JsonRoot["nPort"].asInt(); + } + if (!st_JsonRoot["nCloseWaitContTime"].isNull()) + { + pSt_SocketTest->st_SocketConn.nCloseWaitContTime = st_JsonRoot["nCloseWaitContTime"].asInt(); + } + if (!st_JsonRoot["nConnectCount"].isNull()) + { + pSt_SocketTest->st_SocketConn.nConnectCount = st_JsonRoot["nConnectCount"].asInt(); + } + if (!st_JsonRoot["nConnectTest"].isNull()) + { + pSt_SocketTest->st_SocketConn.nConnectTest = st_JsonRoot["nConnectTest"].asInt(); + } + if (!st_JsonRoot["nContWaitTime"].isNull()) + { + pSt_SocketTest->st_SocketConn.nContWaitTime = st_JsonRoot["nContWaitTime"].asInt(); + } + //数据 + if (!st_JsonRoot["tszSDBuffer"].isNull()) + { + _tcscpy(pSt_SocketTest->st_SocketData.tszSDBuffer, st_JsonRoot["tszSDBuffer"].asCString()); + } + if (!st_JsonRoot["tszRVBuffer"].isNull()) + { + _tcscpy(pSt_SocketTest->st_SocketData.tszRVBuffer, st_JsonRoot["tszRVBuffer"].asCString()); + } + if (!st_JsonRoot["nRVLen"].isNull()) + { + pSt_SocketTest->st_SocketData.nRVLen = st_JsonRoot["nRVLen"].asInt(); + } + if (!st_JsonRoot["nSDLen"].isNull()) + { + pSt_SocketTest->st_SocketData.nSDLen = st_JsonRoot["nSDLen"].asInt(); + } + return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h index 285b07480ba47da0a78b48dfcc90b6938404f102..2637b42b76a2575158cfe5e77ebe0fa0b20f947c 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h @@ -24,5 +24,7 @@ public: BOOL ModuleProtocol_Parse_P2PClient(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_P2XPPEER_PROTOCOL* pSt_P2XPPeer); BOOL ModuleProtocol_Parse_ZIPCode(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_ZIPINFO* pSt_ZIPInfo); BOOL ModuleProtocol_Parse_XLog(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_XLOGINFO* pSt_XLogInfo); + BOOL ModuleProtocol_Parse_QRCode(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_QRCODE* pSt_QRCode); + BOOL ModuleProtocol_Parse_SocketTest(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_SOCKETTEST* pSt_SocketTest); private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def index 36636b3a0fd6753edb1b8c2aab9fab0868305fa4..c7f4517b231955a43771a617b65d402377d91c2f 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def +++ b/XEngine_Source/XEngine_ModuleProtocol/XEngine_ModuleProtocol.def @@ -10,6 +10,8 @@ EXPORTS ModuleProtocol_Packet_Locker ModuleProtocol_Packet_ZIPCode ModuleProtocol_Packet_Log + ModuleProtocol_Packet_TestReport + ModuleProtocol_Packet_TestReply ModuleProtocol_Packet_P2PLan ModuleProtocol_Packet_P2PWLan ModuleProtocol_Packet_P2PUser @@ -20,4 +22,6 @@ EXPORTS ModuleProtocol_Parse_Translation ModuleProtocol_Parse_P2PClient ModuleProtocol_Parse_ZIPCode - ModuleProtocol_Parse_XLog \ No newline at end of file + ModuleProtocol_Parse_XLog + ModuleProtocol_Parse_QRCode + ModuleProtocol_Parse_SocketTest \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp index 9450579f0fd40654fb5082b1c35ef4235eceb951..9ee47f53229789b8ec914301155118d22bb3b843 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp @@ -59,6 +59,14 @@ extern "C" BOOL ModuleProtocol_Packet_Log(TCHAR * ptszMsgBuffer, int* pInt_MsgLe { return m_ProtocolPacket.ModuleProtocol_Packet_Log(ptszMsgBuffer, pInt_MsgLen, pppSt_XLogList, nListCount); } +extern "C" BOOL ModuleProtocol_Packet_TestReport(TCHAR * ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken, LPCTSTR lpszIPAddr, int nIPPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus) +{ + return m_ProtocolPacket.ModuleProtocol_Packet_TestReport(ptszMsgBuffer, pInt_MsgLen, xhToken, lpszIPAddr, nIPPort, nNumber, nFailed, nSuccess, nStatus); +} +extern "C" BOOL ModuleProtocol_Packet_TestReply(TCHAR * ptszMsgBuffer, int* pInt_MsgLen, XNETHANDLE xhToken) +{ + return m_ProtocolPacket.ModuleProtocol_Packet_TestReply(ptszMsgBuffer, pInt_MsgLen, xhToken); +} extern "C" BOOL ModuleProtocol_Packet_P2PLan(TCHAR * ptszMsgBuffer, int* pInt_MsgLen, XENGINE_P2XPPEER_PROTOCOL * **pppSt_ListClients, int nListCount) { return m_ProtocolPacket.ModuleProtocol_Packet_P2PLan(ptszMsgBuffer, pInt_MsgLen, pppSt_ListClients, nListCount); @@ -101,4 +109,12 @@ extern "C" BOOL ModuleProtocol_Parse_ZIPCode(LPCTSTR lpszMsgBuffer, int nMsgLen, extern "C" BOOL ModuleProtocol_Parse_XLog(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_XLOGINFO * pSt_XLogInfo) { return m_ProtocolParse.ModuleProtocol_Parse_XLog(lpszMsgBuffer, nMsgLen, pSt_XLogInfo); +} +extern "C" BOOL ModuleProtocol_Parse_QRCode(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_QRCODE * pSt_QRCode) +{ + return m_ProtocolParse.ModuleProtocol_Parse_QRCode(lpszMsgBuffer, nMsgLen, pSt_QRCode); +} +extern "C" BOOL ModuleProtocol_Parse_SocketTest(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_SOCKETTEST * pSt_SocketTest) +{ + return m_ProtocolParse.ModuleProtocol_Parse_SocketTest(lpszMsgBuffer, nMsgLen, pSt_SocketTest); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile index a63e6f179553f3c2cacbf80795f6794fd5dac5ad..ed95c4fd0c2b5224ffd50ef17fbd32c1091bfe86 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile @@ -10,7 +10,7 @@ LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool LIBEX = -ldl -lpthread LOADSO = -Wl,-rpath=./,--disable-new-dtags LIBINCLUDE = XEngine_Configure.o XEngine_Network.o XEngine_HTTPTask.o XEngine_PluginTask.o XEngine_HttpApp.o \ - HTTPTask_IDCard.o HTTPTask_Bank.o HTTPTask_Language.o HTTPTask_Translation.o HTTPTask_P2PClient.o HTTPTask_OPtions.o HTTPTask_Locker.o HTTPTask_PostCode.o HTTPTask_Log.o + HTTPTask_IDCard.o HTTPTask_Bank.o HTTPTask_Language.o HTTPTask_Translation.o HTTPTask_P2PClient.o HTTPTask_OPtions.o HTTPTask_Locker.o HTTPTask_PostCode.o HTTPTask_Log.o HTTPTask_QRCode.o HTTPTask_SocketTest.o ifeq ($(shell uname),Darwin) LOADSO = @@ -61,6 +61,10 @@ HTTPTask_PostCode.o:./XEngine_HTTPTask/HTTPTask_PostCode.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask/HTTPTask_PostCode.cpp HTTPTask_Log.o:./XEngine_HTTPTask/HTTPTask_Log.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask/HTTPTask_Log.cpp +HTTPTask_QRCode.o:./XEngine_HTTPTask/HTTPTask_QRCode.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask/HTTPTask_QRCode.cpp +HTTPTask_SocketTest.o:./XEngine_HTTPTask/HTTPTask_SocketTest.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask/HTTPTask_SocketTest.cpp XEngine_HttpApp.o:./XEngine_HttpApp.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HttpApp.cpp diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index 709f2deda4bb84aff53a8933fbfb842fd3bfed7c..38cde1ea00396aa8e3a7c28c8dfc34b2b3a2f685 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp @@ -79,7 +79,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } TCHAR tszKey[MAX_PATH]; @@ -94,10 +94,12 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR LPCTSTR lpszParamLanguage = _T("language"); LPCTSTR lpszParamTranslation = _T("translation"); LPCTSTR lpszParamLocker = _T("lock"); + LPCTSTR lpszParamQRCode = _T("qrcode"); //post LPCTSTR lpszParamP2PClient = _T("p2p"); LPCTSTR lpszParamZIPCode = _T("zipcode"); LPCTSTR lpszParamXLog = _T("log"); + LPCTSTR lpszParamTest = _T("test"); memset(tszKey, '\0', MAX_PATH); memset(tszValue, '\0', MAX_PATH); @@ -108,7 +110,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } //获得函数名 @@ -119,7 +121,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } //首先处理插件 @@ -143,7 +145,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } XEngine_HTTPTask_P2PClient(lpszClientAddr, lpszRVBuffer, nRVLen, _ttoi(tszValue)); @@ -160,14 +162,14 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } XEngine_HTTPTask_PostCode(lpszClientAddr, lpszRVBuffer, nRVLen, _ttoi(tszValue)); } else if (0 == _tcsnicmp(lpszParamXLog, tszValue, _tcslen(lpszParamXLog))) { - //邮政信息:http://app.xyry.org:5501/api?function=log¶ms1=0 + //日志信息:http://app.xyry.org:5501/api?function=log¶ms1=0 memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszKey, tszValue); @@ -177,11 +179,52 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } XEngine_HTTPTask_LogInfo(lpszClientAddr, lpszRVBuffer, nRVLen, _ttoi(tszValue)); } + else if (0 == _tcsnicmp(lpszParamQRCode, tszValue, _tcslen(lpszParamQRCode))) + { + //二维码生成:http://app.xyry.org:5501/api?function=qrcode¶ms1=0 或者 1 + memset(tszKey, '\0', sizeof(tszKey)); + memset(tszValue, '\0', sizeof(tszValue)); + BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszKey, tszValue); + if (0 != _tcsnicmp(lpszParamName, tszKey, _tcslen(lpszParamName))) + { + st_HDRParam.nHttpCode = 404; + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + return FALSE; + } + XEngine_HTTPTask_QRCode(lpszClientAddr, lpszRVBuffer, nRVLen, _ttoi(tszValue)); + } + else if (0 == _tcsnicmp(lpszParamTest, tszValue, _tcslen(lpszParamTest))) + { + //二维码生成:http://app.xyry.org:5501/api?function=test¶ms1=0 或者 1 + memset(tszKey, '\0', sizeof(tszKey)); + memset(tszValue, '\0', sizeof(tszValue)); + BaseLib_OperatorString_GetKeyValue(pptszList[1], "=", tszKey, tszValue); + if (0 != _tcsnicmp(lpszParamName, tszKey, _tcslen(lpszParamName))) + { + st_HDRParam.nHttpCode = 404; + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + return FALSE; + } + XEngine_HTTPTask_SocketTest(lpszClientAddr, lpszRVBuffer, nRVLen, _ttoi(tszValue)); + } + else + { + st_HDRParam.nHttpCode = 404; + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, lpszRVBuffer); + } } else if (0 == _tcsnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcslen(lpszMethodGet))) { @@ -202,7 +245,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } XEngine_HTTPTask_IDCard(lpszClientAddr, tszValue); @@ -219,7 +262,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } XEngine_HTTPTask_BankInfo(lpszClientAddr, tszValue); @@ -240,7 +283,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } memset(tszKey, '\0', sizeof(tszKey)); @@ -264,7 +307,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszList, nListCount); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } memset(tszKey, '\0', sizeof(tszKey)); @@ -286,6 +329,13 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszKey, tszLockType); XEngine_HTTPTask_Locker(lpszClientAddr, _ttoi64(tszLockToken), (ENUM_XENGINE_APISERVICE_LOCKER_TYPE)_ttoi(tszLockType)); } + else + { + st_HDRParam.nHttpCode = 404; + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("HTTP客户端:%s,发送的请求不支持:%s,内容:\r\n%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, lpszRVBuffer); + } } else { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2fe487a3c41857d9cb11dc348990e8a86db65099 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.cpp @@ -0,0 +1,42 @@ +#include "../XEngine_Hdr.h" + +BOOL XEngine_HTTPTask_QRCode(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nType) +{ + int nSDLen = 0; + int nRVLen = 0; + TCHAR *ptszSDBuffer = (TCHAR *)malloc(XENGIEN_APISERVICE_BUFFER_SIZE); + TCHAR *ptszRVBuffer = (TCHAR *)malloc(XENGIEN_APISERVICE_BUFFER_SIZE); + XENGINE_QRCODE st_QRCode; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 + + memset(ptszSDBuffer, '\0', XENGIEN_APISERVICE_BUFFER_SIZE); + memset(ptszRVBuffer, '\0', XENGIEN_APISERVICE_BUFFER_SIZE); + memset(&st_QRCode, '\0', sizeof(XENGINE_QRCODE)); + memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + + st_HDRParam.nHttpCode = 200; //HTTP CODE码 + st_HDRParam.bIsClose = TRUE; //收到回复后就关闭 + //0创建,1解析 + if (0 == nType) + { + ModuleProtocol_Parse_QRCode(lpszMsgBuffer, nMsgLen, &st_QRCode); + _tcscpy(st_HDRParam.tszMimeType, st_QRCode.tszFmtBuffer + 1); + ModuleHelp_QRCode_QREncodecMemory(st_QRCode.tszMsgBuffer, ptszRVBuffer, &nRVLen, st_QRCode.tszFmtBuffer); + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, ptszSDBuffer, &nSDLen, &st_HDRParam, ptszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, ptszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求创建二维码成功,创建的二维码数据:%s"), lpszClientAddr, st_QRCode.tszMsgBuffer); + } + else + { + ModuleHelp_QRCode_QRDecodecMemory(lpszMsgBuffer, nMsgLen, ptszRVBuffer, st_QRCodeConfig.tszProtoDetect, st_QRCodeConfig.tszModelDetect, st_QRCodeConfig.tszProtoSr, st_QRCodeConfig.tszModelSr); + nRVLen = _tcslen(ptszRVBuffer); + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, ptszSDBuffer, &nSDLen, &st_HDRParam, ptszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, ptszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求二维码解析成功,解析的数据:%s"), lpszClientAddr, ptszRVBuffer); + } + free(ptszRVBuffer); + free(ptszSDBuffer); + ptszRVBuffer = NULL; + ptszSDBuffer = NULL; + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.h new file mode 100644 index 0000000000000000000000000000000000000000..b5bb2a62406df413559f60386a5563a5d57f4e39 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_QRCode.h @@ -0,0 +1,3 @@ +#pragma once + +BOOL XEngine_HTTPTask_QRCode(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e61d630babf2732d6a925e28d8048472a1ba93ae --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.cpp @@ -0,0 +1,103 @@ +#include "../XEngine_Hdr.h" + +void CALLBACK XEngine_HTTPTask_CBSocketTest(XNETHANDLE xhToken, LPCSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, LPVOID lParam) +{ + XENGINE_SOCKETTEST* pSt_SocketTest = (XENGINE_SOCKETTEST*)lParam; + int nMsgLen = 0; + TCHAR tszMsgBuffer[4096]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + + if (0 == pSt_SocketTest->nType) + { + //每次都报告 + ModuleProtocol_Packet_TestReport(tszMsgBuffer, &nMsgLen, xhToken, lpszAddr, nPort, nNumber, nFailed, nSuccess, nStatus); + if (_tcslen(pSt_SocketTest->tszAPIUrl) > 0) + { + APIClient_Http_Request("POST", pSt_SocketTest->tszAPIUrl, tszMsgBuffer); + } + } + else if ((1 == pSt_SocketTest->nType) && (0 == nStatus)) + { + //成功报告 + ModuleProtocol_Packet_TestReport(tszMsgBuffer, &nMsgLen, xhToken, lpszAddr, nPort, nNumber, nFailed, nSuccess, nStatus); + if (_tcslen(pSt_SocketTest->tszAPIUrl) > 0) + { + APIClient_Http_Request("POST", pSt_SocketTest->tszAPIUrl, tszMsgBuffer); + } + } + else if ((2 == pSt_SocketTest->nType) && (1 == nStatus)) + { + //失败报告 + ModuleProtocol_Packet_TestReport(tszMsgBuffer, &nMsgLen, xhToken, lpszAddr, nPort, nNumber, nFailed, nSuccess, nStatus); + if (_tcslen(pSt_SocketTest->tszAPIUrl) > 0) + { + APIClient_Http_Request("POST", pSt_SocketTest->tszAPIUrl, tszMsgBuffer); + } + } + else + { + if (2 == nStatus) + { + //结束报告 + ModuleProtocol_Packet_TestReport(tszMsgBuffer, &nMsgLen, xhToken, lpszAddr, nPort, nNumber, nFailed, nSuccess, nStatus); + if (_tcslen(pSt_SocketTest->tszAPIUrl) > 0) + { + APIClient_Http_Request("POST", pSt_SocketTest->tszAPIUrl, tszMsgBuffer); + } + } + } +} +BOOL XEngine_HTTPTask_SocketTest(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nType) +{ + int nSDLen = 0; + int nRVLen = 0; + TCHAR tszSDBuffer[4096]; + TCHAR tszRVBuffer[4096]; + XENGINE_SOCKETTEST *pSt_SocketTest = new XENGINE_SOCKETTEST; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 + + memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + memset(tszRVBuffer, '\0', sizeof(tszRVBuffer)); + memset(pSt_SocketTest, '\0', sizeof(XENGINE_SOCKETTEST)); + memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + + st_HDRParam.nHttpCode = 200; //HTTP CODE码 + st_HDRParam.bIsClose = TRUE; //收到回复后就关闭 + + ModuleProtocol_Parse_SocketTest(lpszMsgBuffer, nMsgLen, pSt_SocketTest); + //0创建,1删除 + if (0 == nType) + { + if (pSt_SocketTest->bConn) + { + ModuleHelp_SocketTest_StartConnect(&pSt_SocketTest->xhToken, &pSt_SocketTest->st_SocketConn, XEngine_HTTPTask_CBSocketTest, pSt_SocketTest); + } + else + { + memcpy(&pSt_SocketTest->st_SocketData.st_REConnect, &pSt_SocketTest->st_SocketConn, sizeof(MODULEHELP_SOCKETTEST_RECONNECT)); + ModuleHelp_SocketTest_StartDatas(&pSt_SocketTest->xhToken, &pSt_SocketTest->st_SocketData, XEngine_HTTPTask_CBSocketTest, pSt_SocketTest->bTCP, pSt_SocketTest); + } + ModuleProtocol_Packet_TestReply(tszRVBuffer, &nRVLen, pSt_SocketTest->xhToken); + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求创建套接字测试成功,句柄:%lld,地址:%s:%d,TCP:%d,测试类型:%d"), lpszClientAddr, pSt_SocketTest->xhToken, pSt_SocketTest->st_SocketConn.tszAddr, pSt_SocketTest->st_SocketConn.nPort, pSt_SocketTest->bTCP, pSt_SocketTest->bConn); + } + else + { + if (pSt_SocketTest->bConn) + { + ModuleHelp_SocketTest_StopConnect(pSt_SocketTest->xhToken); + } + else + { + ModuleHelp_SocketTest_StopDatas(pSt_SocketTest->xhToken); + } + ModuleProtocol_Packet_Common(tszRVBuffer, &nRVLen); + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen); + XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求销毁套接字测试成功,句柄:%lld"), lpszClientAddr, pSt_SocketTest->xhToken); + delete pSt_SocketTest; + pSt_SocketTest = NULL; + } + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.h new file mode 100644 index 0000000000000000000000000000000000000000..3fe35ca009659e5a13d843c0e81e0cc8fb058a1a --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask/HTTPTask_SocketTest.h @@ -0,0 +1,4 @@ +#pragma once + +void CALLBACK XEngine_HTTPTask_CBSocketTest(XNETHANDLE xhToken, LPCSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, LPVOID lParam); +BOOL XEngine_HTTPTask_SocketTest(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h index b1e099756aeb1d435c2c0928acc975cd04c72e9b..99aafa2bab2f8f6e76c4e6b97ac375fd10052cc5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h @@ -67,6 +67,8 @@ using namespace std; #include "XEngine_HTTPTask/HTTPTask_P2PClient.h" #include "XEngine_HTTPTask/HTTPTask_PostCode.h" #include "XEngine_HTTPTask/HTTPTask_Log.h" +#include "XEngine_HTTPTask/HTTPTask_QRCode.h" +#include "XEngine_HTTPTask/HTTPTask_SocketTest.h" /******************************************************************** // Created: 2022/01/20 14:42:06 // File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp\XEngine_Hdr.h @@ -78,6 +80,8 @@ using namespace std; // Purpose: 公用头文件 // History: *********************************************************************/ +#define XENGIEN_APISERVICE_BUFFER_SIZE (1024 * 1024 * 10) + extern BOOL bIsRun; extern XLOG xhLog; //HTTP服务器 @@ -88,6 +92,7 @@ extern XHANDLE xhHTTPPool; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; extern XENGINE_OPENCCCONFIG st_OPenccConfig; +extern XENGINE_QRCODECONFIG st_QRCodeConfig; extern XENGINE_PLUGINCONFIG st_PluginLibConfig; extern XENGINE_PLUGINCONFIG st_PluginLuaConfig; //连接库 diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index 7448ee692655369c513bda885afa98e13a0b46ad..a007b98b53bb8c4a1f0391b36056a15526b47373 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -20,6 +20,7 @@ XHANDLE xhHTTPPool = 0; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; XENGINE_OPENCCCONFIG st_OPenccConfig; +XENGINE_QRCODECONFIG st_QRCodeConfig; XENGINE_PLUGINCONFIG st_PluginLibConfig; XENGINE_PLUGINCONFIG st_PluginLuaConfig; @@ -98,6 +99,7 @@ int main(int argc, char** argv) memset(&st_XLogConfig, '\0', sizeof(HELPCOMPONENTS_XLOG_CONFIGURE)); memset(&st_ServiceConfig, '\0', sizeof(XENGINE_SERVICECONFIG)); memset(&st_OPenccConfig, '\0', sizeof(XENGINE_OPENCCCONFIG)); + memset(&st_QRCodeConfig, '\0', sizeof(XENGINE_QRCODECONFIG)); memset(&st_PluginLibConfig, '\0', sizeof(XENGINE_PLUGINCONFIG)); memset(&st_PluginLuaConfig, '\0', sizeof(XENGINE_PLUGINCONFIG)); @@ -131,12 +133,18 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化信号量成功")); //初始化OPENCC配置 - if (!ModuleConfigure_Json_OPenccFile(_T("./XEngine_Config/XEngine_OPenccConfig.json"), &st_OPenccConfig)) + if (!ModuleConfigure_Json_OPenccFile(st_ServiceConfig.st_XConfig.tszConfigOPencc, &st_OPenccConfig)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化OPenCC配置文件失败,错误:%lX"), ModuleConfigure_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化OPenCC配置文件成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化OPenCC配置文件:%s 成功"), st_ServiceConfig.st_XConfig.tszConfigOPencc); + if (!ModuleConfigure_Json_QRCodeFile(st_ServiceConfig.st_XConfig.tszConfigQRCode, &st_QRCodeConfig)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化二维码配置文件失败,错误:%lX"), ModuleConfigure_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化二维码配置文件:%s 成功"), st_ServiceConfig.st_XConfig.tszConfigQRCode); //初始化插件配置 if (st_ServiceConfig.st_XPlugin.bEnable) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj index cb44da06f294b8f6d83b9894bd142e7073bf7ddf..8cfd075e3c132982472010e0e62991c500904369 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj @@ -164,6 +164,8 @@ + + @@ -180,6 +182,8 @@ + + diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters index c0b5ffb48fac38338ddc29d088a50b98c21426c7..57ae733f278fa55907b759778ef19ce1b904e215 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters @@ -63,6 +63,12 @@ 源文件\XEngine_HTTPTask + + 源文件\XEngine_HTTPTask + + + 源文件\XEngine_HTTPTask + @@ -107,5 +113,11 @@ 头文件\XEngine_HTTPTask + + 头文件\XEngine_HTTPTask + + + 头文件\XEngine_HTTPTask + \ No newline at end of file diff --git a/XEngine_Source/XEngine_UserProtocol.h b/XEngine_Source/XEngine_UserProtocol.h index a3e7b0c167b53a02b76e0aa659fe0e8300211078..6b5fedf03bc9fb141604c7d1ad7ee97f2e009d87 100644 --- a/XEngine_Source/XEngine_UserProtocol.h +++ b/XEngine_Source/XEngine_UserProtocol.h @@ -170,4 +170,40 @@ typedef struct TCHAR tszTimeEnd[128]; int nLogSize; }XENGINE_XLOGINFO; +//二维码 +typedef struct +{ + TCHAR tszMsgBuffer[4096]; + TCHAR tszFmtBuffer[8]; +}XENGINE_QRCODE; +//网络测试 +typedef struct +{ + CHAR tszAddr[64]; //要测试的IP地址 + int nPort; //端口号码 + //单位毫秒 + int nConnectCount; //要测试的客户端个数 + int nConnectTest; //每个客户端测试的次数,-1表示不限制 + int nContWaitTime; //连接后等待多长时间关闭/处理一次休息时间,毫秒 + int nCloseWaitContTime; //关闭后等待多长时间连接/套接字操作超时时间 +}MODULEHELP_SOCKETTEST_RECONNECT, * LPMODULEHELP_SOCKETTEST_RECONNECT; +//数据包压力测试 +typedef struct +{ + MODULEHELP_SOCKETTEST_RECONNECT st_REConnect; + int nSDLen; //发送数据包大小,如果ptszSDBuffer的值为NULL,那么这个值表示测试端允许发送的大小,否则表示缓冲区大小 + int nRVLen; //接收端大小,表示ptszRVBuffer缓冲区大小,ptszRVBuffer的值匹配接受数据才表示成功,如果ptszRVBuffer为NULL,不做数据验证只接受. + CHAR tszSDBuffer[4096]; //如果你的服务器有特殊数据测试,请填写这个参数,否则测试端将自定义数据发送,内存需要由用户管理 + CHAR tszRVBuffer[4096]; +}MODULEHELP_SOCKETTEST_DATAS, * LPMODULEHELP_SOCKETTEST_DATAS; +typedef struct +{ + MODULEHELP_SOCKETTEST_RECONNECT st_SocketConn; + MODULEHELP_SOCKETTEST_DATAS st_SocketData; + TCHAR tszAPIUrl[MAX_PATH]; + XNETHANDLE xhToken; + int nType; //0,全部报告,其他结束统计报告 + bool bTCP; + bool bConn; +}XENGINE_SOCKETTEST; #pragma pack(pop) \ No newline at end of file