diff --git a/CHANGELOG b/CHANGELOG index 71e2e17c53f3a21abd2cc0ba37455e2652b4dd31..b07e438904293924eb8c9c46fa2607082572c85d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,13 @@ +XEngine_APIService V2.1.0.1001 + +添加:插件系统支持 +添加:密码生成插件 +添加:生肖星座插件 + +added:plugin system supported +added:password Generation plugin +added:Zodiac plugin +====================================================================================== XEngine_APIService V1.1.0.1001 添加:银行卡查询验证功能 diff --git a/README.en.md b/README.en.md index 259aafb95ea593e3b1af5dbfce027d44e7e92847..26315a4b95597c5b0c69adf8c79ad6d55f9eb81d 100644 --- a/README.en.md +++ b/README.en.md @@ -8,7 +8,9 @@ c c++ interface api service This is an api interface for information query service,At present, the information search service on the market need to charge, and our information search service is free and open source. This service mainly uses HTTP/V1.1 to implement various interface services This is a general information query service that does not contain any language attributes +You can use this code to implement your own information query service, which supports querying any information The purpose of development and implementation based on libXEngine is a cross-platform network storage service +and support plugin module ## Software feature 1. support json and string stream methods to return the content of the query @@ -19,14 +21,14 @@ The purpose of development and implementation based on libXEngine is a cross-pla 6. Lunar calendar conversion (planning) 7. News headlines (planned) 8. Standard height and weight (planned) -9. Zodiac Constellation (planned) -10. Password generator (planned) +9. Zodiac Constellation +10. Password generator 11. World Time Zones (planned) 12. Oil price inquiry (planned) 13. Administrative zip code (planned) 14. Bank card verification 15. Exchange rate calculation (planned) -16. QR code generation (planned) +16. QR code generation and parse (planned) 17. Simplified and Traditional Conversion 18. Oil price inquiry (planned) 19. Twenty-four solar terms (planned) @@ -70,6 +72,10 @@ make FLAGS=CleanAll clear - XEngine_Source code directory - XEngine_APPClient client code dir +## Plugin description +You can refer to the project under XEngine_PluginModule to write the plugin +The written plugin needs to be configured via JSON to be enabled + ## now task @@ -79,6 +85,7 @@ You can refer to the document under the docment directory. It contains API proto ## Test Service Address:app.xyry.org,Port:5501 #### example +For more information please refer to the documentation phone information query api:http://app.xyry.org:5501/api?function=phone¶ms1=13699439999¶ms2=0 ```json @@ -134,7 +141,7 @@ api:http://app.xyry.org:5501/api?function=id¶ms1=511025198800000000¶ms2= "msg":"success" } ``` -bank card ver +bank card ver api:http://app.xyry.org:5501/api?function=bank¶ms1=6214832830000000¶ms2=0 ```json { @@ -148,7 +155,7 @@ api:http://app.xyry.org:5501/api?function=bank¶ms1=6214832830000000¶ms2= "msg":"success" } ``` -language +language api:http://app.xyry.org:5501/api?function=language¶ms1=简体到繁体¶ms2=0¶ms3=1 ```json { @@ -161,7 +168,7 @@ api:http://app.xyry.org:5501/api?function=language¶ms1=简体到繁体¶m "msg":"success" } ``` -translation +translation api:http://app.xyry.org:5501/api?function=translation¶ms1=中国¶ms2=0¶ms3=0 ```json { diff --git a/README.md b/README.md index 3fa77c245a02cf4d506c53dd21764a6bcd3c13ce..32d087fd4204b385fec402bfa1a7b6d5b7f3c6c0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ c c++ interface api service 这是一个信息查询的API接口服务,目前市面上的信息查询服务都需要收费,而我们这个信息查询服务属于免费开源的. 这个服务主要使用HTTP/V1.1实现各种接口服务. 这是一个不包含任何语言属性的通用信息查询服务. +你可以使用此代码实现自己的信息查询服务,支持查询任何信息 基于libXEngine开发并实现的一套简洁高性能跨平台接口服务 +并且支持模块插件 ## 软件特性 1. 支持JSON和字符串流方式返回查询的内容 @@ -19,14 +21,14 @@ c c++ interface api service 6. 农历公历转换(计划中) 7. 新闻头条(计划中) 8. 标准身高体重(计划中) -9. 生肖星座(计划中) -10. 密码生成器(计划中) +9. 生肖星座 +10. 密码生成器 11. 世界时区(计划中) 12. 油价查询(计划中) 13. 行政邮编(计划中) 14. 银行卡验证 15. 汇率计算(计划中) -16. 二维码生成(计划中) +16. 二维码生成解析(计划中) 17. 简繁转换 18. 油价查询(计划中) 19. 二十四节气(计划中) @@ -55,6 +57,10 @@ make 编译 make FLAGS=InstallAll 安装库程序 make FLAGS=CleanAll 清理编译 +#### 插件使用 +你可以参考XEngine_PluginModule 下面的项目来编写插件 +编写好的插件需要通过JSON配置才能启用 + #### 使用说明 1. 切换到MASTER分支 @@ -72,13 +78,13 @@ make FLAGS=CleanAll 清理编译 ## 当前任务 - ## 其他问题 你可以参考docment目录下的文档.里面包含了API协议和服务说明. ## 测试服务器 地址:app.xyry.org,端口:5501 #### 测试接口示例 +更多内容请参考文档 手机信息查询 接口:http://app.xyry.org:5501/api?function=phone¶ms1=13699439999¶ms2=0 ```json @@ -134,7 +140,7 @@ IP地址查询 "msg":"success" } ``` -银行卡验证 +银行卡验证 接口:http://app.xyry.org:5501/api?function=bank¶ms1=6214832830000000¶ms2=0 ```json { @@ -148,7 +154,7 @@ IP地址查询 "msg":"success" } ``` -语言转换 +语言转换 接口:http://app.xyry.org:5501/api?function=language¶ms1=简体到繁体¶ms2=0¶ms3=1 ```json { @@ -161,7 +167,7 @@ IP地址查询 "msg":"success" } ``` -翻译 +翻译 接口:http://app.xyry.org:5501/api?function=translation¶ms1=中国¶ms2=0¶ms3=0 ```json { diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index d053e3b1b07accb1c53cde4c5dca3a51758e36f8..f0303dd65b4e47af78242ada2f320e18054355d2 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 fec1b8e577a0d0481525b9b6d19a295cb423158f..fe37afdc17485677927d5add2480894119599e61 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 452f0186598bad743bfcebe71b43d0b0ea097ba6..e4d2d08da1d2d63af21ed389575a287dc692d62d 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -25,7 +25,12 @@ "tszBankUrl":"https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=%s&cardBinCheck=true", "tszTranslationUrl":"http://fanyi.youdao.com/translate?&doctype=json&type=%s&i=%s" }, + "XPlugin":{ + "bEnable":true, + "tszPluginFile":"./XEngine_Config/XEngine_PluginConfig.json" + }, "XVer":[ + "2.1.0.1001 Build20220429", "1.1.0.1001 Build20220402", "1.0.0.1001 Build20220311" ] diff --git a/XEngine_Release/XEngine_Config/XEngine_PluginConfig.json b/XEngine_Release/XEngine_Config/XEngine_PluginConfig.json new file mode 100644 index 0000000000000000000000000000000000000000..76b0d9e8a7c7906e76f94fda80711cfd36983384 --- /dev/null +++ b/XEngine_Release/XEngine_Config/XEngine_PluginConfig.json @@ -0,0 +1,14 @@ +{ + "PluginArray":[ + { + "PluginEnable":true, + "PluginMethod":"zodiac", + "PluginFile":"./XEngine_Plugin/ModulePlugin_Zodiac.dll" + }, + { + "PluginEnable":true, + "PluginMethod":"pass", + "PluginFile":"./XEngine_Plugin/ModulePlugin_Password.dll" + } + ] +} \ No newline at end of file diff --git a/XEngine_Release/XEngine_Plugin/.gitignore b/XEngine_Release/XEngine_Plugin/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 5e1858151014573cd209382f4200d617f84dd23c..31dd96426b2654e5b195400a6c7c03964306c9a3 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -10,11 +10,17 @@ MODULE_CONFIGURE_PATH = ./XEngine_ModuleConfigure MODULE_DATABASE_PATH = ./XEngine_ModuleDatabase MODULE_PROTOCOL_PATH = ./XEngine_ModuleProtocol MODULE_HELP_PATH = ./XEngine_ModuleHelp +MODULE_PLUGIN_PATH = ./XEngine_ModulePlugin + +PLUGIN_MODULE_ZODIAC = ./XEngine_PluginModule/ModulePlugin_Zodiac +PLUGIN_MODULE_PASSWORD = ./XEngine_PluginModule/ModulePlugin_Password + APP_CENTER_PATH = ./XEngine_ServiceApp/XEngine_CenterApp APP_HTTP_PATH = ./XEngine_ServiceApp/XEngine_HttpApp XENGINE_MODULES = libjsoncpp.so libopencc.so \ - libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleHelp.so \ + libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \ + libModulePlugin_Zodiac.so libModulePlugin_Password.so \ XEngine_HttpApp.exe .PHONY:MakeAll @@ -33,6 +39,13 @@ libXEngine_ModuleProtocol.so: make -C $(MODULE_PROTOCOL_PATH) $(FLAGS) libXEngine_ModuleHelp.so: make -C $(MODULE_HELP_PATH) $(FLAGS) +libXEngine_ModulePlugin.so: + make -C $(MODULE_PLUGIN_PATH) $(FLAGS) + +libModulePlugin_Zodiac.so: + make -C $(PLUGIN_MODULE_ZODIAC) $(FLAGS) +libModulePlugin_Password.so: + make -C $(PLUGIN_MODULE_PASSWORD) $(FLAGS) XEngine_HttpApp.exe: make -C $(APP_HTTP_PATH) $(FLAGS) diff --git a/XEngine_Source/VSCopy-x64.bat b/XEngine_Source/VSCopy-x64.bat index 0b2ef91588605093fc07f8af8ad41899fef59721..730237aec549ddd51ddb4be16c3702d5b18d15de 100644 --- a/XEngine_Source/VSCopy-x64.bat +++ b/XEngine_Source/VSCopy-x64.bat @@ -18,6 +18,7 @@ copy /y "%XEngine_Lib64%\XEngine_HelpComponents\libmariadb.dll" "./" 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_LibEx\libssl-1_1-x64.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_LibEx\libcrypto-1_1-x64.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_LibEx\libcurl.dll" "./" \ No newline at end of file +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_Lib32%\XEngine_LibEx\nghttp2.dll" "./" \ No newline at end of file diff --git a/XEngine_Source/VSCopy-x86.bat b/XEngine_Source/VSCopy-x86.bat index 2ad3d2a4157bfd97e8ad41fe9a108fa00e22d853..f517f79b9cf0a4d289017c3bfe6c82fe6c51a034 100644 --- a/XEngine_Source/VSCopy-x86.bat +++ b/XEngine_Source/VSCopy-x86.bat @@ -18,6 +18,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_LibEx\libcrypto-1_1.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-1_1.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_LibEx\libcurl.dll" "./" \ No newline at end of file +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 diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index 25b7e45dc5e347a556a9edcf2c2c62eb5ff433b4..ea8017f5654eacb77dba732dea9e36323f2152a2 100644 --- a/XEngine_Source/XEngine.sln +++ b/XEngine_Source/XEngine.sln @@ -24,6 +24,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModuleProtocol", "X EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModuleHelp", "XEngine_ModuleHelp\XEngine_ModuleHelp.vcxproj", "{6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_ModulePlugin", "XEngine_ModulePlugin\XEngine_ModulePlugin.vcxproj", "{CB443280-E283-44CD-B956-52C404A51DB6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_PluginModule", "XEngine_PluginModule", "{D0473C03-9464-4C44-818A-AE212680CD05}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ModulePlugin_Zodiac", "XEngine_PluginModule\ModulePlugin_Zodiac\ModulePlugin_Zodiac.vcxproj", "{32BB166A-3D3D-45EF-8BED-2E0471274159}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ModulePlugin_Password", "XEngine_PluginModule\ModulePlugin_Password\ModulePlugin_Password.vcxproj", "{201B6D13-82A7-49E9-9736-D6B3BFE05B30}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -80,6 +88,30 @@ Global {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D}.Release|x64.Build.0 = Release|x64 {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D}.Release|x86.ActiveCfg = Release|Win32 {6D0FCB40-D544-4AB2-A239-2FEBC4B98F6D}.Release|x86.Build.0 = Release|Win32 + {CB443280-E283-44CD-B956-52C404A51DB6}.Debug|x64.ActiveCfg = Debug|x64 + {CB443280-E283-44CD-B956-52C404A51DB6}.Debug|x64.Build.0 = Debug|x64 + {CB443280-E283-44CD-B956-52C404A51DB6}.Debug|x86.ActiveCfg = Debug|Win32 + {CB443280-E283-44CD-B956-52C404A51DB6}.Debug|x86.Build.0 = Debug|Win32 + {CB443280-E283-44CD-B956-52C404A51DB6}.Release|x64.ActiveCfg = Release|x64 + {CB443280-E283-44CD-B956-52C404A51DB6}.Release|x64.Build.0 = Release|x64 + {CB443280-E283-44CD-B956-52C404A51DB6}.Release|x86.ActiveCfg = Release|Win32 + {CB443280-E283-44CD-B956-52C404A51DB6}.Release|x86.Build.0 = Release|Win32 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Debug|x64.ActiveCfg = Debug|x64 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Debug|x64.Build.0 = Debug|x64 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Debug|x86.ActiveCfg = Debug|Win32 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Debug|x86.Build.0 = Debug|Win32 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Release|x64.ActiveCfg = Release|x64 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Release|x64.Build.0 = Release|x64 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Release|x86.ActiveCfg = Release|Win32 + {32BB166A-3D3D-45EF-8BED-2E0471274159}.Release|x86.Build.0 = Release|Win32 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Debug|x64.ActiveCfg = Debug|x64 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Debug|x64.Build.0 = Debug|x64 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Debug|x86.ActiveCfg = Debug|Win32 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Debug|x86.Build.0 = Debug|Win32 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Release|x64.ActiveCfg = Release|x64 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Release|x64.Build.0 = Release|x64 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Release|x86.ActiveCfg = Release|Win32 + {201B6D13-82A7-49E9-9736-D6B3BFE05B30}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -87,6 +119,8 @@ Global GlobalSection(NestedProjects) = preSolution {E756B7D2-D40D-4106-9C14-1D90F20A712E} = {79A9A569-7DA8-4D9D-AD34-D11115199EA1} {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {1F64BA84-8754-4FD3-87F8-9102F124EBC1} + {32BB166A-3D3D-45EF-8BED-2E0471274159} = {D0473C03-9464-4C44-818A-AE212680CD05} + {201B6D13-82A7-49E9-9736-D6B3BFE05B30} = {D0473C03-9464-4C44-818A-AE212680CD05} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9B202F91-A601-429E-BB0F-880DDEE096FE} diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 152e8e6e44e5d07b932fbbf924339734cbfb92c4..cf64d3920a2234ede58c040055f97f8e1bb28d7d 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -49,6 +49,11 @@ typedef struct TCHAR tszTranslationUrl[MAX_PATH]; //翻译接口 }st_XApi; struct + { + BOOL bEnable; //是否启用 + TCHAR tszPluginFile[MAX_PATH]; //配置文件地址 + }st_XPlugin; + struct { list* pStl_ListVer; }st_XVer; @@ -71,6 +76,17 @@ typedef struct TCHAR tszFilejp2t[MAX_PATH]; TCHAR tszFiletw2t[MAX_PATH]; }XENGINE_OPENCCCONFIG; +//插件 +typedef struct +{ + BOOL bEnable; + TCHAR tszPluginMethod[MAX_PATH]; + TCHAR tszPluginFile[MAX_PATH]; +}XENGINE_PLUGININFO; +typedef struct +{ + list* pStl_ListPlugin; +}XENGINE_PLUGINCONFIG; ////////////////////////////////////////////////////////////////////////// // 导出函数定义 ////////////////////////////////////////////////////////////////////////// @@ -115,4 +131,23 @@ extern "C" BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVIC 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_OPENCCCONFIG* pSt_OPenccConfig); \ No newline at end of file +extern "C" BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_OPENCCCONFIG* pSt_OPenccConfig); +/******************************************************************** +函数名称:ModuleConfigure_Json_PluginFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_PluginConfig + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出插件配置信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h index 5918ceecec8810290c4f4952448a96b4e58cfe9f..fd8762e63408dd5775348aff51d057d7a413a81e 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h @@ -17,4 +17,6 @@ #define ERROR_MODULE_CONFIGURE_JSON_XTIME 0xA0005 //读取XTIME配置失败 #define ERROR_MODULE_CONFIGURE_JSON_XLOG 0xA0006 //读取XLOG配置失败 #define ERROR_MODULE_CONFIGURE_JSON_XDB 0xA0007 //数据库配置错误 -#define ERROR_MODULE_CONFIGURE_JSON_XVER 0xA0008 //版本配置文件读取错误 \ No newline at end of file +#define ERROR_MODULE_CONFIGURE_JSON_XPLUGIN 0xA0008 //插件配置错误 +#define ERROR_MODULE_CONFIGURE_JSON_XVER 0xA0009 //版本配置文件读取错误 +#define ERROR_MODULE_CONFIGURE_JSON_MALLOC 0xA000A //申请内存失败 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 5bfd798e0f8fc06a9dda7bea96805241cdf3dafc..7faf991e76f1bcbbc3e11f9c576a6b5fbc35d27c 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -132,6 +132,16 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE _tcscpy(pSt_ServerConfig->st_XApi.tszBankUrl, st_JsonXApi["tszBankUrl"].asCString()); _tcscpy(pSt_ServerConfig->st_XApi.tszTranslationUrl, st_JsonXApi["tszTranslationUrl"].asCString()); + if (st_JsonRoot["XPlugin"].empty() || (2 != st_JsonRoot["XPlugin"].size())) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPLUGIN; + return FALSE; + } + Json::Value st_JsonXPlugin = st_JsonRoot["XPlugin"]; + pSt_ServerConfig->st_XPlugin.bEnable = st_JsonXPlugin["bEnable"].asBool(); + _tcscpy(pSt_ServerConfig->st_XPlugin.tszPluginFile, st_JsonXPlugin["tszPluginFile"].asCString()); + if (st_JsonRoot["XVer"].empty()) { Config_IsErrorOccur = TRUE; @@ -139,6 +149,12 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE return FALSE; } pSt_ServerConfig->st_XVer.pStl_ListVer = new list; + if (NULL == pSt_ServerConfig->st_XVer.pStl_ListVer) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_MALLOC; + return FALSE; + } Json::Value st_JsonXVer = st_JsonRoot["XVer"]; for (unsigned int i = 0; i < st_JsonXVer.size(); i++) { @@ -220,4 +236,85 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFi _tcscpy(pSt_OPenccConfig->tszFilejp2t, st_JsonRoot["tszFilejp2t"].asCString()); _tcscpy(pSt_OPenccConfig->tszFiletw2t, st_JsonRoot["tszFiletw2t"].asCString()); return TRUE; +} +/******************************************************************** +函数名称:ModuleConfigure_Json_PluginFile +函数功能:读取JSON配置文件 + 参数.一:lpszConfigFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的配置文件 + 参数.二:pSt_PluginConfig + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出插件配置信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModuleConfigure_Json::ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig) +{ + Config_IsErrorOccur = FALSE; + + if ((NULL == lpszConfigFile) || (NULL == pSt_PluginConfig)) + { + 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; + } + //申请内存 + pSt_PluginConfig->pStl_ListPlugin = new list; + if (NULL == pSt_PluginConfig->pStl_ListPlugin) + { + Config_IsErrorOccur = TRUE; + Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_MALLOC; + return FALSE; + } + //解析列表 + Json::Value st_JsonArray = st_JsonRoot["PluginArray"]; + for (unsigned int i = 0; i < st_JsonArray.size(); i++) + { + XENGINE_PLUGININFO st_PluginInfo; + memset(&st_PluginInfo, '\0', sizeof(XENGINE_PLUGININFO)); + + st_PluginInfo.bEnable = st_JsonArray[i]["PluginEnable"].asBool(); + _tcscpy(st_PluginInfo.tszPluginFile, st_JsonArray[i]["PluginFile"].asCString()); + _tcscpy(st_PluginInfo.tszPluginMethod, st_JsonArray[i]["PluginMethod"].asCString()); + pSt_PluginConfig->pStl_ListPlugin->push_back(st_PluginInfo); + } + return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h index fce6182932f1cad05de11bc749addf900abefc23..d5c720d683be0f5d8fb395621a5d0e400ac88599 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_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def index bb1d31c517b0730ef023bbb75e93a2dd21dc6948..892d206c25b7ec4e966b7e9fd638ac718f38a81e 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def @@ -4,4 +4,5 @@ EXPORTS ModuleConfigure_GetLastError ModuleConfigure_Json_File - ModuleConfigure_Json_OPenccFile \ No newline at end of file + ModuleConfigure_Json_OPenccFile + 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 afcd3b140cdd9d6a30ae8a660669b1799d6bba97..a411594c2e809c0d38b58cb84bc42748c08d0805 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -36,4 +36,8 @@ extern "C" BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVIC extern "C" BOOL ModuleConfigure_Json_OPenccFile(LPCTSTR lpszConfigFile, XENGINE_OPENCCCONFIG * pSt_OPenccConfig) { return m_ConfigJson.ModuleConfigure_Json_OPenccFile(lpszConfigFile, pSt_OPenccConfig); +} +extern "C" BOOL ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFile, XENGINE_PLUGINCONFIG * pSt_PluginConfig) +{ + return m_ConfigJson.ModuleConfigure_Json_PluginFile(lpszConfigFile, pSt_PluginConfig); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/Makefile b/XEngine_Source/XEngine_ModulePlugin/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2175c6718760b637f980ccf97ffc6ced357791e4 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/Makefile @@ -0,0 +1,47 @@ +CC = g++ -Wall -std=c++17 -fPIC +RELEASE = 0 +UNICODE = 0 +INCLUDE = -I ./ +LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib +LIB = -lXEngine_BaseLib +LIBEX = -static-libgcc -lrt -ldl -lpthread +LOADSO = -Wl,-rpath=./,--disable-new-dtags +LIBINCLUDE = ModulePlugin_Core.o ModulePlugin_Loader.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c -O2 +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + + +all:$(LIBINCLUDE) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModulePlugin.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +ModulePlugin_Core.o:./ModulePlugin_Core/ModulePlugin_Core.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModulePlugin_Core/ModulePlugin_Core.cpp +ModulePlugin_Loader.o:./ModulePlugin_Loader/ModulePlugin_Loader.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModulePlugin_Loader/ModulePlugin_Loader.cpp + +pch.o:./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + + +InstallAll:InstallSo +InstallSo:./libXEngine_ModulePlugin.so + cp ./libXEngine_ModulePlugin.so ../../XEngine_Release/libXEngine_ModulePlugin.so + + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.so \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a3657b6fb118b892ebc65be39ea914ea8305edb9 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp @@ -0,0 +1,317 @@ +#include "pch.h" +#include "ModulePlugin_Core.h" +/******************************************************************** +// Created: 2022/04/20 16:14:03 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Core\ModulePlugin_Core.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Core +// File Base: ModulePlugin_Core +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件核心架构实现 +// History: +*********************************************************************/ +CModulePlugin_Core::CModulePlugin_Core() +{ + bIsInit = FALSE; +} +CModulePlugin_Core::~CModulePlugin_Core() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModulePlugin_Core_Init +函数功能:初始化插件核心系统 +返回值 + 类型:逻辑型 + 意思:是否成功初始化 +备注: +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Init() +{ + ModulePlugin_IsErrorOccur = FALSE; + //判断是否初始化 + if (bIsInit) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_ISINITED; + return FALSE; + } + //启动线程 + bIsInit = TRUE; + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Core_Push +函数功能:添加一个标准的插件到插件框架中 + 参数.一:pxhModule + In/Out:Out + 类型:模块句柄 + 可空:N + 意思:导出一个加载成功的模块句柄 + 参数.二:lpszPluginFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件模块路径 + 参数.三:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义输入输出参数 +返回值 + 类型:逻辑型 + 意思:是否成功添加 +备注: +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Push(XNETHANDLE* pxhModule, LPCTSTR lpszPluginFile, LPVOID lParam) +{ + ModulePlugin_IsErrorOccur = FALSE; + + if (!BaseLib_OperatorHandle_Create(pxhModule)) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = BaseLib_GetLastError(); + return FALSE; + } + if (!ModulePlugin_Core_Add(*pxhModule, lpszPluginFile, lParam)) + { + return FALSE; + } + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Core_Exec +函数功能:执行一次 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:输入模块句柄 + 参数.二:pppHDRList + In/Out:In + 类型:三级指针 + 可空:N + 意思:HTTP请求的URL参数列表 + 参数.三:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.四:pInt_HTTPCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出返回的HTTPCODE值 + 参数.五:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出负载的内容 + 参数.六:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出内容大小 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Exec(XNETHANDLE xhModule, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen) +{ + ModulePlugin_IsErrorOccur = FALSE; + + st_csStl.lock_shared(); + //执行指定插件函数 + unordered_map::const_iterator stl_MapIterator = stl_MapFrameWork.find(xhModule); + if (stl_MapIterator == stl_MapFrameWork.end()) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_csStl.unlock_shared(); + return FALSE; + } + if (!stl_MapIterator->second.fpCall_PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen)) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = stl_MapIterator->second.fpCall_PluginCore_GetLastError(); + st_csStl.unlock_shared(); + return FALSE; + } + st_csStl.unlock_shared(); + + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Core_Destroy +函数功能:销毁插件核心并且清理资源 +返回值 + 类型:逻辑型 + 意思:是否成功销毁 +备注: +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Destroy() +{ + ModulePlugin_IsErrorOccur = FALSE; + + //判断是否初始化 + if (!bIsInit) + { + return TRUE; + } + bIsInit = FALSE; + //清理STL元素空间 + st_csStl.lock(); + unordered_map::iterator stl_MapIterator = stl_MapFrameWork.begin(); + for (; stl_MapIterator != stl_MapFrameWork.end(); stl_MapIterator++) + { + stl_MapIterator->second.fpCall_PluginCore_UnInit(); +#ifdef _MSC_BUILD + FreeLibrary(stl_MapIterator->second.mhFile); +#else + dlclose(stl_MapIterator->second.mhFile); +#endif + } + stl_MapFrameWork.clear(); + st_csStl.unlock(); + return TRUE; +} +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModulePlugin_Core_Add +函数功能:添加一个指定模块到插件核心系统当中 + 参数.一:xhNet + In/Out:In + 类型:模块句柄 + 可空:N + 意思:输入一个新的模块句柄 + 参数.二:lpszPluginFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件模块路径 + 参数.三:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义输入输出参数 +返回值 + 类型:逻辑型 + 意思:是否成功执行 +备注: +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Add(XNETHANDLE xhNet, LPCTSTR lpszPluginFile, LPVOID lParam) +{ + ModulePlugin_IsErrorOccur = FALSE; + + if (NULL == lpszPluginFile) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; + return FALSE; + } + PLUGINCORE_FRAMEWORK st_FrameWork; + st_FrameWork.mhFile = 0; + memset(st_FrameWork.tszModuleFile, '\0', sizeof(st_FrameWork.tszModuleFile)); + //打开一个模块 +#ifdef _MSC_BUILD + st_FrameWork.mhFile = LoadLibrary(lpszPluginFile); +#else + st_FrameWork.mhFile = dlopen(lpszPluginFile, RTLD_LAZY); +#endif + if (NULL == st_FrameWork.mhFile) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_OPENDL; + return FALSE; + } + //开始查找模块中的函数 +#ifdef _MSC_BUILD + st_FrameWork.fpCall_PluginCore_Init = (FPCall_PluginCore_Init)GetProcAddress(st_FrameWork.mhFile, "PluginCore_Init"); +#else + * (void**)(&st_FrameWork.fpCall_PluginCore_Init) = dlsym(st_FrameWork.mhFile, _T("PluginCore_Init")); +#endif + if (NULL == st_FrameWork.fpCall_PluginCore_Init) + { +#ifdef _MSC_BUILD + FreeLibrary(st_FrameWork.mhFile); +#else + dlclose(st_FrameWork.mhFile); +#endif + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPINIT; + return FALSE; + } +#ifdef _MSC_BUILD + st_FrameWork.fpCall_PluginCore_UnInit = (FPCall_PluginCore_UnInit)GetProcAddress(st_FrameWork.mhFile, "PluginCore_UnInit"); +#else + * (void**)(&st_FrameWork.fpCall_PluginCore_UnInit) = dlsym(st_FrameWork.mhFile, _T("PluginCore_UnInit")); +#endif + if (NULL == st_FrameWork.fpCall_PluginCore_UnInit) + { +#ifdef _MSC_BUILD + FreeLibrary(st_FrameWork.mhFile); +#else + dlclose(st_FrameWork.mhFile); +#endif + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPUNINIT; + return FALSE; + } +#ifdef _MSC_BUILD + st_FrameWork.fpCall_PluginCore_Call = (FPCall_PluginCore_Call)GetProcAddress(st_FrameWork.mhFile, "PluginCore_Call"); +#else + * (void**)(&st_FrameWork.fpCall_PluginCore_Call) = dlsym(st_FrameWork.mhFile, _T("PluginCore_Call")); +#endif + if (NULL == st_FrameWork.fpCall_PluginCore_Call) + { +#ifdef _MSC_BUILD + FreeLibrary(st_FrameWork.mhFile); +#else + dlclose(st_FrameWork.mhFile); +#endif + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPCALL; + return FALSE; + } +#ifdef _MSC_BUILD + st_FrameWork.fpCall_PluginCore_GetLastError = (FPCall_PluginCore_GetLastError)GetProcAddress(st_FrameWork.mhFile, _T("PluginCore_GetLastError")); +#else + * (void**)(&st_FrameWork.fpCall_PluginCore_GetLastError) = dlsym(st_FrameWork.mhFile, _T("PluginCore_GetLastError")); +#endif + if (NULL == st_FrameWork.fpCall_PluginCore_GetLastError) + { +#ifdef _MSC_BUILD + FreeLibrary(st_FrameWork.mhFile); +#else + dlclose(st_FrameWork.mhFile); +#endif + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPERROR; + return FALSE; + } + //初始化内部模块 + if (!st_FrameWork.fpCall_PluginCore_Init(lParam)) + { +#ifdef _MSC_BUILD + FreeLibrary(st_FrameWork.mhFile); +#else + dlclose(st_FrameWork.mhFile); +#endif + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_INIT; + return FALSE; + } + _tcscpy(st_FrameWork.tszModuleFile, lpszPluginFile); + + //添加模块属性到STL函数中 + st_csStl.lock(); + stl_MapFrameWork.insert(make_pair(xhNet, st_FrameWork)); + st_csStl.unlock(); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h new file mode 100644 index 0000000000000000000000000000000000000000..93bdd50a594af02e0f7ba043d2e0bce17acf9dc6 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h @@ -0,0 +1,47 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/20 16:13:41 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Core\ModulePlugin_Core.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Core +// File Base: ModulePlugin_Core +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件核心架构定义 +// History: +*********************************************************************/ +typedef BOOL(*FPCall_PluginCore_Init)(LPVOID lParam); +typedef BOOL(*FPCall_PluginCore_UnInit)(); +typedef BOOL(*FPCall_PluginCore_Call)(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); +typedef DWORD(*FPCall_PluginCore_GetLastError)(); + +typedef struct +{ + HMODULE mhFile; + TCHAR tszModuleFile[MAX_PATH]; + + BOOL(*fpCall_PluginCore_Init)(LPVOID lParam); + BOOL(*fpCall_PluginCore_UnInit)(); + BOOL(*fpCall_PluginCore_Call)(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); + DWORD(*fpCall_PluginCore_GetLastError)(); +}PLUGINCORE_FRAMEWORK, * LPPLUGINCORE_FRAMEWORK; + +class CModulePlugin_Core +{ +public: + CModulePlugin_Core(); + ~CModulePlugin_Core(); +public: + BOOL ModulePlugin_Core_Init(); + BOOL ModulePlugin_Core_Push(XNETHANDLE* pxhModule, LPCTSTR lpszPluginFile, LPVOID lParam = NULL); + BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); + BOOL ModulePlugin_Core_Destroy(); +protected: + BOOL ModulePlugin_Core_Add(XNETHANDLE xhNet, LPCTSTR lpszPluginFile, LPVOID lParam = NULL); +private: + BOOL bIsInit; +private: + shared_mutex st_csStl; +private: + unordered_map stl_MapFrameWork; +}; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h new file mode 100644 index 0000000000000000000000000000000000000000..60de35eac22a543ee2cad0f21f3eecb12aec81d4 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -0,0 +1,184 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/20 17:22:16 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Define.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin +// File Base: ModulePlugin_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数定义 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModulePlugin_GetLastError(int* pInt_SysError = NULL); +/********************************************************************************* +* 插件框架导出函数定义 * +*********************************************************************************/ +/******************************************************************** +函数名称:ModulePlugin_Core_Init +函数功能:初始化插件核心系统 +返回值 + 类型:逻辑型 + 意思:是否成功初始化 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Core_Init(); +/******************************************************************** +函数名称:ModulePlugin_Core_Push +函数功能:添加一个标准的插件到插件框架中 + 参数.一:pxhModule + In/Out:Out + 类型:模块句柄 + 可空:N + 意思:导出一个加载成功的模块句柄 + 参数.二:lpszPluginFile + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件模块路径 + 参数.三:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义输入输出参数 +返回值 + 类型:逻辑型 + 意思:是否成功添加 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Core_Push(XNETHANDLE * pxhNet, LPCSTR lpszPluginFile, LPVOID lParam = NULL); +/******************************************************************** +函数名称:ModulePlugin_Core_Exec +函数功能:执行一次 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:输入模块句柄 + 参数.二:pppHDRList + In/Out:In + 类型:三级指针 + 可空:N + 意思:HTTP请求的URL参数列表 + 参数.三:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.四:pInt_HTTPCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出返回的HTTPCODE值 + 参数.五:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出负载的内容 + 参数.六:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出内容大小 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); +/******************************************************************** +函数名称:ModulePlugin_Core_Destroy +函数功能:销毁插件核心并且清理资源 +返回值 + 类型:逻辑型 + 意思:是否成功销毁 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Core_Destroy(); +/********************************************************************************* +* 加载器导出函数定义 * +*********************************************************************************/ +/******************************************************************** +函数名称:ModulePlugin_Loader_Insert +函数功能:插入一个模块到加载器 + 参数.一:lpszModuleMethod + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件方法名 + 参数.二:lpszModuleName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件路径 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName); +/******************************************************************** +函数名称:ModulePlugin_Loader_Find +函数功能:查找方法是否注册 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName); +/******************************************************************** +函数名称:ModulePlugin_Loader_Exec +函数功能:执行一次插件 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 + 参数.二:pppHDRList + In/Out:In + 类型:三级指针 + 可空:N + 意思:HTTP请求的URL参数列表 + 参数.三:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.四:pInt_HTTPCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出返回的HTTPCODE值 + 参数.五:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出负载的内容 + 参数.六:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出内容大小 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); +/******************************************************************** +函数名称:ModulePlugin_Loader_Destory +函数功能:销毁加载器 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Destory(); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h new file mode 100644 index 0000000000000000000000000000000000000000..9e329092b0145e6bf3dc03cb0a2617e874eae60b --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h @@ -0,0 +1,25 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/20 16:19:38 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Error.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin +// File Base: ModulePlugin_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件核心错误导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 错误定义 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT 0xE1001 //参数错误 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_OPENDL 0xE1002 //打开模块插件失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPINIT 0xE1003 //查找初始化函数失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPUNINIT 0xE1004 //查找卸载函数失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPCALL 0xE1005 //查找调用执行功能函数失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPERROR 0xE1006 //获取错误函数失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_INIT 0xE1007 //初始化内部模块失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND 0xE1008 //没有找到句柄 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_ISINITED 0xE1009 //已经初始化了,不需要再次初始化 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION 0xE100A //插件执行失败 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bb32ae28df79f60d96213ceaeab9ea9bcbae4d56 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -0,0 +1,185 @@ +#include "pch.h" +#include "ModulePlugin_Loader.h" +/******************************************************************** +// Created: 2022/04/20 16:36:01 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Loader\ModulePlugin_Loader.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Loader +// File Base: ModulePlugin_Loader +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件加载工具 +// History: +*********************************************************************/ +CModulePlugin_Loader::CModulePlugin_Loader() +{ +} +CModulePlugin_Loader::~CModulePlugin_Loader() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:ModulePlugin_Loader_Insert +函数功能:插入一个模块到加载器 + 参数.一:lpszModuleMethod + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件方法名 + 参数.二:lpszModuleName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:插件路径 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName) +{ + ModulePlugin_IsErrorOccur = FALSE; + + if ((NULL == lpszModuleMethod) || (NULL == lpszModuleName)) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; + return FALSE; + } + PLUGINCORE_LOADER st_PluginLoader; + memset(&st_PluginLoader, '\0', sizeof(PLUGINCORE_LOADER)); + + _tcscpy(st_PluginLoader.tszModuleFile, lpszModuleName); + _tcscpy(st_PluginLoader.tszModuleMethod, lpszModuleMethod); + + if (!ModulePlugin_Core_Push(&st_PluginLoader.xhToken, lpszModuleName)) + { + return FALSE; + } + + st_Locker.lock(); + stl_MapLoader.insert(make_pair(lpszModuleMethod, st_PluginLoader)); + st_Locker.unlock(); + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Loader_Find +函数功能:查找方法是否注册 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Find(LPCTSTR lpszMethodName) +{ + ModulePlugin_IsErrorOccur = FALSE; + + if (NULL == lpszMethodName) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; + return FALSE; + } + st_Locker.lock_shared(); + unordered_map::const_iterator stl_MapIterator = stl_MapLoader.find(lpszMethodName); + if (stl_MapIterator == stl_MapLoader.end()) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_Locker.unlock_shared(); + return FALSE; + } + st_Locker.unlock_shared(); + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Loader_Exec +函数功能:执行一次插件 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 + 参数.二:pppHDRList + In/Out:In + 类型:三级指针 + 可空:N + 意思:HTTP请求的URL参数列表 + 参数.三:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.四:pInt_HTTPCode + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出返回的HTTPCODE值 + 参数.五:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出负载的内容 + 参数.六:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出内容大小 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen) +{ + ModulePlugin_IsErrorOccur = FALSE; + + if (NULL == lpszMethodName) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; + return FALSE; + } + st_Locker.lock_shared(); + unordered_map::const_iterator stl_MapIterator = stl_MapLoader.find(lpszMethodName); + if (stl_MapIterator == stl_MapLoader.end()) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_Locker.unlock_shared(); + return FALSE; + } + if (!ModulePlugin_Core_Exec(stl_MapIterator->second.xhToken, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen)) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION; + st_Locker.unlock_shared(); + return FALSE; + } + st_Locker.unlock_shared(); + return TRUE; +} +/******************************************************************** +函数名称:ModulePlugin_Loader_Destory +函数功能:销毁加载器 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Destory() +{ + ModulePlugin_IsErrorOccur = FALSE; + + st_Locker.lock(); + stl_MapLoader.clear(); + st_Locker.unlock_shared(); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h new file mode 100644 index 0000000000000000000000000000000000000000..e5941614e316b2cecf08a466c53c12f4c93ed6f6 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -0,0 +1,35 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/20 16:35:38 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Loader\ModulePlugin_Loader.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\ModulePlugin_Loader +// File Base: ModulePlugin_Loader +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件加载工具 +// History: +*********************************************************************/ +typedef struct +{ + TCHAR tszModuleFile[MAX_PATH]; + TCHAR tszModuleMethod[MAX_PATH]; + XNETHANDLE xhToken; +}PLUGINCORE_LOADER, * LPPLUGINCORE_LOADER; + +class CModulePlugin_Loader +{ +public: + CModulePlugin_Loader(); + ~CModulePlugin_Loader(); +public: + BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName); + BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName); + BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); + BOOL ModulePlugin_Loader_Destory(); +protected: +private: + shared_mutex st_Locker; +private: + unordered_map stl_MapLoader; +}; diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def new file mode 100644 index 0000000000000000000000000000000000000000..64749e8b4e1fbad6cd06c34218a7f1fcb855183e --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -0,0 +1,14 @@ +LIBRARY + +EXPORTS + ModulePlugin_GetLastError + + ModulePlugin_Core_Init + ModulePlugin_Core_Push + ModulePlugin_Core_Exec + ModulePlugin_Core_Destroy + + ModulePlugin_Loader_Insert + ModulePlugin_Loader_Find + ModulePlugin_Loader_Exec + ModulePlugin_Loader_Destory \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..b1545773f98102e850ce8168cafa8bc74ef78a8c --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj @@ -0,0 +1,190 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {cb443280-e283-44cd-b956-52c404a51db6} + XEngineModulePlugin + 10.0 + + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + true + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + false + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + true + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + false + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModulePlugin.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModulePlugin.def + + + + + Level3 + true + _DEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModulePlugin.def + + + + + Level3 + true + true + true + NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModulePlugin.def + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.filters b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..f39eb69c48c8bd4d1421f5b98438d9284468181c --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.filters @@ -0,0 +1,68 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {716c1e27-8905-4321-a369-67cf7462cb08} + + + {c455a41d-68d1-42be-a090-0df10d4de4ed} + + + {5fd6b4af-2a78-499a-ab04-ab8643823743} + + + {c2bcf30b-a119-4ab5-85e5-2c16ca255b9a} + + + + + 头文件 + + + 头文件 + + + 头文件\ModulePlugin_Core + + + 头文件 + + + 头文件 + + + 头文件\ModulePlugin_Loader + + + + + 源文件 + + + 源文件 + + + 源文件\ModulePlugin_Core + + + 源文件\ModulePlugin_Loader + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.user b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..88a550947edbc3c5003a41726f0749201fdb6822 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/dllmain.cpp b/XEngine_Source/XEngine_ModulePlugin/dllmain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..daed8c8f7ac50ca1466016a0529648d18125a7e7 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/XEngine_ModulePlugin/framework.h b/XEngine_Source/XEngine_ModulePlugin/framework.h new file mode 100644 index 0000000000000000000000000000000000000000..80cbbc9b06a9b0141f92ee19eceaed71328caff4 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.cpp b/XEngine_Source/XEngine_ModulePlugin/pch.cpp new file mode 100644 index 0000000000000000000000000000000000000000..461fef1bc44e4e4dd6a23093472988135fda200d --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -0,0 +1,68 @@ +#include "pch.h" +#include "ModulePlugin_Core/ModulePlugin_Core.h" +#include "ModulePlugin_Loader/ModulePlugin_Loader.h" +/******************************************************************** +// Created: 2022/04/20 16:39:27 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\pch.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件核心导出函数实现 +// History: +*********************************************************************/ +BOOL ModulePlugin_IsErrorOccur = FALSE; +DWORD ModulePlugin_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CModulePlugin_Core m_PluginCore; +CModulePlugin_Loader m_PluginLoader; +////////////////////////////////////////////////////////////////////////// +// 导出函数实现 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD ModulePlugin_GetLastError(int* pInt_SysError) +{ + if (NULL != pInt_SysError) + { + *pInt_SysError = errno; + } + return ModulePlugin_dwErrorCode; +} +/********************************************************************************* +* 插件框架导出函数定义 * +*********************************************************************************/ +extern "C" BOOL ModulePlugin_Core_Init() +{ + return m_PluginCore.ModulePlugin_Core_Init(); +} +extern "C" BOOL ModulePlugin_Core_Push(XNETHANDLE * pxhModule, LPCTSTR lpszPluginFile, LPVOID lParam) +{ + return m_PluginCore.ModulePlugin_Core_Push(pxhModule, lpszPluginFile, lParam); +} +extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen) +{ + return m_PluginCore.ModulePlugin_Core_Exec(xhModule, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); +} +extern "C" BOOL ModulePlugin_Core_Destroy() +{ + return m_PluginCore.ModulePlugin_Core_Destroy(); +} +/********************************************************************************* +* 加载器导出函数定义 * +*********************************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName) +{ + return m_PluginLoader.ModulePlugin_Loader_Insert(lpszModuleMethod, lpszModuleName); +} +extern "C" BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName) +{ + return m_PluginLoader.ModulePlugin_Loader_Find(lpszMethodName); +} +extern "C" BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen) +{ + return m_PluginLoader.ModulePlugin_Loader_Exec(lpszMethodName, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); +} +extern "C" BOOL ModulePlugin_Loader_Destory() +{ + return m_PluginLoader.ModulePlugin_Loader_Destory(); +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.h b/XEngine_Source/XEngine_ModulePlugin/pch.h new file mode 100644 index 0000000000000000000000000000000000000000..76a4324365f37b4d515b08eded6b220f89ffc630 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/pch.h @@ -0,0 +1,50 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +#ifdef _MSC_BUILD +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#else +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +#include +#include +#include +#include +#include "ModulePlugin_Define.h" +#include "ModulePlugin_Error.h" +/******************************************************************** +// Created: 2022/04/20 16:17:24 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin\pch.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModulePlugin +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件核心公有头文件 +// History: +*********************************************************************/ +extern BOOL ModulePlugin_IsErrorOccur; +extern DWORD ModulePlugin_dwErrorCode; + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f6fcfc9b92f6f326b00908f4d358012105c7729f --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile @@ -0,0 +1,44 @@ +CC = g++ -Wall -std=c++17 -fPIC +RELEASE = 0 +UNICODE = 0 +INCLUDE = -I ./ -I ../../XEngine_ThirdPart/jsoncpp +LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L ../../XEngine_ThirdPart/jsoncpp +LIB = -lXEngine_BaseLib -ljsoncpp +LIBEX = -static-libgcc -lrt -ldl -lpthread +LOADSO = -Wl,-rpath=../,--disable-new-dtags +LIBINCLUDE = Plugin_Password.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c -O2 +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + + +all:$(LIBINCLUDE) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libModulePlugin_Password.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +Plugin_Password.o:./Plugin_Password/Plugin_Password.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./Plugin_Password/Plugin_Password.cpp + +pch.o:./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + + +InstallAll:InstallSo +InstallSo:./libModulePlugin_Password.so + cp ./libModulePlugin_Password.so ../../../XEngine_Release/XEngine_Plugin/libModulePlugin_Password.so + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.so \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def new file mode 100644 index 0000000000000000000000000000000000000000..78dedee2f85146d24ce86f934777197f8ada61dd --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def @@ -0,0 +1,8 @@ +LIBRARY + +EXPORTS + PluginCore_GetLastError + + PluginCore_Init + PluginCore_UnInit + PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..ecf39ac7de9727d7554ac4b875cbd0dd48b99032 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj @@ -0,0 +1,192 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {201b6d13-82a7-49e9-9736-d6b3bfe05b30} + ModulePluginPassword + 10.0 + + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)$(Configuration)\XEngine_Plugin\ + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + false + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + $(SolutionDir)$(Configuration)\XEngine_Plugin\ + + + true + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + $(SolutionDir)$(Platform)\$(Configuration)\XEngine_Plugin\ + + + false + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + $(SolutionDir)$(Platform)\$(Configuration)\XEngine_Plugin\ + + + + Level3 + true + WIN32;_DEBUG;MODULEPLUGINPASSWORD_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + ModulePlugin_Password.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;MODULEPLUGINPASSWORD_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + ModulePlugin_Password.def + + + + + Level3 + true + _DEBUG;MODULEPLUGINPASSWORD_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + ModulePlugin_Password.def + + + + + Level3 + true + true + true + NDEBUG;MODULEPLUGINPASSWORD_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + ModulePlugin_Password.def + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.filters b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..f24d27d28acfb1e33d29575bb31e2328244addbb --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {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 + + + {25f94acd-a145-47a7-9d2a-8bd0e51b56be} + + + {0626db60-57a2-478a-9dae-ec57f55a8dc2} + + + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件\Plugin_Password + + + + + 源文件 + + + 源文件 + + + 源文件\Plugin_Password + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.user b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..88a550947edbc3c5003a41726f0749201fdb6822 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h new file mode 100644 index 0000000000000000000000000000000000000000..1b6b20064a047230cf1eb73aa8f10871b56ee4fa --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h @@ -0,0 +1,51 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 15:48:07 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\PluginPass_Define.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password +// File Base: PluginPass_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 密码生成导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数定义 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD PluginCore_GetLastError(); +/********************************************************************************* +* 导出函数定义 * +*********************************************************************************/ +/******************************************************************** +函数名称:PluginCore_Init +函数功能:初始化插件模块 + 参数.一:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:N + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_Init(LPVOID lParam = NULL); +/******************************************************************** +函数名称:PluginCore_UnInit +函数功能:卸载插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_UnInit(); +/******************************************************************** +函数名称:PluginCore_Call +函数功能:调用插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_Call(TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Error.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Error.h new file mode 100644 index 0000000000000000000000000000000000000000..28cc1fd3bb87ce0d3937e3acb36aa87ba1984114 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Error.h @@ -0,0 +1,16 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 15:43:46 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\PluginPass_Error.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password +// File Base: PluginPass_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 密码生成导出错误 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 错误定义 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_PASS_PARAMENT 0x12001 //参数错误 \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6832685728bfd6153e24ec2dbc3cd7d05528205c --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp @@ -0,0 +1,120 @@ +#include "pch.h" +#include "Plugin_Password.h" +/******************************************************************** +// Created: 2022/04/21 15:52:19 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\Plugin_Password\Plugin_Password.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\Plugin_Password +// File Base: Plugin_Password +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 密码生成类 +// History: +*********************************************************************/ +CPlugin_Password::CPlugin_Password() +{ +} +CPlugin_Password::~CPlugin_Password() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:PluginCore_Init +函数功能:初始化插件模块 + 参数.一:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:N + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Password::PluginCore_Init(LPVOID lParam) +{ + Pass_IsErrorOccur = FALSE; + + return TRUE; +} +/******************************************************************** +函数名称:PluginCore_UnInit +函数功能:卸载插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Password::PluginCore_UnInit() +{ + Pass_IsErrorOccur = FALSE; + + return TRUE; +} +/******************************************************************** +函数名称:PluginCore_Call +函数功能:调用插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Password::PluginCore_Call(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen) +{ + Pass_IsErrorOccur = FALSE; + + if ((NULL == pInt_HTTPCode) || (NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Pass_IsErrorOccur = TRUE; + Pass_dwErrorCode = ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_PASS_PARAMENT; + return FALSE; + } + TCHAR tszKeyName[128]; + TCHAR tszParamType[128]; + TCHAR tszParamLength[128]; + TCHAR tszPassword[MAX_PATH]; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + Json::StreamWriterBuilder st_JsonBuilder; + + memset(tszKeyName, '\0', sizeof(tszKeyName)); + memset(tszParamType, '\0', sizeof(tszParamType)); + memset(tszParamLength, '\0', sizeof(tszParamLength)); + memset(tszPassword, '\0', sizeof(tszPassword)); + + BaseLib_OperatorString_GetKeyValue((*pppHDRList)[1], "=", tszKeyName, tszParamType); + BaseLib_OperatorString_GetKeyValue((*pppHDRList)[2], "=", tszKeyName, tszParamLength); + Plugin_Password_Creator(tszParamType, tszParamLength, tszPassword); + + st_JsonObject["tszParamType"] = tszParamType; + st_JsonObject["tszParamLength"] = tszParamLength; + st_JsonObject["tszPassword"] = tszPassword; + st_JsonRoot["data"] = st_JsonObject; + st_JsonRoot["code"] = 0; + st_JsonRoot["msg"] = "success"; + st_JsonBuilder["emitUTF8"] = true; + + *pInt_HTTPCode = 200; + *pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length(); + memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen); + return TRUE; +} +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +BOOL CPlugin_Password::Plugin_Password_Creator(LPCTSTR lpszPassType, LPCTSTR lpszLength, TCHAR* ptszPassStr) +{ + Pass_IsErrorOccur = FALSE; + + int nType = _ttoi(lpszPassType); + int nLen = _ttoi(lpszLength); + TCHAR tszPassBuffer[MAX_PATH]; + + memset(tszPassBuffer, '\0', MAX_PATH); + BaseLib_OperatorHandle_CreateStr(tszPassBuffer, nLen); + + _tcscpy(ptszPassStr, tszPassBuffer); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h new file mode 100644 index 0000000000000000000000000000000000000000..ad98ad1e6d3b8c852e88a76c2a7d66803cbf94b6 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h @@ -0,0 +1,26 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 15:52:08 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\Plugin_Password\Plugin_Password.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\Plugin_Password +// File Base: Plugin_Password +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 密码生成类 +// History: +*********************************************************************/ + +class CPlugin_Password +{ +public: + CPlugin_Password(); + ~CPlugin_Password(); +public: + BOOL PluginCore_Init(LPVOID lParam); + BOOL PluginCore_UnInit(); + BOOL PluginCore_Call(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); +protected: + BOOL Plugin_Password_Creator(LPCTSTR lpszPassType, LPCTSTR lpszLength, TCHAR* ptszPassStr); +private: +}; diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/dllmain.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/dllmain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..daed8c8f7ac50ca1466016a0529648d18125a7e7 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/framework.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/framework.h new file mode 100644 index 0000000000000000000000000000000000000000..80cbbc9b06a9b0141f92ee19eceaed71328caff4 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp new file mode 100644 index 0000000000000000000000000000000000000000..abc57012f3ccfc41f4e61dfbe8de83f94f11fc8e --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp @@ -0,0 +1,39 @@ +#include "pch.h" +#include "Plugin_Password/Plugin_Password.h" +/******************************************************************** +// Created: 2022/04/21 15:52:56 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\pch.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +BOOL Pass_IsErrorOccur = FALSE; +DWORD Pass_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CPlugin_Password m_PluginPass; +////////////////////////////////////////////////////////////////////////// +// 导出函数定义 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD PluginCore_GetLastError() +{ + return Pass_dwErrorCode; +} +/********************************************************************************* +* 导出函数定义 * +*********************************************************************************/ +extern "C" BOOL PluginCore_Init(LPVOID lParam) +{ + return m_PluginPass.PluginCore_Init(lParam); +} +extern "C" BOOL PluginCore_UnInit() +{ + return m_PluginPass.PluginCore_UnInit(); +} +extern "C" BOOL PluginCore_Call(TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen) +{ + return m_PluginPass.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.h new file mode 100644 index 0000000000000000000000000000000000000000..e1d725355c41ea14c9231884333b8c405cf1473c --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.h @@ -0,0 +1,55 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +#ifdef _MSC_BUILD +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +#include +#include +#include "PluginPass_Define.h" +#include "PluginPass_Error.h" +using namespace std; +/******************************************************************** +// Created: 2022/04/21 15:41:25 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password\pch.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Password +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 公用头文件 +// History: +*********************************************************************/ +extern BOOL Pass_IsErrorOccur; +extern DWORD Pass_dwErrorCode; + + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#ifdef _DEBUG +#ifdef _WIN64 +#pragma comment(lib,"../../x64/Debug/jsoncpp") +#else +#pragma comment(lib,"../../Debug/jsoncpp") +#endif +#else +#ifdef _WIN64 +#pragma comment(lib,"../../x64/Release/jsoncpp") +#else +#pragma comment(lib,"../../Release/jsoncpp") +#endif +#endif +#endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5c14e50e1e1389a1199d5a0f14a3eb7763da4dd3 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile @@ -0,0 +1,44 @@ +CC = g++ -Wall -std=c++17 -fPIC +RELEASE = 0 +UNICODE = 0 +INCLUDE = -I ./ -I ../../XEngine_ThirdPart/jsoncpp +LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L ../../XEngine_ThirdPart/jsoncpp +LIB = -lXEngine_BaseLib -lXEngine_Algorithm -ljsoncpp +LIBEX = -static-libgcc -lrt -ldl -lpthread +LOADSO = -Wl,-rpath=../,--disable-new-dtags +LIBINCLUDE = Plugin_Zodiac.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c -O2 +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + + +all:$(LIBINCLUDE) + $(CC) $(DEBUG) $(LIBINCLUDE) -o libModulePlugin_Zodiac.so -shared -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) + +Plugin_Zodiac.o:./Plugin_Zodiac/Plugin_Zodiac.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./Plugin_Zodiac/Plugin_Zodiac.cpp + +pch.o:./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + + +InstallAll:InstallSo +InstallSo:./libModulePlugin_Zodiac.so + cp ./libModulePlugin_Zodiac.so ../../../XEngine_Release/XEngine_Plugin/libModulePlugin_Zodiac.so + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.so \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def new file mode 100644 index 0000000000000000000000000000000000000000..78dedee2f85146d24ce86f934777197f8ada61dd --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def @@ -0,0 +1,8 @@ +LIBRARY + +EXPORTS + PluginCore_GetLastError + + PluginCore_Init + PluginCore_UnInit + PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..9376dc094d5954df06e665f83945a5e4ca17b91f --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj @@ -0,0 +1,193 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {32bb166a-3d3d-45ef-8bed-2e0471274159} + ModulePluginZodiac + 10.0 + + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + DynamicLibrary + true + v143 + MultiByte + + + DynamicLibrary + false + v143 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + true + $(Configuration)\ + $(SolutionDir)$(Configuration)\XEngine_Plugin\ + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + false + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + $(SolutionDir)$(Configuration)\XEngine_Plugin\ + + + true + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + $(SolutionDir)$(Platform)\$(Configuration)\XEngine_Plugin\ + + + false + $(XEngine_Include);../../XEngine_ThirdPart/jsoncpp;$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + $(SolutionDir)$(Platform)\$(Configuration)\XEngine_Plugin\ + + + + Level3 + true + WIN32;_DEBUG;MODULEPLUGINZODIAC_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + ModulePlugin_Zodiac.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;MODULEPLUGINZODIAC_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + ModulePlugin_Zodiac.def + + + + + Level3 + true + _DEBUG;MODULEPLUGINZODIAC_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + ModulePlugin_Zodiac.def + + + + + Level3 + true + true + true + NDEBUG;MODULEPLUGINZODIAC_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + ModulePlugin_Zodiac.def + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.filters b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..9bb143af3cfaec2fc74de7ec1844afc2799f9a05 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {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 + + + {2a643e62-910d-4ad8-af0e-74c950734758} + + + {d8de587c-ff02-42d1-81d8-4026d7df8140} + + + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件\Plugin_Zodiac + + + + + 源文件 + + + 源文件 + + + 源文件\Plugin_Zodiac + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.user b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..88a550947edbc3c5003a41726f0749201fdb6822 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h new file mode 100644 index 0000000000000000000000000000000000000000..07d46736a0317b228884a695e3102e046a0bf53c --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h @@ -0,0 +1,51 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 10:50:25 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\PluginZodiac_Define.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac +// File Base: PluginZodiac_Define +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 生肖插件导出定义 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数定义 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD PluginCore_GetLastError(); +/********************************************************************************* +* 导出函数定义 * +*********************************************************************************/ +/******************************************************************** +函数名称:PluginCore_Init +函数功能:初始化插件模块 + 参数.一:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:N + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_Init(LPVOID lParam = NULL); +/******************************************************************** +函数名称:PluginCore_UnInit +函数功能:卸载插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_UnInit(); +/******************************************************************** +函数名称:PluginCore_Call +函数功能:调用插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL PluginCore_Call(TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Error.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Error.h new file mode 100644 index 0000000000000000000000000000000000000000..4226377aa107ef8b53b7217f38392e1e2f22aca0 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Error.h @@ -0,0 +1,16 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 13:14:06 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\PluginZodiac_Error.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac +// File Base: PluginZodiac_Error +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 生肖插件导出错误 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 错误定义 +////////////////////////////////////////////////////////////////////////// +#define ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_ZODIAC_PARAMENT 0x11001 //参数错误 \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp new file mode 100644 index 0000000000000000000000000000000000000000..60325d076428c6781b246d4283ecedf85ec092d3 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp @@ -0,0 +1,161 @@ +#include "pch.h" +#include "Plugin_Zodiac.h" +/******************************************************************** +// Created: 2022/04/21 15:50:22 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\Plugin_Zodiac\Plugin_Zodiac.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\Plugin_Zodiac +// File Base: Plugin_Zodiac +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 星座生肖 +// History: +*********************************************************************/ +CPlugin_Zodiac::CPlugin_Zodiac() +{ + m_StrChinese[0] = _T("猴"); + m_StrChinese[1] = _T("鸡"); + m_StrChinese[2] = _T("狗"); + m_StrChinese[3] = _T("猪"); + m_StrChinese[4] = _T("鼠"); + m_StrChinese[5] = _T("牛"); + m_StrChinese[6] = _T("虎"); + m_StrChinese[7] = _T("兔"); + m_StrChinese[8] = _T("龙"); + m_StrChinese[9] = _T("蛇"); + m_StrChinese[10] = _T("马"); + m_StrChinese[11] = _T("羊"); +} +CPlugin_Zodiac::~CPlugin_Zodiac() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:PluginCore_Init +函数功能:初始化插件模块 + 参数.一:lParam + In/Out:In/Out + 类型:无类型指针 + 可空:N + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Zodiac::PluginCore_Init(LPVOID lParam) +{ + Zodiac_IsErrorOccur = FALSE; + + return TRUE; +} +/******************************************************************** +函数名称:PluginCore_UnInit +函数功能:卸载插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Zodiac::PluginCore_UnInit() +{ + Zodiac_IsErrorOccur = FALSE; + + return TRUE; +} +/******************************************************************** +函数名称:PluginCore_Call +函数功能:调用插件 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CPlugin_Zodiac::PluginCore_Call(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen) +{ + Zodiac_IsErrorOccur = FALSE; + + if ((NULL == pInt_HTTPCode) || (NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen)) + { + Zodiac_IsErrorOccur = TRUE; + Zodiac_dwErrorCode = ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_ZODIAC_PARAMENT; + return FALSE; + } + TCHAR tszKeyName[128]; + TCHAR tszValueName[128]; + TCHAR tszChineseZodiac[64]; + TCHAR tszEnglishZodiac[64]; + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + Json::StreamWriterBuilder st_JsonBuilder; + + memset(tszKeyName, '\0', sizeof(tszKeyName)); + memset(tszValueName, '\0', sizeof(tszValueName)); + memset(tszChineseZodiac, '\0', sizeof(tszChineseZodiac)); + memset(tszEnglishZodiac, '\0', sizeof(tszEnglishZodiac)); + + BaseLib_OperatorString_GetKeyValue((*pppHDRList)[1], "=", tszKeyName, tszValueName); + Plugin_Zodiac_Chinese(tszValueName, tszChineseZodiac); + Plugin_Zodiac_English(tszValueName, tszEnglishZodiac); + + st_JsonObject["tszDate"] = tszValueName; + st_JsonObject["tszChineseZodiac"] = tszChineseZodiac; + st_JsonObject["tszEnglishZodiac"] = tszEnglishZodiac; + st_JsonRoot["data"] = st_JsonObject; + st_JsonRoot["code"] = 0; + st_JsonRoot["msg"] = "success"; + st_JsonBuilder["emitUTF8"] = true; + + *pInt_HTTPCode = 200; + *pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length(); + memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen); + return TRUE; +} +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +BOOL CPlugin_Zodiac::Plugin_Zodiac_Chinese(LPCTSTR lpszDate, TCHAR* ptszCZodiac) +{ + Zodiac_IsErrorOccur = FALSE; + + int nDate = _ttoi(lpszDate); + int nYear = nDate / 10000; + nYear = nYear % 12; + + _tcscpy(ptszCZodiac, m_StrChinese[nYear].c_str()); + return TRUE; +} +BOOL CPlugin_Zodiac::Plugin_Zodiac_English(LPCTSTR lpszDate, TCHAR* ptszEZodiac) +{ + Zodiac_IsErrorOccur = FALSE; + + int nMonth = 0; + int nDay = 0; + Algorithm_String_GetMemoryInt(lpszDate, 4, 5, &nMonth); + Algorithm_String_GetMemoryInt(lpszDate, 6, 7, &nDay); + + string m_StrEnglish[12][2] = + { + { "摩羯座","水瓶座" },//一月 + { "水瓶座","双鱼座" },//二月 + { "双鱼座","白羊座" },//三月 + { "白羊座","金牛座" },//四月 + { "金牛座","双子座" },//五月 + { "双子座","巨蟹座" },//六月 + { "巨蟹座","狮子座" },//七月 + { "狮子座","处女座" },//八月 + { "处女座","天秤座" },//九月 + { "天秤座","天蝎座" },//十月 + { "天蝎座","射手座" },//十一月 + { "射手座","摩羯座" },//十一月 + }; + //每个月有两个星座,数组中的值对应每个月中两个星座的分割日期 + int nConstell[]{ 20,19,21,20,21,22,23,23,23,24,23,22 }; + /*第一维输出月份,第二维由生日的日期/每个月对应的分割日期(constell_dates), + 为0就表示一个月中的前一个星座,否则为后一个星座, + 比如生日为5月6号,则对应输出 constells[4][0] 对应金牛座*/ + _tcscpy(ptszEZodiac, m_StrEnglish[nMonth - 1][nDay / nConstell[nMonth]].c_str()); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h new file mode 100644 index 0000000000000000000000000000000000000000..7f4fefe7719a7081a6956796b9b319763b9e54c2 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h @@ -0,0 +1,28 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 15:50:04 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\Plugin_Zodiac\Plugin_Zodiac.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\Plugin_Zodiac +// File Base: Plugin_Zodiac +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 星座生肖 +// History: +*********************************************************************/ + +class CPlugin_Zodiac +{ +public: + CPlugin_Zodiac(); + ~CPlugin_Zodiac(); +public: + BOOL PluginCore_Init(LPVOID lParam); + BOOL PluginCore_UnInit(); + BOOL PluginCore_Call(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); +protected: + BOOL Plugin_Zodiac_Chinese(LPCTSTR lpszDate, TCHAR* ptszCZodiac); + BOOL Plugin_Zodiac_English(LPCTSTR lpszDate, TCHAR* ptszEZodiac); +private: + string m_StrChinese[12]; +}; diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/dllmain.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/dllmain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..daed8c8f7ac50ca1466016a0529648d18125a7e7 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/framework.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/framework.h new file mode 100644 index 0000000000000000000000000000000000000000..80cbbc9b06a9b0141f92ee19eceaed71328caff4 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e4812df662411f509e58941c2df304a7b2ea0f26 --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp @@ -0,0 +1,39 @@ +#include "pch.h" +#include "Plugin_Zodiac/Plugin_Zodiac.h" +/******************************************************************** +// Created: 2022/04/21 10:46:38 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\pch.cpp +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +BOOL Zodiac_IsErrorOccur = FALSE; +DWORD Zodiac_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CPlugin_Zodiac m_PluginZodiac; +////////////////////////////////////////////////////////////////////////// +// 导出函数定义 +////////////////////////////////////////////////////////////////////////// +extern "C" DWORD PluginCore_GetLastError() +{ + return Zodiac_dwErrorCode; +} +/********************************************************************************* +* 导出函数定义 * +*********************************************************************************/ +extern "C" BOOL PluginCore_Init(LPVOID lParam) +{ + return m_PluginZodiac.PluginCore_Init(lParam); +} +extern "C" BOOL PluginCore_UnInit() +{ + return m_PluginZodiac.PluginCore_UnInit(); +} +extern "C" BOOL PluginCore_Call(TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen) +{ + return m_PluginZodiac.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.h new file mode 100644 index 0000000000000000000000000000000000000000..9cec5faf830fb7c5b99ccba2ada1d0c5b2c137af --- /dev/null +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.h @@ -0,0 +1,58 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +#ifdef _MSC_BUILD +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +#include +#include +#include +#include +#include "PluginZodiac_Define.h" +#include "PluginZodiac_Error.h" +using namespace std; +/******************************************************************** +// Created: 2022/04/21 10:32:25 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac\pch.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_PluginModule\ModulePlugin_Zodiac +// File Base: pch +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 公用头文件 +// History: +*********************************************************************/ +extern BOOL Zodiac_IsErrorOccur; +extern DWORD Zodiac_dwErrorCode; + + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_BaseLib/XEngine_Algorithm") +#ifdef _DEBUG +#ifdef _WIN64 +#pragma comment(lib,"../../x64/Debug/jsoncpp") +#else +#pragma comment(lib,"../../Debug/jsoncpp") +#endif +#else +#ifdef _WIN64 +#pragma comment(lib,"../../x64/Release/jsoncpp") +#else +#pragma comment(lib,"../../Release/jsoncpp") +#endif +#endif +#endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile index c1cdb9de090eec298d62fa5df07895bb0b2d763a..2c7d9f7deb05823b9a508159c31113fb5b978e1a 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile @@ -2,14 +2,14 @@ CC = g++ -Wall RELEASE = 0 UNICODE = 0 LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L /usr/local/lib/XEngine_Release/XEngine_NetHelp \ - -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleHelp \ + -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleHelp -L ../../XEngine_ModulePlugin \ -L ../../XEngine_ThirdPart/jsoncpp -L ../../XEngine_ThirdPart/opencc/ubuntu LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_OPenSsl -lHelpComponents_XLog -lRfcComponents_HttpServer -lNetHelp_APIHelp \ - -lXEngine_ModuleConfigure -lXEngine_ModuleDatabase -lXEngine_ModuleProtocol -lXEngine_ModuleHelp \ + -lXEngine_ModuleConfigure -lXEngine_ModuleDatabase -lXEngine_ModuleProtocol -lXEngine_ModuleHelp -lXEngine_ModulePlugin \ -ljsoncpp -lopencc LIBEX = -static-libgcc -ldl -lrt -lpthread LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = XEngine_Configure.o XEngine_Network.o XEngine_HTTPTask.o XEngine_HttpApp.o \ +LIBINCLUDE = XEngine_Configure.o XEngine_Network.o XEngine_HTTPTask.o XEngine_PluginTask.o XEngine_HttpApp.o \ HTTPTask_IPInfo.o HTTPTask_IDCard.o HTTPTask_Phone.o HTTPTask_Bank.o HTTPTask_Language.o HTTPTask_Translation.o ifeq ($(RELEASE),1) @@ -35,6 +35,8 @@ XEngine_Network.o:./XEngine_Network.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_Network.cpp XEngine_HTTPTask.o:./XEngine_HTTPTask.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask.cpp +XEngine_PluginTask.o:./XEngine_PluginTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_PluginTask.cpp HTTPTask_IPInfo.o:./XEngine_HTTPTask/HTTPTask_IPInfo.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_HTTPTask/HTTPTask_IPInfo.cpp diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index 582bbca6035ec596b0aed22eba49b0d7055b0f11..91fbae89c8976359246cff44bc3a146acaa86887 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp @@ -76,7 +76,7 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR memset(tszUrlName, '\0', sizeof(tszUrlName)); //得到URL参数个数 RfcComponents_HttpHelp_GetParament(pSt_HTTPParam->tszHttpUri, &pptszList, &nListCount, tszUrlName); - if (nListCount < 3) + if (nListCount < 1) { st_HDRParam.nHttpCode = 404; RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); @@ -120,6 +120,12 @@ BOOL XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTSTR XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return FALSE; } + //首先处理插件 + if (ModulePlugin_Loader_Find(tszValue)) + { + XEngine_PluginTask_Handle(tszValue, lpszClientAddr, lpszRVBuffer, nRVLen, &pptszList, nListCount); + return TRUE; + } //是不是ip查询 if (0 == _tcsnicmp(lpszParamValue1, tszValue, _tcslen(lpszParamValue1))) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h index 4829ee3bc5a1aac9cbf091c6a7eba0b3c2f59e99..78f771dba55c4fdafc9c83b128e61b327c87e52d 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h @@ -36,6 +36,9 @@ using namespace std; #include #include #include +#include +#include +#include //加载项目相关头文件 #include "../../XEngine_UserProtocol.h" #include "../../XEngine_ModuleConfigure/ModuleConfig_Define.h" @@ -46,10 +49,13 @@ using namespace std; #include "../../XEngine_ModuleProtocol/ModuleProtocol_Error.h" #include "../../XEngine_ModuleHelp/ModuleHelp_Define.h" #include "../../XEngine_ModuleHelp/ModuleHelp_Error.h" +#include "../../XEngine_ModulePlugin/ModulePlugin_Define.h" +#include "../../XEngine_ModulePlugin/ModulePlugin_Error.h" //加载自己的头文件 #include "XEngine_Configure.h" #include "XEngine_Network.h" #include "XEngine_HTTPTask.h" +#include "XEngine_PluginTask.h" #include "XEngine_HTTPTask/HTTPTask_IPInfo.h" #include "XEngine_HTTPTask/HTTPTask_IDCard.h" #include "XEngine_HTTPTask/HTTPTask_Phone.h" @@ -77,7 +83,7 @@ extern XHANDLE xhHTTPPacket; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; extern XENGINE_OPENCCCONFIG st_OPenccConfig; - +extern XENGINE_PLUGINCONFIG st_PluginConfig; //连接库 #ifdef _WINDOWS #ifdef _WIN64 @@ -86,11 +92,13 @@ extern XENGINE_OPENCCCONFIG st_OPenccConfig; #pragma comment(lib,"../../x64/Debug/XEngine_ModuleDatabase.lib") #pragma comment(lib,"../../x64/Debug/XEngine_ModuleProtocol.lib") #pragma comment(lib,"../../x64/Debug/XEngine_ModuleHelp.lib") +#pragma comment(lib,"../../x64/Debug/XEngine_ModulePlugin.lib") #else #pragma comment(lib,"../../x64/Release/XEngine_ModuleConfigure.lib") #pragma comment(lib,"../../x64/Release/XEngine_ModuleDatabase.lib") #pragma comment(lib,"../../x64/Release/XEngine_ModuleProtocol.lib") #pragma comment(lib,"../../x64/Release/XEngine_ModuleHelp.lib") +#pragma comment(lib,"../../x64/Release/XEngine_ModulePlugin.lib") #endif #else #ifdef _DEBUG @@ -98,11 +106,13 @@ extern XENGINE_OPENCCCONFIG st_OPenccConfig; #pragma comment(lib,"../../Debug/XEngine_ModuleDatabase.lib") #pragma comment(lib,"../../Debug/XEngine_ModuleProtocol.lib") #pragma comment(lib,"../../Debug/XEngine_ModuleHelp.lib") +#pragma comment(lib,"../../Debug/XEngine_ModulePlugin.lib") #else #pragma comment(lib,"../../Release/XEngine_ModuleConfigure.lib") #pragma comment(lib,"../../Release/XEngine_ModuleDatabase.lib") #pragma comment(lib,"../../Release/XEngine_ModuleProtocol.lib") #pragma comment(lib,"../../Release/XEngine_ModuleHelp.lib") +#pragma comment(lib,"../../Release/XEngine_ModulePlugin.lib") #endif #endif #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") @@ -112,5 +122,6 @@ extern XENGINE_OPENCCCONFIG st_OPenccConfig; #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_HttpServer.lib") #pragma comment(lib,"XEngine_NetHelp/NetHelp_APIHelp.lib") +#pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi") #pragma comment(lib,"Ws2_32.lib") #endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index a9d1d2f54f4cfc2a512d86cd1cf0c5369fa35652..9b72db249d31ddc7f9e4305cd68abe12e7f3360a 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 xhHTTPPacket = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; XENGINE_OPENCCCONFIG st_OPenccConfig; +XENGINE_PLUGINCONFIG st_PluginConfig; void ServiceApp_Stop(int signo) { @@ -39,6 +40,7 @@ void ServiceApp_Stop(int signo) ModuleDatabase_Bank_Destory(); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); + ModulePlugin_Core_Destroy(); } #ifdef _WINDOWS WSACleanup(); @@ -92,6 +94,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_PluginConfig, '\0', sizeof(XENGINE_PLUGINCONFIG)); st_XLogConfig.XLog_MaxBackupFile = 10; st_XLogConfig.XLog_MaxSize = 1024000; @@ -129,6 +132,20 @@ int main(int argc, char** argv) goto XENGINE_SERVICEAPP_EXIT; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化OPenCC配置文件成功")); + //初始化插件配置 + if (st_ServiceConfig.st_XPlugin.bEnable) + { + if (!ModuleConfigure_Json_PluginFile(st_ServiceConfig.st_XPlugin.tszPluginFile, &st_PluginConfig)) + { + 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("启动服务中,初始化插件配置文件成功")); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,插件系统被禁用")); + } //初始化数据库 if (!ModuleDatabase_IPInfo_Init(st_ServiceConfig.st_XApi.tszIPData)) { @@ -209,12 +226,43 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,HTTP消息服务没有被启用")); } + //启动插件 + if (!ModulePlugin_Core_Init()) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化插件系统失败,错误:%lX"), ModulePlugin_GetLastError()); + goto XENGINE_SERVICEAPP_EXIT; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化插件系统成功")); + //加载插件 + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,开始加载插件,总共:%d 插件"), st_PluginConfig.pStl_ListPlugin->size()); + { + list::const_iterator stl_ListIterator = st_PluginConfig.pStl_ListPlugin->begin(); + for (int i = 1; stl_ListIterator != st_PluginConfig.pStl_ListPlugin->end(); stl_ListIterator++, i++) + { + if (stl_ListIterator->bEnable) + { + if (ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,加载插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,加载插件中,当前第:%d 个加载失败,方法:%s,路径:%s,错误:%ld"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, ModulePlugin_GetLastError()); + } + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,加载插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); + } + } + } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,发行版本次数:%d,当前版本:%s。。。"), st_ServiceConfig.st_XVer.pStl_ListVer->size(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str()); while (bIsRun) { std::this_thread::sleep_for(std::chrono::seconds(1)); } + XENGINE_SERVICEAPP_EXIT: if (bIsRun) { @@ -232,6 +280,7 @@ XENGINE_SERVICEAPP_EXIT: ModuleDatabase_Bank_Destory(); //销毁日志资源 HelpComponents_XLog_Destroy(xhLog); + ModulePlugin_Core_Destroy(); } #ifdef _WINDOWS WSACleanup(); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj index a6b400e9d09fe94023067f1d12ace50c59850ce7..1af4aece3ef5e99ce8cb05a21b38a738c2ac28eb 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj @@ -163,6 +163,7 @@ + @@ -175,6 +176,7 @@ + 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 e9c52ace791f2c27948c74ba611fece6951f9c9d..9118afe697ead56e1a2174429114afaf8263852b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.vcxproj.filters @@ -51,6 +51,9 @@ 源文件\XEngine_HTTPTask + + 源文件 + @@ -83,5 +86,8 @@ 头文件\XEngine_HTTPTask + + 头文件 + \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ff318f9674f627e8895196c61b1d07f05efd6dc1 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp @@ -0,0 +1,33 @@ +#include "XEngine_Hdr.h" +/******************************************************************** +// Created: 2022/01/20 14:44:17 +// File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp\XEngine_HTTPTask.cpp +// File Path: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp +// File Base: XEngine_HTTPTask +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: HTTP任务处理代码 +// History: +*********************************************************************/ +BOOL XEngine_PluginTask_Handle(LPCTSTR lpszMethodName, LPCTSTR lpszClientAddr, LPCTSTR lpszRVBuffer, int nRVLen, TCHAR*** ppptszList, int nListCount) +{ + int nMsgLen = 0; + int nPktLen = 0; + TCHAR tszMsgBuffer[2048]; + TCHAR tszPktBuffer[2048]; + RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParament; + + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + memset(tszPktBuffer, '\0', sizeof(tszPktBuffer)); + memset(&st_HDRParament, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + + st_HDRParament.bIsClose = TRUE; + _tcscpy(st_HDRParament.tszMimeType, "json"); + + ModulePlugin_Loader_Exec(lpszMethodName, ppptszList, nListCount, &st_HDRParament.nHttpCode, tszPktBuffer, &nPktLen); + RfcComponents_HttpServer_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParament, tszPktBuffer, nPktLen); + XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端:%s,请求的方法:%s,由插件模块处理成功"), lpszClientAddr, lpszMethodName); + return TRUE; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.h new file mode 100644 index 0000000000000000000000000000000000000000..9920703cd124a8c66b8111fa554aa98a36cabba3 --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.h @@ -0,0 +1,14 @@ +#pragma once +/******************************************************************** +// Created: 2022/04/21 11:13:32 +// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp\XEngine_PluginTask.h +// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ServiceApp\XEngine_HttpApp +// File Base: XEngine_PluginTask +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 插件处理框架代码 +// History: +*********************************************************************/ +//插件处理函数 +BOOL XEngine_PluginTask_Handle(LPCTSTR lpszMethodName, LPCTSTR lpszClientAddr, LPCTSTR lpszRVBuffer, int nRVLen, TCHAR*** ppptszList, int nListCount); \ No newline at end of file