From 2bd7c35f0193eacf092550e72f5f9df1e7d400a1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 10:06:32 +0800 Subject: [PATCH 01/16] added:configure plugin system is supported --- .../ModuleConfig_Define.h | 37 ++++++- .../ModuleConfig_Error.h | 4 +- .../ModuleConfigure_Json.cpp | 96 +++++++++++++++++++ .../ModuleConfigure_Json.h | 1 + .../XEngine_ModuleConfigure.def | 3 +- .../XEngine_ModuleConfigure/pch.cpp | 4 + 6 files changed, 142 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 152e8e6..5df90b8 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 tszPluginName[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 5918cee..fd8762e 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 5bfd798..01f7357 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,84 @@ 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; + } + //解析列表 + for (int i = 0; i < st_JsonRoot["PluginCount"].asInt(); i++) + { + XENGINE_PLUGININFO st_PluginInfo; + memset(&st_PluginInfo, '\0', sizeof(XENGINE_PLUGININFO)); + + st_PluginInfo.bEnable = st_JsonRoot["PluginArray"][i].asBool(); + _tcscpy(st_PluginInfo.tszPluginName, st_JsonRoot["PluginName"][i].asCString()); + _tcscpy(st_PluginInfo.tszPluginMethod, st_JsonRoot["PluginMethod"][i].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 fce6182..d5c720d 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 bb1d31c..892d206 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 afcd3b1..a411594 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 -- Gitee From 3c6cba7c94de764063380f09c52add6c77dd82b7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 10:07:54 +0800 Subject: [PATCH 02/16] added:plugin module --- .../ModulePlugin_Core/ModulePlugin_Core.cpp | 321 ++++++++++++++++++ .../ModulePlugin_Core/ModulePlugin_Core.h | 47 +++ .../ModulePlugin_Define.h | 140 ++++++++ .../XEngine_ModulePlugin/ModulePlugin_Error.h | 25 ++ .../ModulePlugin_Loader.cpp | 135 ++++++++ .../ModulePlugin_Loader/ModulePlugin_Loader.h | 34 ++ .../XEngine_ModulePlugin.def | 13 + .../XEngine_ModulePlugin.vcxproj | 184 ++++++++++ .../XEngine_ModulePlugin.vcxproj.filters | 68 ++++ .../XEngine_ModulePlugin.vcxproj.user | 4 + .../XEngine_ModulePlugin/dllmain.cpp | 19 ++ .../XEngine_ModulePlugin/framework.h | 5 + XEngine_Source/XEngine_ModulePlugin/pch.cpp | 64 ++++ XEngine_Source/XEngine_ModulePlugin/pch.h | 50 +++ 14 files changed, 1109 insertions(+) create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp create mode 100644 XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h create mode 100644 XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def create mode 100644 XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj create mode 100644 XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.filters create mode 100644 XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj.user create mode 100644 XEngine_Source/XEngine_ModulePlugin/dllmain.cpp create mode 100644 XEngine_Source/XEngine_ModulePlugin/framework.h create mode 100644 XEngine_Source/XEngine_ModulePlugin/pch.cpp create mode 100644 XEngine_Source/XEngine_ModulePlugin/pch.h 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 0000000..030f11f --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp @@ -0,0 +1,321 @@ +#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 + 类型:插件句柄 + 可空:Y + 意思:要执行的插件句柄,为空执行全部 + 参数.二:lPAaram + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:可作为输入输出参数 + 参数.三:lPBaram + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:可作为输入输出参数 +返回值 + 类型:逻辑型 + 意思:是否执行成功 +备注:参数要么传递NULL,要么传递值,由用户来判断参数是否可用 +*********************************************************************/ +BOOL CModulePlugin_Core::ModulePlugin_Core_Exec(XNETHANDLE xhModule, LPVOID lPAaram, LPVOID lPBaram) +{ + ModulePlugin_IsErrorOccur = FALSE; + + st_csStl.lock_shared(); + //判断是否是全部执行 + if (0 == xhModule) + { + //全部执行一遍 + unordered_map::const_iterator stl_MapIterator = stl_MapFrameWork.begin(); + for (; stl_MapIterator != stl_MapFrameWork.end(); stl_MapIterator++) + { + if (!stl_MapIterator->second.fpCall_PluginCore_Call(lPAaram, lPBaram)) + { + ModulePlugin_IsErrorOccur = TRUE; + ModulePlugin_dwErrorCode = stl_MapIterator->second.fpCall_PluginCore_GetLastError(); + st_csStl.unlock_shared(); + return FALSE; + } + } + } + else + { + //执行指定插件函数 + 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(lPAaram, lPBaram)) + { + 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 0000000..899b8fd --- /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)(LPVOID lPAaram, LPVOID lPBaram); +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)(LPVOID lPAaram, LPVOID lPBaram); + 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 = 0, LPVOID lPAaram = NULL, LPVOID lPBaram = NULL); + 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 0000000..90a8611 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -0,0 +1,140 @@ +#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 + 类型:插件句柄 + 可空:Y + 意思:要执行的插件句柄,为空执行全部 + 参数.二:lPAaram + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:可作为输入输出参数 + 参数.三:lPBaram + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:可作为输入输出参数 +返回值 + 类型:逻辑型 + 意思:是否执行成功 +备注:参数要么传递NULL,要么传递值,由用户来判断参数是否可用 +*********************************************************************/ +extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule = 0, LPVOID lPAaram = NULL, LPVOID lPBaram = NULL); +/******************************************************************** +函数名称: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_Exec +函数功能:执行一次插件 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 + 参数.二:lAParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义参数 + 参数.三:lAParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam); +/******************************************************************** +函数名称: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 0000000..9e32909 --- /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 0000000..5dcf0bf --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -0,0 +1,135 @@ +#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_Exec +函数功能:执行一次插件 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要执行的方法 + 参数.二:lAParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义参数 + 参数.三:lAParam + In/Out:In/Out + 类型:无类型指针 + 可空:Y + 意思:自定义参数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam) +{ + 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, lAParam, lBParam)) + { + 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 0000000..0a141fc --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -0,0 +1,34 @@ +#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_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam); + 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 0000000..a46ccb9 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -0,0 +1,13 @@ +LIBRARY + +EXPORTS + ModulePlugin_GetLastError + + ModulePlugin_Core_Init + ModulePlugin_Core_Push + ModulePlugin_Core_Exec + ModulePlugin_Core_Destroy + + ModulePlugin_Loader_Insert + 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 0000000..b0f0927 --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj @@ -0,0 +1,184 @@ + + + + + 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 + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + false + + + true + + + false + + + + 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;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + XEngine_ModulePlugin.def + + + + + Level3 + true + _DEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + XEngine_ModulePlugin.def + + + + + Level3 + true + true + true + NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;%(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 0000000..f39eb69 --- /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 0000000..88a5509 --- /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 0000000..daed8c8 --- /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 0000000..80cbbc9 --- /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 0000000..92ecdbb --- /dev/null +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -0,0 +1,64 @@ +#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, LPVOID lPAaram, LPVOID lPBaram) +{ + return m_PluginCore.ModulePlugin_Core_Exec(xhModule, lPAaram, lPBaram); +} +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_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam) +{ + return m_PluginLoader.ModulePlugin_Loader_Exec(lpszMethodName, lAParam, lBParam); +} +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 0000000..76a4324 --- /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 -- Gitee From 64e231b677483c6b7f44f257d7e652aa8e7485a4 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 10:16:15 +0800 Subject: [PATCH 03/16] added:method name is exist for plugin --- .../ModulePlugin_Define.h | 14 ++++++++ .../ModulePlugin_Loader.cpp | 35 +++++++++++++++++++ .../ModulePlugin_Loader/ModulePlugin_Loader.h | 1 + .../XEngine_ModulePlugin.def | 1 + XEngine_Source/XEngine_ModulePlugin/pch.cpp | 4 +++ 5 files changed, 55 insertions(+) diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h index 90a8611..a079ade 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -106,6 +106,20 @@ extern "C" BOOL ModulePlugin_Core_Destroy(); *********************************************************************/ 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 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp index 5dcf0bf..0a06d71 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -65,6 +65,41 @@ BOOL CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, 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 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h index 0a141fc..f8b8841 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -24,6 +24,7 @@ public: ~CModulePlugin_Loader(); public: BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName); + BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName); BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam); BOOL ModulePlugin_Loader_Destory(); protected: diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def index a46ccb9..46531eb 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -9,5 +9,6 @@ EXPORTS 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/pch.cpp b/XEngine_Source/XEngine_ModulePlugin/pch.cpp index 92ecdbb..89f635f 100644 --- a/XEngine_Source/XEngine_ModulePlugin/pch.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -54,6 +54,10 @@ extern "C" BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lps { 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, LPVOID lAParam, LPVOID lBParam) { return m_PluginLoader.ModulePlugin_Loader_Exec(lpszMethodName, lAParam, lBParam); -- Gitee From 539e286a5076560a3ba2b27d5bca1d84d8c5961e Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 11:12:30 +0800 Subject: [PATCH 04/16] fixed:load plugin list crashed --- .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 01f7357..731bcc4 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -305,14 +305,15 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFi return FALSE; } //解析列表 + Json::Value st_JsonArray = st_JsonRoot["PluginArray"]; for (int i = 0; i < st_JsonRoot["PluginCount"].asInt(); i++) { XENGINE_PLUGININFO st_PluginInfo; memset(&st_PluginInfo, '\0', sizeof(XENGINE_PLUGININFO)); - st_PluginInfo.bEnable = st_JsonRoot["PluginArray"][i].asBool(); - _tcscpy(st_PluginInfo.tszPluginName, st_JsonRoot["PluginName"][i].asCString()); - _tcscpy(st_PluginInfo.tszPluginMethod, st_JsonRoot["PluginMethod"][i].asCString()); + st_PluginInfo.bEnable = st_JsonArray[i]["PluginEnable"].asBool(); + _tcscpy(st_PluginInfo.tszPluginName, st_JsonArray[i]["PluginName"].asCString()); + _tcscpy(st_PluginInfo.tszPluginMethod, st_JsonArray[i]["PluginMethod"].asCString()); pSt_PluginConfig->pStl_ListPlugin->push_back(st_PluginInfo); } return TRUE; -- Gitee From 7ec426be4cd5e5940be077852131a997b4fe95c1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 14:39:20 +0800 Subject: [PATCH 05/16] modify:plugin not support exection all module modify:plugin exection parament --- .../ModulePlugin_Core/ModulePlugin_Core.cpp | 100 +++++++++--------- .../ModulePlugin_Core/ModulePlugin_Core.h | 6 +- .../ModulePlugin_Define.h | 86 ++++++++++----- .../ModulePlugin_Loader.cpp | 39 ++++--- .../ModulePlugin_Loader/ModulePlugin_Loader.h | 2 +- .../XEngine_ModulePlugin.def | 2 +- XEngine_Source/XEngine_ModulePlugin/pch.cpp | 8 +- 7 files changed, 142 insertions(+), 101 deletions(-) diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp index 030f11f..a3657b6 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.cpp @@ -84,67 +84,63 @@ BOOL CModulePlugin_Core::ModulePlugin_Core_Push(XNETHANDLE* pxhModule, LPCTSTR l } /******************************************************************** 函数名称:ModulePlugin_Core_Exec -函数功能:执行插件功能 +函数功能:执行一次 参数.一:xhModule In/Out:In - 类型:插件句柄 - 可空:Y - 意思:要执行的插件句柄,为空执行全部 - 参数.二:lPAaram - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:可作为输入输出参数 - 参数.三:lPBaram - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:可作为输入输出参数 + 类型:句柄 + 可空: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 + 意思:输出内容大小 返回值 类型:逻辑型 - 意思:是否执行成功 -备注:参数要么传递NULL,要么传递值,由用户来判断参数是否可用 + 意思:是否成功 +备注: *********************************************************************/ -BOOL CModulePlugin_Core::ModulePlugin_Core_Exec(XNETHANDLE xhModule, LPVOID lPAaram, LPVOID lPBaram) +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(); - //判断是否是全部执行 - if (0 == xhModule) - { - //全部执行一遍 - unordered_map::const_iterator stl_MapIterator = stl_MapFrameWork.begin(); - for (; stl_MapIterator != stl_MapFrameWork.end(); stl_MapIterator++) - { - if (!stl_MapIterator->second.fpCall_PluginCore_Call(lPAaram, lPBaram)) - { - ModulePlugin_IsErrorOccur = TRUE; - ModulePlugin_dwErrorCode = stl_MapIterator->second.fpCall_PluginCore_GetLastError(); - st_csStl.unlock_shared(); - return FALSE; - } - } - } - else - { - //执行指定插件函数 - 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(lPAaram, lPBaram)) - { - ModulePlugin_IsErrorOccur = TRUE; - ModulePlugin_dwErrorCode = stl_MapIterator->second.fpCall_PluginCore_GetLastError(); - st_csStl.unlock_shared(); - return FALSE; - } - } + //执行指定插件函数 + 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; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h index 899b8fd..93bdd50 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Core/ModulePlugin_Core.h @@ -12,7 +12,7 @@ *********************************************************************/ typedef BOOL(*FPCall_PluginCore_Init)(LPVOID lParam); typedef BOOL(*FPCall_PluginCore_UnInit)(); -typedef BOOL(*FPCall_PluginCore_Call)(LPVOID lPAaram, LPVOID lPBaram); +typedef BOOL(*FPCall_PluginCore_Call)(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); typedef DWORD(*FPCall_PluginCore_GetLastError)(); typedef struct @@ -22,7 +22,7 @@ typedef struct BOOL(*fpCall_PluginCore_Init)(LPVOID lParam); BOOL(*fpCall_PluginCore_UnInit)(); - BOOL(*fpCall_PluginCore_Call)(LPVOID lPAaram, LPVOID lPBaram); + BOOL(*fpCall_PluginCore_Call)(TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); DWORD(*fpCall_PluginCore_GetLastError)(); }PLUGINCORE_FRAMEWORK, * LPPLUGINCORE_FRAMEWORK; @@ -34,7 +34,7 @@ public: public: BOOL ModulePlugin_Core_Init(); BOOL ModulePlugin_Core_Push(XNETHANDLE* pxhModule, LPCTSTR lpszPluginFile, LPVOID lParam = NULL); - BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule = 0, LPVOID lPAaram = NULL, LPVOID lPBaram = 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); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h index a079ade..60de35e 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -52,28 +52,43 @@ extern "C" BOOL ModulePlugin_Core_Init(); extern "C" BOOL ModulePlugin_Core_Push(XNETHANDLE * pxhNet, LPCSTR lpszPluginFile, LPVOID lParam = NULL); /******************************************************************** 函数名称:ModulePlugin_Core_Exec -函数功能:执行插件功能 +函数功能:执行一次 参数.一:xhModule In/Out:In - 类型:插件句柄 - 可空:Y - 意思:要执行的插件句柄,为空执行全部 - 参数.二:lPAaram - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:可作为输入输出参数 - 参数.三:lPBaram - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:可作为输入输出参数 + 类型:句柄 + 可空: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 + 意思:输出内容大小 返回值 类型:逻辑型 - 意思:是否执行成功 -备注:参数要么传递NULL,要么传递值,由用户来判断参数是否可用 + 意思:是否成功 +备注: *********************************************************************/ -extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule = 0, LPVOID lPAaram = NULL, LPVOID lPBaram = NULL); +extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); /******************************************************************** 函数名称:ModulePlugin_Core_Destroy 函数功能:销毁插件核心并且清理资源 @@ -127,22 +142,37 @@ extern "C" BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName); 类型:常量字符指针 可空:N 意思:输入要执行的方法 - 参数.二:lAParam - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:自定义参数 - 参数.三:lAParam - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:自定义参数 + 参数.二: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, LPVOID lAParam, LPVOID lBParam); +extern "C" BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR * ptszMsgBuffer, int* pInt_MsgLen); /******************************************************************** 函数名称:ModulePlugin_Loader_Destory 函数功能:销毁加载器 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp index 0a06d71..bb32ae2 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -107,22 +107,37 @@ BOOL CModulePlugin_Loader::ModulePlugin_Loader_Find(LPCTSTR lpszMethodName) 类型:常量字符指针 可空:N 意思:输入要执行的方法 - 参数.二:lAParam - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:自定义参数 - 参数.三:lAParam - In/Out:In/Out - 类型:无类型指针 - 可空:Y - 意思:自定义参数 + 参数.二: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, LPVOID lAParam, LPVOID lBParam) +BOOL CModulePlugin_Loader::ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen) { ModulePlugin_IsErrorOccur = FALSE; @@ -141,7 +156,7 @@ BOOL CModulePlugin_Loader::ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVO st_Locker.unlock_shared(); return FALSE; } - if (!ModulePlugin_Core_Exec(stl_MapIterator->second.xhToken, lAParam, lBParam)) + 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; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h index f8b8841..e594161 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -25,7 +25,7 @@ public: public: BOOL ModulePlugin_Loader_Insert(LPCTSTR lpszModuleMethod, LPCTSTR lpszModuleName); BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName); - BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam); + BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, TCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); BOOL ModulePlugin_Loader_Destory(); protected: private: diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def index 46531eb..64749e8 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -1,4 +1,4 @@ -LIBRARY +LIBRARY EXPORTS ModulePlugin_GetLastError diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.cpp b/XEngine_Source/XEngine_ModulePlugin/pch.cpp index 89f635f..461fef1 100644 --- a/XEngine_Source/XEngine_ModulePlugin/pch.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -39,9 +39,9 @@ extern "C" BOOL ModulePlugin_Core_Push(XNETHANDLE * pxhModule, LPCTSTR lpszPlugi { return m_PluginCore.ModulePlugin_Core_Push(pxhModule, lpszPluginFile, lParam); } -extern "C" BOOL ModulePlugin_Core_Exec(XNETHANDLE xhModule, LPVOID lPAaram, LPVOID lPBaram) +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, lPAaram, lPBaram); + return m_PluginCore.ModulePlugin_Core_Exec(xhModule, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); } extern "C" BOOL ModulePlugin_Core_Destroy() { @@ -58,9 +58,9 @@ extern "C" BOOL ModulePlugin_Loader_Find(LPCTSTR lpszMethodName) { return m_PluginLoader.ModulePlugin_Loader_Find(lpszMethodName); } -extern "C" BOOL ModulePlugin_Loader_Exec(LPCTSTR lpszMethodName, LPVOID lAParam, LPVOID lBParam) +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, lAParam, lBParam); + return m_PluginLoader.ModulePlugin_Loader_Exec(lpszMethodName, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); } extern "C" BOOL ModulePlugin_Loader_Destory() { -- Gitee From eedb5fe3e58a19d936c2fae78353af8875532af5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 21 Apr 2022 14:40:16 +0800 Subject: [PATCH 06/16] added:plugin system support --- XEngine_Source/XEngine.sln | 34 +++++++++++++++ .../XEngine_HttpApp/XEngine_HTTPTask.cpp | 6 +++ .../XEngine_HttpApp/XEngine_Hdr.h | 13 +++++- .../XEngine_HttpApp/XEngine_HttpApp.cpp | 43 +++++++++++++++++++ .../XEngine_HttpApp/XEngine_HttpApp.vcxproj | 2 + .../XEngine_HttpApp.vcxproj.filters | 6 +++ .../XEngine_HttpApp/XEngine_PluginTask.cpp | 31 +++++++++++++ .../XEngine_HttpApp/XEngine_PluginTask.h | 14 ++++++ 8 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp create mode 100644 XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.h diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index 25b7e45..ea8017f 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_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index 582bbca..67c5ddb 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp @@ -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 4829ee3..78f771d 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 a9d1d2f..f8f2d22 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,37 @@ 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) + { + ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,加载插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,加载插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); + } + } + } 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 +274,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 a6b400e..1af4aec 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 e9c52ac..9118afe 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 0000000..ea8c12b --- /dev/null +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp @@ -0,0 +1,31 @@ +#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 nHTTPCode = 0; + 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)); + + ModulePlugin_Loader_Exec(lpszMethodName, ppptszList, nListCount, &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 0000000..9920703 --- /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 -- Gitee From ff0c34cd6789639a87df29ef3a3c42a6c12ff988 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 22 Apr 2022 09:55:13 +0800 Subject: [PATCH 07/16] added:password plugin module --- .../ModulePlugin_Password/Makefile | 44 ++++ .../ModulePlugin_Password.def | 8 + .../ModulePlugin_Password.vcxproj | 192 ++++++++++++++++++ .../ModulePlugin_Password.vcxproj.filters | 56 +++++ .../ModulePlugin_Password.vcxproj.user | 4 + .../ModulePlugin_Password/PluginPass_Define.h | 51 +++++ .../ModulePlugin_Password/PluginPass_Error.h | 16 ++ .../Plugin_Password/Plugin_Password.cpp | 120 +++++++++++ .../Plugin_Password/Plugin_Password.h | 26 +++ .../ModulePlugin_Password/dllmain.cpp | 19 ++ .../ModulePlugin_Password/framework.h | 5 + .../ModulePlugin_Password/pch.cpp | 39 ++++ .../ModulePlugin_Password/pch.h | 55 +++++ 13 files changed, 635 insertions(+) create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.filters create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.vcxproj.user create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Error.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/dllmain.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/framework.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.h diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile new file mode 100644 index 0000000..f6fcfc9 --- /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 0000000..78dedee --- /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 0000000..ecf39ac --- /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 0000000..f24d27d --- /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 0000000..88a5509 --- /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 0000000..1b6b200 --- /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 0000000..28cc1fd --- /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 0000000..6832685 --- /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 0000000..ad98ad1 --- /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 0000000..daed8c8 --- /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 0000000..80cbbc9 --- /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 0000000..abc5701 --- /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 0000000..e1d7253 --- /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 -- Gitee From 7e13133c506c14d59afa77ea3ee6d036bc3d3763 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 22 Apr 2022 10:07:26 +0800 Subject: [PATCH 08/16] added:zodiac of the plugin module --- .../ModulePlugin_Zodiac/Makefile | 44 ++++ .../ModulePlugin_Zodiac.def | 8 + .../ModulePlugin_Zodiac.vcxproj | 193 ++++++++++++++++++ .../ModulePlugin_Zodiac.vcxproj.filters | 56 +++++ .../ModulePlugin_Zodiac.vcxproj.user | 4 + .../ModulePlugin_Zodiac/PluginZodiac_Define.h | 51 +++++ .../ModulePlugin_Zodiac/PluginZodiac_Error.h | 16 ++ .../Plugin_Zodiac/Plugin_Zodiac.cpp | 161 +++++++++++++++ .../Plugin_Zodiac/Plugin_Zodiac.h | 28 +++ .../ModulePlugin_Zodiac/dllmain.cpp | 19 ++ .../ModulePlugin_Zodiac/framework.h | 5 + .../ModulePlugin_Zodiac/pch.cpp | 39 ++++ .../ModulePlugin_Zodiac/pch.h | 58 ++++++ 13 files changed, 682 insertions(+) create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.filters create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.vcxproj.user create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Error.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/dllmain.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/framework.h create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp create mode 100644 XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.h diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile new file mode 100644 index 0000000..5c14e50 --- /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 0000000..78dedee --- /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 0000000..9376dc0 --- /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 0000000..9bb143a --- /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 0000000..88a5509 --- /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 0000000..07d4673 --- /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 0000000..4226377 --- /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 0000000..60325d0 --- /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 0000000..7f4fefe --- /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 0000000..daed8c8 --- /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 0000000..80cbbc9 --- /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 0000000..e4812df --- /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 0000000..9cec5fa --- /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 -- Gitee From 7b15de7ab87c803ffab27046cf026b125a24912f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 22 Apr 2022 11:23:44 +0800 Subject: [PATCH 09/16] modify:plugin file name field --- XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h | 2 +- .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 5df90b8..cf64d39 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -81,7 +81,7 @@ typedef struct { BOOL bEnable; TCHAR tszPluginMethod[MAX_PATH]; - TCHAR tszPluginName[MAX_PATH]; + TCHAR tszPluginFile[MAX_PATH]; }XENGINE_PLUGININFO; typedef struct { diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 731bcc4..7faf991 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -306,13 +306,13 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_PluginFile(LPCTSTR lpszConfigFi } //解析列表 Json::Value st_JsonArray = st_JsonRoot["PluginArray"]; - for (int i = 0; i < st_JsonRoot["PluginCount"].asInt(); i++) + 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.tszPluginName, st_JsonArray[i]["PluginName"].asCString()); + _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); } -- Gitee From 01d31ca73f272c3d84f3c7f4caccba42053e9887 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 23 Apr 2022 11:13:27 +0800 Subject: [PATCH 10/16] added:plugin configure --- .../XEngine_Config/XEngine_PluginConfig.json | 14 ++++++ XEngine_Release/XEngine_Plugin/.gitignore | 0 XEngine_Source/XEngine_ModulePlugin/Makefile | 47 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 XEngine_Release/XEngine_Config/XEngine_PluginConfig.json create mode 100644 XEngine_Release/XEngine_Plugin/.gitignore create mode 100644 XEngine_Source/XEngine_ModulePlugin/Makefile diff --git a/XEngine_Release/XEngine_Config/XEngine_PluginConfig.json b/XEngine_Release/XEngine_Config/XEngine_PluginConfig.json new file mode 100644 index 0000000..76b0d9e --- /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 0000000..e69de29 diff --git a/XEngine_Source/XEngine_ModulePlugin/Makefile b/XEngine_Source/XEngine_ModulePlugin/Makefile new file mode 100644 index 0000000..2175c67 --- /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 -- Gitee From 00f651973eaf58e726561f1c9ed9647f59c456e7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 23 Apr 2022 11:14:55 +0800 Subject: [PATCH 11/16] modify:will be print error when load pluing module is failed --- .../XEngine_HttpApp/XEngine_HttpApp.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index f8f2d22..9b72db2 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -241,12 +241,18 @@ int main(int argc, char** argv) { if (stl_ListIterator->bEnable) { - ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,加载插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); + 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_ERROR, _T("启动服务中,加载插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,加载插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); } } } -- Gitee From 32e94f447d3a286eeb32850151da320de5dfdbe5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 23 Apr 2022 11:15:24 +0800 Subject: [PATCH 12/16] fixed:exection plugin failed --- .../XEngine_HttpApp/XEngine_PluginTask.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp index ea8c12b..ff318f9 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_PluginTask.cpp @@ -12,7 +12,6 @@ *********************************************************************/ BOOL XEngine_PluginTask_Handle(LPCTSTR lpszMethodName, LPCTSTR lpszClientAddr, LPCTSTR lpszRVBuffer, int nRVLen, TCHAR*** ppptszList, int nListCount) { - int nHTTPCode = 0; int nMsgLen = 0; int nPktLen = 0; TCHAR tszMsgBuffer[2048]; @@ -23,7 +22,10 @@ BOOL XEngine_PluginTask_Handle(LPCTSTR lpszMethodName, LPCTSTR lpszClientAddr, L memset(tszPktBuffer, '\0', sizeof(tszPktBuffer)); memset(&st_HDRParament, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); - ModulePlugin_Loader_Exec(lpszMethodName, ppptszList, nListCount, &nHTTPCode, tszPktBuffer, &nPktLen); + 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); -- Gitee From 42963be4e9a4bcb9782b1a1ad555b507ba51c1f1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 23 Apr 2022 12:02:08 +0800 Subject: [PATCH 13/16] modify:vscopy file and make file --- XEngine_Source/Makefile | 15 ++++++++++++++- XEngine_Source/VSCopy-x64.bat | 7 ++++--- XEngine_Source/VSCopy-x86.bat | 7 ++++--- .../XEngine_ModulePlugin.vcxproj | 18 ++++++++++++------ .../XEngine_HttpApp/Makefile | 8 +++++--- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 5e18581..31dd964 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 0b2ef91..730237a 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 2ad3d2a..f517f79 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_ModulePlugin/XEngine_ModulePlugin.vcxproj b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj index b0f0927..b154577 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj @@ -37,20 +37,20 @@ false v143 true - Unicode + MultiByte DynamicLibrary true v143 - Unicode + MultiByte DynamicLibrary false v143 true - Unicode + MultiByte @@ -77,12 +77,18 @@ 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) @@ -106,7 +112,7 @@ true true true - WIN32;NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + WIN32;NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -124,7 +130,7 @@ Level3 true - _DEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + _DEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -142,7 +148,7 @@ true true true - NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + NDEBUG;XENGINEMODULEPLUGIN_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile index c1cdb9d..2c7d9f7 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 -- Gitee From 4c698cc749e4b5ae8a157b17ee2e33d895e6051a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sun, 24 Apr 2022 09:22:45 +0800 Subject: [PATCH 14/16] update:configure file --- XEngine_Release/XEngine_Config/XEngine_Config.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 452f018..e4d2d08 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" ] -- Gitee From 2d7d8a8c265e8aa803f5536adc6ff691b3c16a3c Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 28 Apr 2022 09:39:41 +0800 Subject: [PATCH 15/16] modify:parament can be set just one --- .../XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index 67c5ddb..91fbae8 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); -- Gitee From 5c380910bfe7c14a8d06abe15efc65b8eb7a41a7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 28 Apr 2022 09:43:38 +0800 Subject: [PATCH 16/16] update:readme and docment --- CHANGELOG | 10 ++++++++++ README.en.md | 19 +++++++++++++------ README.md | 20 +++++++++++++------- XEngine_Docment/Docment_en.docx | Bin 120344 -> 122465 bytes XEngine_Docment/Docment_zh.docx | Bin 121034 -> 123555 bytes 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 71e2e17..b07e438 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 259aafb..26315a4 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 3fa77c2..32d087f 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 GIT binary patch delta 106279 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 bEW*Ct9ab}on0d_|_Ino0ga)5SxDNV1JI?9H delta 104178 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

Bzqxy0VTD0Blfy-`ld7u+r3TkCd z()j2v^?T&rft=H_V;k4(l|ZIcyjB~)`6baA(_mI)K5NX~)XjUdJjCYmJzz&yt)FSs z>U@9Zd=t+ENX@4~9VN#`F}tVxVYP7qBSf1PX|wdaRoi{c8ChVV091P~uJIjACf{>N z71W(}QrXe1soD%V)r>ufdAwW@v&~DaFZ(70xFqIulKHTg=F|2k=z3d#8uOP@9X|86 z%eBO>f7R2t(Tz|6a`+I9pk)V!nDdPoJu!cfe2=?f>FR>hujumS$4?GnwNdkFI7_Ku z!mBc?`j2uHn#=0{e3#z7{DoN)@_bBfW~w>R!fDUShd+=oP9^#F1Cojg}R^mTtv z1Q7)n;Q1UkY8OYMXC~Ark{j8Bk%h}|3SHX>W2e&V%-AhptFlG8yDaMP_K5*^3k*|z zTMm^k>lUga+kHvwikLETUCuX_J#RVM$aUq8q!MD^KBo0j$sl{Z-QKNR1kd;Z*U5Dv zZ=CzvCVG&(4?G^|&D?tx+|{f`lcRA$rZbyLl zR&_i_yy13c43dQecaHTwCS0!Voo|`}s6LhikM|E&IIXECIi4bk8PgD!i zg}&ujOV^YBuW=La_36?ggPV9U`F$awJb#2;8u_b~-8+?vM{E>IGxvC+i?2R|m42K1 z#=^3+$93sK#&>uW2%9wq!ynxGY@_A|uC>*%UWE&I( zS;FcY!#l@KkWY@i=7G32H@<)01MQeNNThGjjhelv&=P00PF)th_Pm!27^Lfa{T|5Q zEq!HYGiRgxH?$aG?>fzp9z^Q%%Yoz)ysaLH;h@o{MH#cix&zIrY*MGQARob+XFlx| z{K{|okkQL{6<`goruOSMe)5_MTEo&YI{*=al=u_S+2P^RCJ;)YDesyv&x5g^kjbZQuic^A1R$5U(v) ziCa!HZPmCN+>?BdXnf|71)jdP^rBgASzBcUtB_gqJzk^EPxS!1Q2H`0erm=BiFwm* z%JoCmYRL!&Si+FBtM^c>Zk~~Q8S$C?+AJy!<oO zw3>&mZMLC;lsUcG4v!6xZRpix1Rei~ly!O0YC9{R)lcJb<=IHOR>k>zn!GB+a`g?~ zg`Rd=hKg8@8@0|xCA)#%RgTT4VF+ZDZ3fP0?}@~~*Pam>?!n{8Y%Ja*aj&C#K)z(j zIE8$XjXCGrV=w`Ka{bVyrYu)JyPs_{YEXNwV#0ttbVjCI3aGM*{scQ3riuy;7)<#v)Nt@h5UPD7AM^rU&bp850Lj*R}RcPK%ODgls z;5&*L|`K)rf^-SJWv(>;eUUscwg}!%VyC0TxH=TT&4q zxtPDyb;>4NPxDEy^bcm`s*m1XY%d)P5cY>K&T;cot>NqeplD|DXJE%8&w3V(a?LHk z>FKRYJn(ySzJV93MOA&{#&4N3QX@sly4*)q8gK2hdD(`rZM{d(y_IlhdK+|%vkm2n zWHnR09HOOv)kc7;@&2>Y?Y4?+gDsK>6%62;0(99%IxCgbuz%soU&k2xbuE|jlk(y*vpn>#G#qqJ4^8k}&?tm3?*ruOc#yXW=(=26Xn zoiQJ;L{ZHy!KOm>?U18P6#T3f28G`7UT6-*i^60th`SFe2p8=wlCHI5j9`xEi z>6D~ygi3=i1+40qo>pV;Ar8joA7NM*$D zp;vl;?~DM8phumW3waDWNcl8Ku0%*;O>vfMw_I)qpia#y`9b)mn(+cmAF4(S%aP~L zA}N1m=0Q*j$+C8rq1m04MBP^0auVyln1@rw#oTacvDZ!^!G2$_98rR$@67&VArthe zlXig&3n(N`@&N_ zl8eCEpf8qBgRLdUTYVGRKGIiShN?y?7N{6RWhZAZHSH~#f-)7rbak33Oh+ZYpC%rj zr}F|f0(M%zM_F#tNoiS$z_!Ivo41ce_=`SWK5d6bsmyHfOO>dac#{i!Ebjt8ONNXI%Ro48q3>Q zR5V{x$z~B|v@z#Ugc@1COOPL;li% z_fL;_*(tx|ZFd3bmo2CsfVTEc4_u7*)NNd=6Un?B^9ZWudt{I^qqgwl3Akr}oBhQf zEDH($=KkY}K%?e5Jy-rl?qY*s+2=NfWmg!G5y4W+Uy4lBcnXOwBEq?{l(KGZIvWLC zbnYQ^w&&#jFV{Lm4{O{6{l79Ezp#*s&o=IwnKP1}Lw%_>s)efYR=b#@t#GQfN_gZV zOf{k_#1Gb6^bJZ@(eV1Fqm%-FS-)y?bKg$CccnSfDv9*SsDY*KT+$iZN(N|BSet=<^7A|qmM5unzjchYZ@plha;%nUl=RzWGoTk=)X?{7B%r$+N z^$E3?xX$%S86j^|Fd*O=`Q_AM2Slu23P<)z48|&VDOi(j)W1&uZ5;sp#Covs#d4hr zn>rlpJ+A{AHCHgP^^OEPFE|MO9vPd=KuOoXugnJnCBK@#y{Z+^3P8g`#khVC)~p+1 zS`Zx5S+fSLGgFQ~$J!mEnOl5YJd&IT((73h`n{^PL6^Du zHf|D$8eie?ugu)7C>*U!y3SZrd0$|GNXlP2t2~q5#yaofE;-gSPGpZLwHSPr{H0=P zd81UT?cLQAeKlC!oI9N5&Ty;?2JUvR9*{p(;HtVi`sjTewWN;?oFs(ugE6Y+?$z?8Ixq=J|ar6#fsEuTJ_px|$L6JK|y zR&vKy0{TZkO_bWvP(3&X5;JG-aR*lFHd6e_MOY7!%e;N8hwDds0b8_B6NcQGhc(xf><5Re`{ zdufgU1=r}nQggZ5GWEWr#*n;xj4o^L8C>QmJYO!aeM3C*-QJjsZcw`J^Bg88SRXyM~G|pigi0PhHf_d+} zNo@0{JktgS(i{#JaqXZ}a*=3uGf_)XIH-8_$kNdX0flNmr`eTpV8+a~QAy zhf_U`>In_|w2bgUt~o)mM@CAxV&s7HJY^D)$oD88l6SLhqYBV7asQ(IoTD@JP?8C~ zK_)C2-5-`M^&IdAhjd@{8upkMn-&!p^MQB+dv=Hz}ys~_&q8{0UgHmMPw>Od+_N00bwxp6qZE*_c${Ntto(C!+Hdc2d zO3=Iylj?!wSv|OLFEc~PABPRkRf4OyuCIKWGd*Lf+l6tRJpS!cl_2M+HA2y~{2fc- z36T^%V0pDRDm`%_$Qo;0%}MwvpC(3}h+J`htVgT2tN(y1QDZH^Ay!kf3LI(3)>RJx zO9{YzuqegU7R0~q0VG@QmOIVIIdx=I1T{x%9$*a%BxT(nQI zOLAYJ#Z+X;u?7Z_@{RXwol;JCC!RJV42N6AZ`C)=o?lH4TmlMfME z73&m0t=q>gJ}Mer@0q^UEKLjKNaoE(uA;qL_vV{YtNAn<`ib)vD-tcrZ;D2LB_el6 z2ZxTR_Xzq!C!}SdsM21(6gwC2-Hkwo_F zu9Iu3jIuy*=F>=sof%~V0RNylLXh&yJ+%6UEqSJfv3h6%2>G?)L$2N}&w1JtwWliG z2bGQ1_D!DYL$CP_c}L$}kmtkzQUtK~=6)~$;Oz|(DC~-4J4pb4XtwJ0#Sh7N z?|vNuGWit<*KQeE*f07&ukyvlwCgCivI%?{w@EpHX7X6Fx zWLeZz^jX{TSaYYagWMpXv&{<>wAR9bc27Mp+fXV_1VhL!rbWgiV<>oI zfg*d#37A>+z&%SSsV#T+wzN<*N}RWd6y8+7 zM?x!6N5`!0a`Ll(4pc!~T=rmt{O!J>dnFQ+Yy_3Jy`F~1GG*=01Eg{7xibn;Wo-RW zoV*!3@~x1}*=v_=Menn3PTIt19;3Qt-WQas2K3HdS=gl+mIs7NSBz8Q`ilTh^$k8m zF`cxKWlQ!Ai4J+i{H35$U6J{aoLUmubBr`X#`)CSQu!-?SG`J=x6Dl)gsiVV(N*7R zoCEFAuV-Q-SU#xm9s4{A7uC4!>Ww6-UrmHb<<@Ki9G)Dg1Cz5+@W;Uq$+-U^Ob+c) z?>R8+(0jjHp)QdH+9G83M$8?yi4~Q2t``FdObRww-2J6FVyaC zgUXX*Ad$ahUh}wcITN?R0)w7k!8OnKjvk1y31O7S#WM8DvJEg$-trGI38Q(#I_|RN$zk`1gDom8#4kpW`-_9zMq1gY%G2bFI$(O`Or> zsd+sjkb5F~1U-bm@;#UU*yYs&iT7vTY2BMg_4aIoW0|N|F)?@X>;WD?SDjQ6&0Rcy zDZU$j!J6uUKF=BJ#I!y^LM%yHq(_gs$p+(#)C-V$MaQo$e# zQ&00dDS)PBLZ#{VP-sexj#C^MtUsUT9^B*Ro~7nuwUI8N)SDL6pwxsBM^o!HM-)Q8 zk=c9@tiOKG&V@a*2gieFRTh#k@YHRgZJ+Z1y`SKEwi#5#evf@8<2&RwCLbc7HhuMf z4eXRr6PU_2-1R;&RT!Lq)Z;pV7PidKvE19gW|0xdudSMYD)40WZQs9I4fvGIxo1_~bEk2W3eP72uPI}Y zCjj`Iyfzd8#cQ+IiuNgNRlPoT@zxws%KyqwXB$_r_R=Wxa22!7MSME<(czRQ-sR-P zA_vveTo+&l+9IWv^BQ6eZZF%MPYNDoA;Z4(tw8wTo*A`sWK#0>;alT<)O(bF1b94h z=ey`lEs2PNwX~7e*9NmAbXvcZS^z3%x3L-%|3-yF;h9>E*G;-S=gxJr?)27>zYJZnn zSXXj5Sd_M^y_Y%#F{~}$uL<%$GnRG%#=)9bujiZab&fU9d&yfH=`#?OoCh={NonSL zcxidgxv`0Y<~IetZf)U&D!_-<~)Fj|3%B#8d`E4BPm*NO) zeL4ewJu)Kzg7L)FtEWkVo#}DmyrUv?8#v0L@L79f3Pwr`Y(-`YPo z5xX<0OVST6I=|eI-^u7cu|MJv*=xzHzSCZuSle>_QYwiQ_RHdbprc-!mJ!Cud2qc! za`P)(iVi1F;<{8g=yhsHx5N@$$n}biXW!^b-M)E)|LM=a`thgV{r0E-@}K|kt3Q1A z^FRNOAAk9`>yJPD{8xYY)&KnN_ka7>`*(l%^^d>%?yvsd|1qBThhP2r$A8&=_rovt zUw{9PfBfUyOhAH~(h%=?~xi{`c39-~Hwn!?(ft!>@k(yPy7aeE*N% z9{c;h|L(_s`pa|w{r~te|N7hS|MCC%-_QEZ_dopn{g40GkAM8vKmFU={`}*2fBL&0 ze(TS_yiU=he}CTZe)##n{_YRI{QakY{q;Zm(&~rre*9m5|A*;cfB5Zx|DQjO2mYtO z49}l`_47Y}|A+6#`25%Je)y-q`t!ey(f2?6&Hwukf9=1%|L&)s*Pnj(-QWK8|M$;- zv;Viz`p>`m&F_Ewhu@55fB)T|{`9+Vt$zJax4-@C-~aBP{`u$IX!f)J`t5f={>!)j z`1L>C|J`{*QnD{9+&4w000T+mur3j8Gq|@6W5mS_gi)U2VH+Sb?*!qJ#AST`IIq+ zc!q!vHYYiA&n>Dgwe61OZk<*e15;CF2oMMu$O!=g=HUbqCJ&oTNCI{oSIwVtOWl$` z-GAY(y?1X(-ELXxR_kGTITdWRTCMK2*IK{z-v9K+b90%%Sy9bNik$2T^#*$aqJNxH z(vm!#>^VJg^kBRvkkbS?Eo2l~O!k}?b3K0?{O|wmpB55nB{e@M%31&}A?Fec*;KM; zM$@v1Lx*yy8F5a?_0CBtRmmw+T5n33JETlaNh$Hrf}*Amg@d6W{VS^~DKVFW?;956 zvqG-NyxiQ*t0`GghVPnE)Hy-R^?xer^r1OHot@7fgsW!-O`4Q4l6D@h9qi+mQIb9L zs+=%y=wRuF$VU?FhRk356Y7qqaQI&K$s;BO=rwkPSt5d|&C2>sf;%s;~e{QNG}g%Q+Au%|0}jVRRttTV7TB6@Tlwp!Ev; zx^sdgmu}44gI16#6x@xdCTEZvDSu^b$Gz`L+c4$tim%LqNHroL$5drLTe_XB)Y#QV z<=N7;h-ACCvtZwjN6Wdozz*3TpAoWR>2|WY;rX1V%pDOlp>*Aag@xXQY_2yYn~J1D z`a+RI@K*UlJ%PDYVsu(oRDWSI1JAY)iUt-!u>cW}oC7vh&rWimc_}y%|Z?l0Bl3(}r@Az|Ki28AUC9F4!L& zHb0!Zz>h|w?9|+aVR9Avt?byLg#`T$_?>0nHK{1GMAwaLf~vvEQhz$x1FCu;q|AU}^Q_9Xby!G=kcD3LU^o;Uhy_Fa1Lh~eEEoeOJvsRy zA&&X#n2^bc>UsX52_lvOWhyWXA_OKxj@^iP@@ZN6+q}rgU4MBsShW(Z;SX4w_S1cm za>C?rj{deteY01Ak)uQfpomFLLib9=mdgq$0Cgb#qzJ|na3fV6?8R}AMo`}Lh%lvz zVE&Z68t$lBdGlHsx&>r-=lw5zBwhS zIgNau`Qg&*(tk;m!XKtM52b)_M3pcO5W-ZGj@pBYVX{YGy^-JitR#Jv2e{Ccj?u3w zYw9o+luD&hc(kf-er{13^a#-Z4W$^NfRQ$>E>S(=d(b@Nf9)y`8h@y@_(h0oYT|^@fgSIUM+_68OX4<`wOo(7_1%BkbAZk(`(nR6!GW z+)I`7z1{e`e;FG&b$s;1zXbl832;F4^>*ul)SY17W}Mu4LzR5&2!51VfYTVum08Ev z!sPYV=oUWHUEvL3m=uKwi$WsHat30-|q`A9v zNf{8w-9e%3kjqdc939wot=-)~m1nD}b!v-orG)6$mx?bJomi=r62fTayNE=co~sHy zEqre^)Ei?$%Z2L@DAUelQ0O0u`oeT=5vXXiKYzAo$Os(DAiD+ zNT>rP%4RyogTam#DDdP=kJH5cvIpbftZReD*O!W0ui7nfgsLcTC~$*;9X4SkG|(UK zaFMGtvFi zP;aQEDqv!Gtlg4NR~IE8CEr2v2ST0a#WqXuneoyp?04dPgQ#d|a6@P*4D@%pV)xxbc{mYM>?xvMdYqqo~_Xzk7 zavzTN#rpP!+|$~zdZTDzuOJU4OyL5Ot1WKVTcN+=~#Jdy(d&7akZ}*C8pBA_76jvNA<9}A# zqKwigg=mX9*`l$5fo{y`hCv9S%J}pLPFT@O=>rS|0;BYyCAzbmA{-y+@9cE0S4)(* zf-Dll?9sMMA*D1*Axhy+DGc?;gPmQN>s<;v%o3%PMkz!~)WH&s^vAkW3L}BS^=roR z_rO>*lro5ghm-e8Qdv@p}u&i z^XdS3`rlF$;4(KDfrw0Tb1lE|%l7hO2LK_XwC_^b=cHUZJUM}N_V%F!{r#*&wbV6j z8=>G!2SEd^&)z)3{G00meD01n%)_;w~F+><461x6feq*z^cCnMBF-%GByEw+3v! zB2*O`wPku;xWB(!&C*`T(BJ*Jxc0cCWRcR_cUcStQ5Zq+Dko6eX0*|?R)-5?e>@)T zQad#o*#7Jn=$g=%R*YvW+uydmeS*^3e>rS)?6EHyD3>!`(OV`}y0M?0$X|azU%Og(cCp>^M@j6z_(hzat4h?tVk`RTL0K+bdt(6< zKb!c4p>d*H@h=XMnSZCnOZSWiPxbY0oVc}>D99-7zZmYx{XK9tvrP^o!DzS}t48%l zkIbnu#kJSQgIn#ELPlqlLc0Aa?g?U(LQ>Y>jc6E!3_jb6RsZ5;XEfC_QllWEQ|M5} z7K%i=GByfw2$HBjU5Ad|4iQ62Y5&C#$E=a5_j^237>-1{6@Lz)ipE%8)SrLT8DhvN zjbeys=!Ay-;Yc_3GZ8e51dRK?Y~O#~8DbcsltwW`F?0~afk>t=`)MnMW+=v((Y zLkcOOQ3z289fU9(4Tih1YKBN*EMR>8%2--uUG|+Ji;UhVj3|sw!q^uKc4NyE5yrlN zar^IN-VEIsrhnaOi!i0M|6;f&2hL#H!j`s(g`(Y=wSZP9T1VO$LP*JsGDx5>gfeK8 z!EmU*zdNxILNuL(gp|%Gg;WZ$jK(H~(RjEU+kW%wcLUqsJt(YyW4v6^f4kjobCi-9 zWe}0D$H^;<#rwK(bEX(6qM=9#8#L)xzi77*hAEv<3V#s^oux23(2Y{K{l#T{^Yix0 z9-%JE9wMNV>~&|NkVzhlLHuz;e{w@#eVBiHz1?z1D2-BxQs^Xwp>V7#w`O8;7!I&8 z+?^qZjMgZLD2a}e7>`A|F)YI*F#B8imN{!8Ls98ro{3j5X+k^ZinQOX1n zs@NXAHh=ED(r;bWZ~tf8O;bYZ{VIp%fGPE;B5S$8LSjaewPa7_a3Sc`rzeq~{V~=j zK|3bc-;Iq`a~KK$Uz1B~!*DyItkL~g;3fIOEd9s41M^q?ckMKB!2Pr1RV0Dz4h3|u z@C4EY>5_1vLy%vPUyxrA)euSQwYoY zVzTGVG3Bt3nq?bF@{>p8boo?fL{OVfo6HbNfM3k2gFnW#^BECNrc-)Dee61L{CzmK zknD*^qW$E{wDVc`vh+D>lh7*+i6?-Ti4u6p^ zu_^Ym?}_Sk2@g~;M_|YN>eN1FZbHz?=g-X$gr#Vc%7}vMptPr?3{-_v*a8TKlZP_W zv|RcW#9Ty`P?lbrtxjd&C2K+E$bfljWnf4fH12&2{WyhBelZp={=eTITHtrgy6FG5T*f-FqYlp#C>1z2mw!o^Sd|4P64kRJBthteeHLjdN4K=W{}U)KT`#=c zvV3hD?|$(AUb9ltBmvy1x!j2|a zB_A{0=*eo@lNJ}HS%n^}TaJf=b)Yk!DZY!nN| zsl9DO3Su<@43!ib?|wnpH_H+{bLJpnhW#J#LzbARoq+W1t0N1k|3_BiZKrVVZ{UMk#uX@Rej8&J4@4Te>s zHC0bsmWT5^xEOXG^TC=b87DSBHZ4vG^BEd$F7t)HdLzI28B^LBfrh#1Q;71x)8hnL z%BSvNA);BBPtQDE^Y7YK6rhC$|LnweE?B$nyCh!*I~n%|dqcsXb$!S3M>r?*jT=t`0sY!95CwD2>o*H${&rrgspFZr(z*xwkAE3`sXGWmaD$voe&bcJ zba*e84kPbk;|Df=p!P=XjoO_ocm{J;j`I3GohqHkuY@B&>CG2 z$vXY|Qt{=Y#Uw3%Yq=4Jx`s}eY`uHa{im+yFV$dBQHN`G}<5Y{Gi(pt`yfc zii=ljK5JVMO|4$0Sv8Id$M%}KJNjzIDIP>zAQ`}kOyKJM4n+4FI(Vy<$oSKo*) zFUipAzb!(9JHNiJfBN8njreswREci8q^!wT89(1Bu6@qFs=;q^6~R34ryT>Bre^k4uAKzL)Yc&OT{gFRWHB0vXY_N z!-;ma^+}0C>Rz`pncOmA-CqHZURACF0po|~P^Jn+ruxk*`kn9c>sR$39_W`|vI^G1 z!^?$7Z}cla8J{c~%WG__b^Y%**-k=iFwy_;#&nZXTH?VRzWOy|3ylz%uXH6J(uiT1 z4S_mhaG=-7dkMCQk=LC9Dazjr1DAAtKDM`&~$0ZpweH2<1*v&VU zkj>;&XxDhoSTDc11+`fq=4!qi1{Q4q0rTmGFuL{pD>RVT~S2ozj z9{TF_;#XJn7n|la*ryA(*7Pqw>a`HwiN01{X@8dHH&+Qb@hI&GF7s$C290fQSQH-3 zyy+@>Apd635ssVjs8kPAT~gTi%y@FyvItJxPfabS)p5)H+(4qFb1Ssu227bEh}tyD zEHCMwtmt37gq^(e>$ipv4gcdm>Z?x*w_Y7EhceRR6T@SmgWsK)7-Mf*i0DKsD<_-g zv41>2#~w+_oF!ep6j03M3%oa4>doU;cj*Hip}J{1O<64BQOL}=5exTFLU#a_;lj#^V=^UyWa`85h^K7a!)gR(eYp z*j{|9uYV1b*7U9K4(OjeEq=5~UOa#3R)15sj=z1NR7y?u zrefyA-X;A|sZh+@wkQ;O46acA0JUUDFXZrypytde7dFcVR8;ARd0M#SH#izRJ}pmk z?Hw))#jTHziJEck9s~!*l$>VVdu#k;ok#CPbgODNErX6w(6n!;%)yaxD9QsfE`ND= z7dMmWSNSiO_N+5v6_|Bav`=Xgv%)kD>459d2_Y~r zEG@CvaBQH@T_VSuCq-JOLIGE>$!uUJzARgk6~3&0rstjys@=R^xblq|1b+*h5{2}f zXimL(c$o!tt1g5SxjUGf?PexMDX+cN&2q9#`3sr0GU2 zJE$+e)K_mB*X}SI*$mL$xz(HBe5T)C%Wu3WZavbkykOv6c(e+;alv~e2n^7E{WFN& znhe~V%g6@`mw(ak+}d8eZhzePk8|<9Kw6xfpEei3f2`jNo}~WuCF995qptCvE5`Em z?YmzT*VarsDF55T0!*>L^#YavqAR{beGL+U2!bY|fm5PUS`kd8&k0O&062_U%f^jg zi?1J>Y;@+72t&tmBA7@dRz-(^>DOMt$xMuC?u&3CoY2c;nt$>ihJUizUh$l$FZ~3p z+dOsyVCKF^^<+M6D&q0m{$M0HWCC9c92eido8|?6dTCs~4YklEjldX|(Z2BVhQ1E( z-YopIQP_A2>}=e=Q+U2!T3r3JZ}aPq-~_UQl+&3)F&B+#6ywfv;q{lj`L|D*&fyAX zSjnD0_z%64f>ylz5P#+pFiy$;{+r~liId}? z^tT^>X4t7q3nG_|8z6I@w_Ily45B=Y3HT}pc%aq zbHeQYjE)Vm8X8J~z|rGF$HtSRG7L1%WQH=CeaR8Vn=6GoS1SoJ41R>%2sz4@Ml*TY zInc@6MvKE(vcJJ+=Pr-wEHT|cT&Cq4;4GCqC4L(5jDM`fM72S!qfBL6wN<1))*4KU z1eiqtIUVE2OBTU$G?=T_MRl;jU@O__kHlKzg+z$KOua@%A}9%x~VR?FEkElf?Hz|eQLF@K1CT6;-aQIt_nc{^(|^1~|R+)xpQ zub$>=bvEnh(IEVIGgwJBtGM>7K@(buQUN?<6c4QAL4kMJ9kt=Ms`Nk+M~JOc@%2-vs5I_B zE3U2^4@j2+R3MmdZ9RY^wC{$h(E~vF{Kog}6R^1Y)hiI_-~MQmg<9G1e;z-1qF2B2 zD@?)GZ(k}deq>&2?X~gXR_)YrV@4yFFn?MA<6VLr6{xM!Ce|0@fgFe3HpBK5WM3%U z0t>UMzO6^&!rpGpFB~En?B8$H)c!y}COA8ag{%x>Vpz*73+vV}Zkdp%Qou)AEJ#$U zEjCs+41qGTcaNCL-8rOFidb|CIC&vl33+NqbZS#U$fYDH*<;*$WzO`kpp5Ns3V&L7 z%I8rbvLMS4AS^yDrK=j_L3V3;#(23X!Uc3}qUnmN9Z z0wcm4yA&Gv_&~%|h?{rc#0Mh6u<$OFZ;Gl-V>rrRXFVW6eYP6aFgR(qf*qe~Mv}E; zPo;c1J?G32Yzkb-g;lt9cjny5iGQXT@~?L&8zGDI!N`eYqa!EI44-`Oz0)T~hleIc zPo6ka&ziOK=_*!eaBOJ!Uq&X*jGa0;adP_IcWqAT8-HU4EGg50+W{RY6nKiSt=&ISGp14%@Q52tIP+^m}J0jGq|U z%P`LId*Ux+BWFH%?@y>7Y(`-RVRBhN3@hon^h15tVmm>sx|ik&;Hp5rg{$|PE*(s^ z`1XCkY1n6>ruz+!Py@?VAAf7N7bKkVq2x2wv#jlWOm1uukM-o($f==;lcxadj*Ogn z?@t}?ta?%(gQrHU2v|i|bjqrXogAOAa8W%LJ-c}x`Ukhu$;9_AIK)ZiiLt8jk-Dc- zcB!F1CZuLXZCtv5Fur43*T!(ciJ9AH;8d#6x?sFM&C`9+i70$M1 z*oZaDjXcb-S*v}BZN6ao-J&W9*6!pge7X0)!9D-gXA60ky~=7XyXV2-j_C2O%jYgk z2vT=)nSUz1eU_G=YTrM4G)K%z&srw8Q`oHw>(VBMMvq%o$A8IUbZiX-8_8Y~Tw|U* zCvIhhS6dra+&aw!B3Vr^bR#5=3{4CfpT9DeR%;S)-xQgL1FQk3CPnIHDJ(Ll?wg7I zw#vf#EE6tvF2holW{F2zxt=U{cUm@BWR6AV%`sKDM?kO$i_8hm(0Eo?su3(Qud7$Z zBf$9(3@Z5zb${1u5V3V1g77iS;zRLTSIbym+n&SwSY_GEUS3PFCqX`L%%>7DtSH_9# z>8sKjxw4N>jf~Z!E9#4WHHZ1Q2~53k??vXEb*q&#@_+YThVI(p*>t4`J}+Y>x{%X` zauQ;FD}(QCkzi0}4VZ4tR>y=SM~|}Zcz2a`W!JR$7pD zQ=$@mv40AEkS{x~VPhK{+Z)xDT>0~>V((97hmp5*ANfvI&Brd#W(`TTS#ErBkiDTn&Xhv^Vow@g)rUdQq7 zw(X50p=h)fJ5Z1ffyjh?TLOjO;)t9E(n#rKPk(rSZE8$tLN;H#zGU28Gj3ialY#WV z-#j)lQRh^2E30+TM%rQ9KEjb`v;{i@z)*RzkM`)8zWhpmyqMowF)pqdPhS+*zO2o9 zRksti61hu<@dMp}a&@wuW1j@oSI%wR94AU@>B04(hzL?Hw$-FDU)QuV`L~(&>Gt-4asPdQ5*cPXY9Y-cyL@hpAosV zmo_1@=4^c@=_FNnlfyZm6yHEN+#lz~BrQ^WM7sa*w|PZ-Ck5ll*n)F3mSA1Xdi%cbY@w}#>W(83>Dt}*sc;r#fJc^i(n2wmfpDtmohSpg-C~O!v&7i0O#wi0S(c(-G1U(k*T89Tb(v7(7L!3*{Cquf`{0J7POx z`#!>UnAw4@kY`s2L-1roCwIb2pyLA&F{Z>qI?Dvq5`kTH!)Swu>VJspi0bfvBGbTAY;7>xYavtWNB5=q1m-o3Ibx}QF~pZ|{L z5}HeGHGlXp09pt0NYfaxX2M1fSKJ*x{2z~Gx+owK5%zim9S4(?X2e9EBQ+!YcwDvBhhmerla>Ka31V;}TpT9DeR*j!8R=&qRLCAR^|K^5%=VndPIWtx>31sFICj?&PJu@Wd zq-0O|0Doue%47B&PWJ9bg}DDPMOar;sjx`Iry>#T*KEli?L-4(&0;HR76+K^v)8s9 z4#$RuM#AQv549?I_}&neiE@6-l^WFsL&2c69103Gh&tZg3;?5azoRxb8X#(8qk-KD zpQIkt(Cfpke6xV(=e!NtZB3+qvFz&rIe)>FdY-D0zKEHDhi+=kO zqzw{aNeFYfP#_r?9n+Uz>5ms{XMNo=$$y^KI{`+aFi@zJqbktkOOR!*tT7ZPH8U%U z*%RV9joX7}9*-O*slA--cvhGe538audsv)ORMGbCf|OPkh85T=Rms@inw8|7GCNQG zuLVU-zpn~e+bPOfQJu;t3uE(gN~0%g3cU$>z;?1QuPNgYkP?rK&{NB=Ptey6z<({I zKb+5Lr=;l_ZB$OvvvRVKoluUc5_?&lc{Cu=P)3@T=fIlfw?e*?;k`4aHHN@7+TDBt zwLvCW36l3r96A&V_xA?jzfd9;3x*B}S?P~cWH}^7PD<%N2y@wYOsP!9LZM(d78-zG z@L#-tAYAcwI2o*|&ye-@JL}PEgMWlPE}lz-@*7`~WcuA-gX}N;#ZR>p>c~R-n}wXs z2V#=T!!u%PHo@vMjAtugkb?z|IthBNOo(qe9PVjTOCD1)Qc4^>!ddF|@A}8<#`VR~ zBQ=?7-?(yN%RGbH7C;-!rv08D#Ht?54`P0>yYqus)kF6P^E%4j#UwJU>VM&}kW@w# zRFbBck}_ap9;H7dI09h|6Xvx+t3`k%Jw0_%4NH0uvJtYo8?w`aCSW11_d;BBYfwkF zT}NWmLMgbIyTA>@k`?YlRXEd-@?lBUW{wEwQDJ&ln3kZW%@Vh6goZv2XXU!Ab!*Dq zM%kl~8z(7smb~QwaX7Hw!+(f$tWs^ z+jjLH_U~pJA%a(l?IMCBf+K?OCj|csWPA|75x_eRz(WJ^IAS=N#Nu-50%AB~IAZud z!Ejn2jrfiD-EsIGM({@PmZy0f$czm&Bc+J*`h1?(hbi#Zq`-MM3V-4^;&;d4cN`<= z?)^w@5WR2rR6_tq04H1{mA9khsYD@bA6{X}F1B}sAL)5V>_+VFIPAvqHTNKd(9Ndc zxJx%6bR%@{Md*cnWl$YUv^56}!QI{6;Q%27mtYC*?s~8U9SH704*`O^d*I^k?ydoX z2Dbp;$-Q6Id;eZ{)pXTV&vaK!_3Yhiuho0rWXDROXWOlcP8kBvC6mf1DBmgT+aITT zEd-tHzH%_l8@}g4krTIGl0t=e|t2ZHNH67Lb^h8ua#$JX9O<4tHFr-W(6GkS)4gM z&7I>D8IQM8K0m$)*$cJTool4=pVlTD{7WQ@jy|#T9I<8l)%w+?<>mF#34Oi&VP2*t z@VhOmLtkmpaKC*{N_Y2cINqD`zU2c$(6M2`_1x;yrt@Xw&A5}aQ*Dp^M)9zpvUH2! zzT^Np1)uxqO^mrmmCa)&Zb?+Ps+j<0yRjL!R72RUFy~5zqP| z&wAw2yR5pvmsl&@GzCYYL{B%D@=D(qV14wm;RiSQt>-}7nqy2=N@K{4o=o$-hT`bY zNk+-^@B)ox0v^|v?>^C{@jaE*j*CH~RTcVlZKiizW=rm4X}vDX=L^rBdk3aZw{zQj z%Qty!D`Z&-!IPt3GZGWTZhGF}c3e^#&7g4y=n(C^6a5s277yeVpOp8t45=%`-M^`8Mb2AUX)N$KJ8`K4_h zc;Tq5`H%|RW(|8s~T~oa`<&oXTrVzysGQdg^VSarrH@Xi+nPUIV zd^!Do(vp|r-v4b!xKrid@Jgz3bi9=?7RB#C{e`vfw#;JdElZX>b5)+fZo!mfUfOG< zWlf18&z}@u_*3`;=TxLG6GEq0dGOUw?T4Md-snQW5-$uhr2DB&;*KjRyzfhnl%&?f z4!$m?LVV&9i45Tj^{C|rPY54L$g9ufSlK^jPKxF^g&S}YH@I@CcbA5+y2z`jOPaZUx&vdr6hRtlC_NEjt812 zT|o%?qN>V@AXht+sgL173+o$W<9WbEyAV-Y^T6TR}e7U zf@MY6PD=!kNYU3u2JJV#!dZ&y=S>7ZXCQpN~0pwj^KF*JoD#an^`!qh>mrdNdIVdY#t~yp@ZY z%C?Jt!|8nZO3%Dy+*P5C28ULxIr$79|?O#6Dkoq^L|w^e`H79TY2k zj{P`uXm4ryE=bh0q1YWynO3_XJz5mjPleyPnO~YNYx32n?k{4t2c0adsAaV|@I~y} z?$B9!**V>{u7JK#w=^P)EY;c$WHh|U%}_gnn8k(>$%?sfOr-24(G;L3MaF~3>y+!h zth8ATQZs!P`I|QcWaJSXIU*v_?NvyL_C(7?!*%`^|Ev+84db1Wq>)_)RHu#k0{0?; z%!su9+EBFFZC*HoLSVdQLu9-~oKnbn0>WkAVa1!csmNdbw8Yhyoc=H!dG28OxROp- zwFpTP5^B6TVm@Pzy#So%nVpR)CF-)BP-YjZADb@&de@w61545}FJ9;K@vAkPtXo)u-}gO4juLA&2(YVAMA4Hu9v9IxwVVgCqK*B#RHijs7~+dxNUulLS=(n|LCI$j+@`~7&RG_ zrx5ZIxQ5JwUa;ph&Pu1|13Rk>j;Lpn8QUk{3qi#XPVP9Lo%(;0YHY|<=_5Chhc;dI z-m{-JBRzfuE+@m;R;a9(YR%#(VuaozrgpbPv^5wleF66 zWmOoU9oX`b&3!(*(H8j)4*8?~rbWy>%VQL= zW|6aZDw#w28w77xU~<}TwGbJNmIkI~8%9x$OB|$*!)5g096in`J9?8+ginCxZL<5+ z)%d1YGl=Ath^O>WDvvfQMx9I-paHy;6jQNA@(Ph$HN+Ala>j8;P)UZ??k3V2{ZLe2 zqV}#k&r1J6d+VkcY?lCMpz7I)9*_P?S*FIE=t{6I_pBBge>Buu82-lj zW=~$0uMYQP2I}%65WthpXAdc;=mR5+>aW>fo^{vctmJUQ<$n|CjR&F&RXY|gNB&JfU zwmz*HCNTLozyq_HTLFG2v3@7Sd;C4;l~(FzsWbcBO#l4mfNYr#Z#VH)6-pz1au{ta zpyX&Ff+a$VX?u12pTpXPhxkd(MK1M%q|n6%1GAzlMj*uro%T`gb^bgC%h>At>LDqiU+6YUp64V4N zOIgX5Bw4@(fqUoiC8U<6!@KD|g|%bYa8XV`^d7{xR>S-m9e29#Gl%|(_DK%$hZM4M zALdY1j^)HiUQwpvx}CIaJ8H6zr1>75A`pNcKUVHe7E!uDz+4f91sZh~>hlO6QW3Mg zT-5mLO~)9HuwlCb+{v>0$+9V(AJ_pgEJg#JjK$wCK0;+{%kt@v!0-Aba0X9qhfu;5 zmnb4~HYtCvekXyQ(Pw*#I{sxkev3q6OoCoyZ~(LB+uO#_!H;b&OcT*2iB#R(X$3%& z2T^DTe97YPg>1-)5ljQoVDckk_Cmo&e_5*{VyJ&UsMs79cfuaoWfNh91yLVALeA;X z^iTAb4E~9){b{-CQ&6=Y5Kk67VYSG4kYfIaZz%J^bXYs37lQ2{ODSM)r?_$*JQ`~F zUM(P(t-J`;aCvhuV&?4oy~%EG%@lw~XC2xvJ0Pd>=7J8T?R|G=?2t&V;Ysr}2RD%nOb5GWgSSr}j*=h?}Nmlgh z5;D}S_E`uB@dcjRSuGrkn5|_zSo7GU<4c&Xq?L1oB(N4$2=@fYrDlL0k{BMGZ@4`} z8vDd^658fA{F-0gNCKntOH#S;6!-pxJRgs z{;BrM&(??yO)G8YD+#^kd%G~9^L524M~BHb6-PB)VnmrA4w27J-OT#)C=hEsq19-urFWyHKE!yZMK$z^^i=bA*Ess|Xg~$svgUdq1qnl9 zdu|g=FCCdB+PppqZWc)xf(>bq1Npn4m|uMJl*{hv?MYb$rD^0&hAvGaCi<(e7L+0Ug2Cvzdve2MZcTj1p~ry||Yb=tbk zHhFA;$ZVwLgn)m=vBow2wcN~z^$ePIz!b6SxaKKp^Q1LrIh9RyLQ0svI>`q$T{1&t zUQD@PSPJbLDXg^$)3CqQ7s*PCHrdQ(${_r)Y{Oi|gnO^SpB{{?D{3oGOK0&;bLY?KBt#{vZDzdt%C*t^+C9cJLlY{GtQou|_VI#OBOEB`wmq2*ONe8ZKRRiudX?Na{TMEB#}P?ZB;0#5ViT?U zV0(y95AY^cif30Da=dA=K?}ZUVaF;6^0A<4Cxxx|9QP-15@y)6CVBzes-K-fi#lnY zCv_4~*Z%aov8L52o`Feucg8>jc4Dy_oq*;*(!ey2Sl!coO8c{i^6RaG8q}YutOdWO zPfegUiy60hUG9xJ(fk|}5w5mMWF&yByN4}3V37Qa>-(r+rEHvKh(V=Urw%ho>1P5J zS$kJ~zQT6b-cJcY8N+m6_z+5(mjS49(>GncUTCC1m`#)9ZhPWYQJVtkG)H6|T6IF} zNgWzH={RHYyoMNI!te6BC`nxMq4`B$=)=+sIgde~)fGm>(`j!{yhC-DL~~zu-hSXV zPz=A9X?kL<@44DjSe3%>wPp`$^qZ2Za}~0jfmL6)uwObQ*8($$`veZkE2;=ogCq^ZUDxjarWL* zCN~Lr7Jk_GT`4|Y$BFFr;*=8vilk$H>6+7~2@#E6t_+7%5$(eZU&V@+WFX5AJz_w5x;N+u#56%N(QqY89*03lax!hCwgS)94uT zivQ^NpiIIZY{y)8CA7i2x4>(r_&xJstb~U5sA4sP^fa#T&Xag9J(?7-hcZ|`<%`GLFivL zd^&oc6ZqKxcoeZqzi!_yc(kYDf*G%aY(QL^%~ zD`Ry-L#kt#sUvbAjYA8~(>N{JGx?HI4Ea)51QlrEBD4QloF!KCm>^evXouN|`BaPg zmT*Y>n}2Nbd!6Rlo8f{74_ZtmmjXNz3-en`^RF>$P?)PxNjKGIt9kpAyZ70oB>=GO zYU&tcTNZ5r;isi&D!pevcW{c>zd18D2`L(Qt$N(qi>Y+nxhhAIDu;-X&Xt(iz+mR( zRs&=ddErco)iKNRPQ91o^4qvFi5;9FVG#;4dXUVmIoNZm!8ocnGy1i%8y>b{$a8Wc z%5Buf>3f5w!A@826YN?3^}JaUxrN8}oXXSOOo-9b+)j9qdFNPu@|9XkWF4IXnmw9# zNDW!y0>ng!(Ze`bs-`hJe#L2&dn8@y^cVmjr;Zn83L!#Zy~fuV`Yk+kUCjH1g{M13 z;@sUuf%nE{Pa-yMT(AAy+v&FFf(>+i~YV3BVnk z*;}H6Qu3(j#b{O!?B>03k`7I`NiwI|=zIr#h_QzWbQCpvoGtc73Mc z_QbKEMKD=VmieOmxGSwx!8BzR_%}Gp_-?Nw?8HoNK&Qtv!4S&tmf7A_{ zN$AfEjal3JWfb@|Nq0>bo3%6s@HO8np~pFLy&ZL~z;D-|aRx&2oq2&@8*}yS41Zei z@J^XGx?Yjh(K>)}9g|T}42SzKa-aXCd*h@y{W%J*9w#K%b{;huZ<-C@ko-Rgra#a9f%8F}3@wmWuQaxD8RF5d#6V=P@RvX>vMz>`_^z45; zH(XT*t>)7LLXrHdlN|)TUCm?(Lh3CQ(nqX%pk%u?tBrbz+T4BamN__fR7MfLw5sjWndchseA~1Udz;A_W>oTtEk)@>F zg;LJ{6C~FAwk(YJ5KFF@sj)0cu#$*+aDxn$_!d}dfBDA7lC_BB)Ai%t0!?!QE~wQ5TwzUbc@x78a~kX@4|Ey1AZsSrH9J zPk80dQmD52KrCAb@cKE@@UyaZ5D*ABE?2M4Hg56IYagw3?J0N6wUUJQj-uajmKH-A zRLj$ub%eOCDjqR6+rPRLW9J0o`=}C@lH_3atq>H}mvkS8HzJ{nKxNB=7Qf>ZfICH*8_Gtm;)xU~MVxsIm zG#8z()+|py#2=9qKU_25N+OxaFlb;c3g+*kkrm8ee$$-q5`U zjYdKfcf=RW)SK*ym>R~kFS0mmmwC<>94}HN)Zd?6Q=>}}65i}T6*CP; z3n#nIBrhlDPyNfM(@9%T)vW(Md;n(nw( zLGBxC?ub1>;~mYW-+v#`$3HG<*bWlYf{^;dNA>Ct+O5LySvk~4h<0%G-QKhq9uR~f)JOVf+4<2Zr)I>MNp->H@t%!;F(%vr75RQs2! zZ_|v#)L_!kCt{2EaaItXg%m6O$B&U=0ZRMfstpVW;1*61>6HLbm+}nuR`7iu!sHrK zT#3DS=ZN>UyXG^MqofTlw0{slq_^8A^lvFLe(LVdjO{&XKZl)goQV(!$Lu3ZD4UD$ zaMJJx8DAfJBT6)Xbn&yQ!i2Rn;VTeAT(KYP!wQ@8mWlsPS$ADj+rzRmEC9JHrd4x3 z#mI*rMb!}+)OJ5+{cz&^14^`Ie{I>B3PZZu{-f+;Pu^Y2fg=n71>*-)r@mS(kFtb4 zS$(et+n)#Z#g2C$!GshxNY2gxWQj7x6~^*HfRfM2kR4c)RZOLIo5{ARW&hp@ecla~ zqV9@M;gqv?F{mP@<>#Rr@7fI%R?wQop((=nNgpUvE8=z`>v7U`g^2J1r%lu|yt>+A z+wiHs;3~~z4*3+Q`*9Lt-lbK4!t;!V;!e1{Ofu-Y+ff?hV@MKGvdcYgVqTid!on~E zm*~;kIaXYeMT;LNqi5>G+a84&nZ7~x-gv(3)}T?trA?0R$}nevaooDk;7qAAUC(U- zf*DTZdq8CdUgl}k+mILk%{)@W&$lp6jO*=7DdGN-?0*E5`agc5w?;8Bd-!30)HPbTB|IER% zg(SjcoJJk#et#y`-(ph2v8yuNGw}_CTn@kSB5hRpE8ZN_AylCtj!{TzSvJYn+WZG*4MC0^VG*w zA318_plwiYD*H2E3b}QJp&BTPACk9b#Ja#%g7OI{@@41~YeubzmMTC>dW9&x&Jcab z(Spfg%}C3nyDUtwQ&Fd8ok* zND=<)0<`#Vt2GS0ngNN!k551aW3STt|ZJh;~BIV(;bUQ+6 z=Rm?p6Usr#noyHD5CNzg>Ny9ZN2HVlt3Wg7K#}kfi%`~i*r2tGQ1f{ZC;9&zpo9pA z^LK8r^567`zd$SIL1OTQQ_$mi&|CO!2PpdjY+2fMD4KP))WESA1&Ox z&Qnu|)KLuluh!ZJ{PO#bcH+T6_g@*} zznI3CskON!+?U+!y&vW5m522__2B<{yK18<$~63467EB#a|EI4xR}Zt4*7?Z-yA<} zWhWJCUUKcRP%RU#5_7%3V%8~|2-vmfJpmujG(2UT!J#Xjd2zbm^xf*89hwevw7%hW zzd(LYUB|CzwVOYk^v?oa>QLOYy021AgpAo)j!JdJ!^3CLxX#zee~U__=2WMO4`8Y5 z&A*G3qd~7@PPn1f5uaYIE}=~(IBOIP@Z7sy`crD*YyMPHv$NC0a2excQF zIc*E(JGczejyPjb9%pSadnRB}36*p1phT7D!fgo_C$Y36tH5YCFdShI~_ zH#a%Xae+9x84t77sV#?(*=RNv$38Fug^6Pd;j=v*U^hj`Chdz&)sY1IJTl{@;a@-H(lDFT^|RDVif?`qNB37!HBG&}dbX&~ zY-fFU&Li}-!x|GVStxGl54`FwK7Q`b1CdCvX_3zvdt0!EJDd`GO44OJt##GVWoDJ>)Y=dWtlsq^rAyZF zT<_%t*I@pwlhHsa&bP;FXs`W=M2i|I_Y4IMpAh}x&C5H;bNbD9b;BpvzunU^RhOS^ z9tO=wj5OvYeLk0(GJW-<-=|K%HP6C#|98}BuwNkXKvh3?bHfKB*y@uE{cU!)(qUrp zU)2k@C%5{qIF?FDX8LC8uL{p|xb%7;jI7r~&YmGWKgI4ShoUh?V!BmReIwRrFJ%l8 zb(|-bvC^H_`XjINE=%TIcF$bU zSmMt4JX7%P6Rhqop+Z5-Hi9ilFyj~g7)MrT&xo@BX7DTBc^B&DF3sdcz-g*VdK!q!2?P zEzukg&YmTUp){xtbs_`G`8&?c2^JO%kTA^IL=cNP0b*=9A5Jj}@XU<@#(s-4W6v7J zoJBDN01AjzxsJ+Y9knz0K!?B<9JW7ThNABr^~W>z=^#3sRmq~WHc^LI)IK8-*pC6x z8K99rL>Nl|#TY~F*P)mlV$5Yl<{<`PRicu!BD!)SS6rn-M~eb!8KMaz@+03 zQz#tP_&_X=EbmCxvkL%;&PYVDjwI57?RW68Ch>UYCZ0(`F>>%Mk~3qA z$h9N(eVTDV0PeHeh6)&Uc;=cS6ARE=3Si7RXI2;G5KCXjFy$a5fVFyLx;hji4t20Y zaJKakq6gFKKw{CrCS-%MP|BJs1syJl0nCF^5OWL8%n<{&!OTNE<6k9H83<+UjfgSP zV$3l-v7EKz{@Xd8@vT%0a349cXw3u@sOd)0cJPPW-T1>fXT~<1waW)$41f-2)_16& z{Uac@o1U(-c1Up68jG=jIRfy14&!`;C2H4NDhz-l1I;W~>^ zif7Ed#|yLCHdk-5W|*jzpgY)Zc)D_K%!t zjvxkeQ((g0v{)P-j)0kS?%k`*sbxAJ?SLMP5~kPiqNpAqr=v+gtUi!@A0O&qF62l9 zMaC!?HpATF1BrqdL(vH=GU|{9XKqiR4u_oMAJ8*E%xxlU2DU%Oq8;J3O-DI(SM9}Z z1Bs}E|0%idT(WVbPM>oD3yc5R!rX-e3@~#W#MtK&=u-sf9nK8EtK|siBaYw?_tydX z1h5YV+$~@vvD+_Z4G6jM?JM z+M%9vbIA|HLn2Fk!nmD!180vIx|26^YGao)J7WXw8TD! z=U+EIzW4wLGdl7f#z5jkBFN?e_%G`K!@w{m6(P&C0XStf991%UW+pL|5DO-0gS>FHJ08j*Q`XZ|T@M5}{E_mAT3QT$0{p>-&HeL%}B zD3QE#FjD^sM5m_Yu)dQ7&?E#j`QeBf+Mhm*WiS!VO$5Y-d>F_%G5uiyCIg?907j8C znjn;5lssl@lNqYRV(v1{mN%K1Vn@#h5e3eYSZ{AMq?s%{Q;H$=5hFwktSOYAAPO_D z+l3hjKC(Z3Y+bLGDy&^XSTM<1okkrF68tC`xbf63 zoZ2Qj!XV=DEY}8S_(2~o%yc3{1q#L4C(@u0R)-d=;Bb)6-1lF`Q5V)~ka&0lilBo` z6m1W*PuH~_VT6k!DoY5YDSEhnbcPoRK*(DsZU$i6A~1wT08yz+CDc)|1g0j$tDyA1 zqXE*(se|rz%ebOC7kuSSe1QS6=>QR7TX2Akn2II2!>GOTO<>RF8QrG*n5D)Ul;Kw2 zXeF{0ZvdZ}uUHGHfSa)f!%>4F)xXy~)-F4OMuyhwUgJ5BG zjZ|&mAdmX{%)x^ey4j;`)!A`fTl#FcyHJW^%WD+835S$)PxJ=hCh!^EDtq`0GYl2p zO)MZ!Wp^+UZMg*tls4+g1p1C$0B-_;yriQe)?|%QK@ZghgkKD=#&q8zpL}Fbh+9-f z(IC}yQlBXd32p)uy>ZwywLgsDf^lIogA#!ZXdpIC(DOXQQDHCJ>a+5jwBxC_-UzFp z1DCJQ5HYKouT6I_j8Jq+(>?6g6{M-x|H^Zcp&L9JG*w?=`e1VR82A2uuIiF-kv zAPvdvGsD4fC&Wa3Lst+0b*c(ViNGQCaEaKAFbH7T6>f?jsUwCCzQd%IG9Q6nK?%A$ zi)7tQT);XwG6a5IHmOK6m2MRL;0(q-uV5BlgGGy0t z6&Ri z6`&33mN4+u&cF(w>BvR701%j3h0Rs?h|?l?hmkjaGKfgNLBg&ZDi2N{a}IACG$UGo z(OS+W^dMjpYUz+j&(H}+4nhh>*6Zp;`U|v>BwgQ_nWmYYL~Q4os?QP{c9zf?@OpCT zjvoN8veXtWK$@W!!g3%ofUW})E{Y|QH6R@DZpw;AD6+Ab@Q<7&hA0s&vG?qhgm_*{ zY-+hq9dyY~82=zvAoM`jI!dKssXE-3v!7Ai%EeIf6Ky5T#3o|sYv&L5BOtd#NsPEH zR;DvX3L}d?I1oR$;T-&*ocpGRjSr!e@GPs*8mExBq+F#lAqO#!;U^I2|kp@jIGS@VlNQberiUiM$bPZ8-Y6M-T1 z;ri5xDMgx|vvXH)Yg6OCSU16MuT2-+M7g1DSaM{=%|n0VK>~9HLdZ?9#ta5Qpy9mL zSo##w5ukeXs;&D?#X7?X2MU)D)JooMQ` z#T$Yqv_>+2-CY9`+(?)?dc9!NLw)bMM%_aoClpf{HBDQ;?>V=9|DCiaya8CH;jVUX z>QX<6R`2J>xP)H!uTCUTR+R~&EPt_F2Px`O(Ta%BuVdd%)uU);{BA`-QXFz^Kmpkl3C z1@;Dyof5kn2rW0O*KtMcfF98rv*Kcx-s;#tJ*6h5HjJZTO}3JwP-2VOqk17pAH91n?g{f@K}}{ zF>hioqM?mM(-tMRh8Q~31hus4j#M?YPec^JaawgFnRe5jFaV%Q%h;lfE@?m;Gq9t$ z?Q=q&@C)2AYN)htkM35eMUwjbYD@ljzVlz6>xy_8F^lV$7jglX%k(_ z6Qr)e^`5_;Kmd3#W9#?I!EhS|Gc&G$CO??Z(`sp2fUcjUuZI?F@&FTy1%@QTH+vbBWk3sMsB4c}`F)y7u}*HC=9SjaIw37t z({Pai^DkZ!!I=4jQ3MXrQ<&h#}iDE6NF9Ufhbqvt6|_rrXX;~ zzd_(V>EDnd4boy(^&mB3+Wx+OgA*B-Ti}H7wrk71anaI62ZwdfAw7jbTxf3Ma}xu| zI?$GLFp=42M+L+Z-HbNV7x#B{yng8`w>~J;?7BDK+-p&A^I^G0s1i}+v%sz9qhBqY zK9s!{*y6}|@mGTwkN$cV1<=}p#gN!i%^JdTy^u^hwGl9+z}%!Ctu=ZWQS^VCkE>K5 zq{Esn{*qMzQfJ^eWW-ie!kuJo%xJQ-Q%B<|!<9~rwbGjoZMNdo_?LtObyP!GzIVed zx3>GNcFq#83j`itnYCi?-QY*kfoqe`lj?~v+;@sqdR7_#_Ax+MQ6Ovz`EU>BR>Cb^ zNgd>(eYc)l(CE|R*xes%0->jwO&%~Jw6XLcKy}>LZmT=viH&G}R&L%>j&qoulRbpH zgmX`hcs&Iv@n-{VK(92!Vd@=9KiiFk^w2`9@siF-QzM#H&dbm81|{$*9uVK>i>=;? z4K6Ly5wQ_wfY6y|ZQ19)%~gf`$M}ZV*og;M{s4_5h)Il{2Ti&AF4OrEVNF2bw2baR zZXSc=!C<>X8oJiB8ajiTS?unh4B#~iDdGBjujsfZ-7cPsA1=-8E=hylElo;nr|NKX~XXtX9CzrBQ}2%S@lgT z9s15B*!c=|&1tG_TNvy+HbeNDXiGN^uMF(Pw93CtZ=z^KjAL+u-?&4ATHm;O6Ti{P zufXdDhkMD2R}{bV^?t?{YZhPJo{QR0KaXxDKpAtzPBdOWDvB2JjEc(LTp<6cV`!9A zZH{0LBAP7LM!G6_@nJi0>tlq-&e0k6I;Pk#UGC0+y)!%ih*UQM+LoaKOx$ z!Vg9GeL4im{rbQn%{R{Pb6^hU$bHVVkv5136l&3K;L~6IC__j@JveDGP84MF-4lbk zVTUjE6OH_qZ!vXR#3H9a_&*&jv!CSrb%M*PvYJWgy7fy+wo3HL$(<1}<1m{;B4CMw z56h>8{pw6P*6-n&r>r*If&$WFO7V!PC6=4lV{PnwLHV`3B2~cEikwj3hF|2)4;$Aq z@o^G;)~W%H+e=VH-um?}W$ z$DUq8XQ=;+Fuy>8<=9$Q=?wVp$1mq6M$Pnu38l0?cMt8ONDRpI12f6Uyu@;E^j}@F^9P#bdilX3)AI)|C4g;6|M+_VYiw75as5e zb)fqA$|~=H7M~FTK)?~hTX_aXO4QAJ;(c|%`Pp3V)eRQfJaf`g z3;qJ4XgIdMWU%uZtt0zVCvKYQpm8e$oV3jzC^A$?tL;Z?36g<4U0|>vY}hu?Zcp=o zM?YK1AZ8T`S{m3%6H2K$8Er1}eK+4gx`BLagEj%Xh;Bed0JhYIzqn>;P?(-&SGOdZ zXRzjCvQG-jJ!l%Af7Ne*Fqw`SB2vV850)TLi5{9r)bhOqzU%O&zVY-{;8TS!Ei_fQ=>X!~5r!@Ymf36agvud*8d#>FZET_Ij>Z_i1 zTtZH7i~tC5n+SVrx2pD_^K^vMW~J>bl>uDMHb)5VDthSRlE4373iYpQqbM1zI9{Y{ z&}?1(TSI5MrPiSdX<-m|X1C7S-4@uqW$#C+$G=@%Gu#PpDG;f#T}p3a>hHe2{9N5N zeCg@C`x2*&#s`Zy_UQbp{FlO;xLlyy?+Dq|X29R=dfi_w)tlcx+kbJ=5_5rytJ&7Y zvq9Dk9nkH{+N6a+V%vt=jnu+x>M=-fEm;7=QFj{&s&a<%dt(R^;;Ek8e+e+2t%f%d?nT zGzISZtMa}z$q)c_OXH?!?Y*>v+RAh_S9hu^6g}uTL7!=wY}Umw2CLTBr(QJ&eO5@d zWBZ+qVEkCuzq(}smM(PC@@T&6bYg)U6SUTQINg zVVhn;cZ>HlIW%Hu_{K^VvT(gUZ<0;}_J!j$9FY$<;dbzeT{ju0kHWKHlRT+Avd~xNek~7& z^qL-bY&;-K#YE(klKQebO!ok{|I#O_7#FZF?8(p{5$Y!X)v`mqg6o6Z2< z)hf;d@wmUur_ng|_uf!Tk?>JsaZrt^Yr{FjFE0F}qJ0m8(Z=}U3FYRU!@Z1J4=shd zO{z7-S~cBs;ZLK;Rs&T?{$HQ%B*=jNvoS_`R5|<~VO?2knH9aD|O^CG3q_1ZM{jj8Hk$CbXwH#02 zgTHP(*Y5%P(>88Q zl~S>v^$&M)MYK;3i2Nir73q*A#mlC0OuixIv>s(64Sw{QZd%rw!N-3Ft9pALqchJ* zZ`OSI+S|l|B(+Gq)_OG9m}k^BJ5dYP6ngRgBkbEdRKdS=9WDZWEdQTKhP}Jbkt8pz zRQ0<}ekvvaicKu31q3nAlQw^TdhR*hq?ijus}?^5cc>xNQagTy=9ZuMc-P;`=p4W=Wo9+kHZs7 zZ%;&+@aC>DUW#C%76vT()K=(%UJIvn7w=^Mg|Psa`!1HH>i>M`1DcZfK+-(u0BV975ixVvVXn=CTV<0Eo0OHB}c zC<3&tSi{+M#}u1R8%dl`c=9r+Ene~hMl|YSFHXxLGF~R*1?{aTaq=G=wYQx1ZIFPt z^C86r>uhk;StKB=EwWqTay2RqI(@51Zxj(!a~xNae6yR=ZzN=l>|mFe@#?gVt#kPA z*~UNYuddn5dS9C?KPSOxo?hq=O!xYXoCRv$k|!NvtBB@$KATM(KugnDunm20#9Yo%t(=zp#0Aq;#7M&4Q%;4CRnV{G66}jZ)08+ORCS zmT|QVg!0AY4qv4;Y7?+SG%Py%H3oy`nyQID&tH!eEu}Ya-neUL-k)pXrOU_%@^Sqy zr!)itKZP}#nb&qb%gsy?iVb_gMyrLqW#JEe3Zf6aMN(Q(xi^H<^W3g`Q8!C$oDJ*! zaZeSG5@!O<7PVpVJf9+3aG1V1Yi<0&KTBfr2ZKEMFQjc_-}D2LC}LaU{1ig^T6)p9 zSIHZ-i*6^m$!zsz?0GD%Z+rlLp%Fv0Yv@XE_mq(CJhRVN1!W<;OSKbwnQRFE{~n#o zX=5mcan9x_vzGq+{EH^j954-8TaR`|U`;%c;*X2c|LqoEyclkCS$ay}<6S~Z^hF(d zn&HGDzv;buFx7msD+c_|3IBFntr`~}@a;>lUW%)tuY_#vYQ&dFgsD9RKDw@Lc<`6K z6&BKMkt3?1?_;Vdfjob48LFXQNKe~lo_jxWhEvB5UQT$1hnTXhKJ2mEg}j;8tS&c1 zXWa1q5!CBQpzX>pzObB}2zZ zCI+=c0qzkE;@R@PdkM2Z&M8kzKEZvsSnnv#iN(vj6*W5Vs&StBG;qXFjPh z&WVzJs<<97IA}oxN%BXIGDVWdbU~qig@pWeW?@rT{cW*Auy!<{DtK}eC7C0P-I;F7 z<(w+mOh)jMfpA;`br`Wb9nn5#5_yl9>5^JLISF5HJ>4CgQ#zj_A0}%`eX#q0)OIta zfef4L^KceK@3{q6cMnY$8qAHg)vw>18du{lDY~yDakC3#S7|ywe(-5Ip99kulRz2;UkSW-rvh#q-_r zOp$_k&A-fAQr;J`C+XW)r`;PAQf-mdX%7i|q%BS^me|NumH&G2yYcLav&y&HYwP}< z4-nJ7a&egWyGfDQI#~YLV>oz1kbJ(}TOVp+{>ipSm1`GhXf`-!akaSIQgP*mrFOUK zy|LAW-#R)UKa8FH@psTYVYA^3W!kG_+SHW~_*?G?0hFnH1&4*OmL6W%%Ta+pD%LI@Ns|7f{?>P2!FE*^0^6IC>4N9FB^EA) zz%-<7HqYXc7}}5Lg9iJb3y8geC9qvQ_2&~4DaqLv<=#P3nzk)obT-yNJ%o7OEB!-ROT-x~EV)?j(ekJP@xr8me_7~l z?_>u{j7Pu(PHOXG&BVzxWqyf=Xv&l_XuWMGv$&CW!yn6!T9Ab(dLX_gzw;gtnGe@d zx(@0E+!SL~T8X*q1~9(EDE~ZiG5ycwtU-$!F9*O?c7m{3N93-|?2mO`V^5foH2YRpEq&knM;{(Xo_u#FEB?InbsK zd*SVHuZ{Z}X*Qi}x%a}gX~myUx8LlkF=8yn4&V{K(u*fWhi!&aRaQ<-+uuH=cRQpi zob3W}T1)S%J|up#=2@45_wm#yAz9P~pU%NvoI?52DWTda9q&75E3jF%1CO-VCTGCg zKY;`*VN zX)xij@1>1v#3YYvO_o*c%pppl#GA{qKgNJ}wa0kV_&K7e+Snq0t1e0NU-!s_jXRCO zA}U1j+SnOnjNf&6*tb*#l6AbG!TV@4`7jm2{P6-k!pWph;X+f`Xmwf4?|E0Ljx(yR zWz1Yp-cNE10esU}B>mzeJ1ZJHr?ymIH7Nz3%(`2-s%qW}wfuhRV5HibXZiSOrVAbD zLXjqaZ9EoG9#R;FkQ?WQHbNjm4)S5ni8J5ohmvQN5*~vlt)vV=oPFC3CA@Nj(zdrk zPD1yL6PJ(AUU_H$T^&4)RqRU8ZURq!nQdJD0VgIf<67{I{ZFrkHE=P$TpLWk#l3Xz z-1`Eu&ij#6+fPLw*iyByJ!I2X6n_yALi27omkV+0I+p#!YCFt1=0s!Sx}SKE@uK3N zDBa9Tp2Dfj0gv0%!v4@?BztOetsKhF?QU@$VxDsU)jIO_uWL+@w{Yn`{vA(EP7AG z9c$DJT@5X>`?d$;a&}Rk4Y#=-h;|0A_a{Hho6zTr&g)m*O~o3Vk?5STIV#LA1q?S0 zN-a6A;LqU)NgW~>xPx7`V5GS`0H5aSRSe{9DV!2uT|?7XRGu7P?OBPFD#lYzUMW## zF6diDl=?_se%;!QDA}!gGE=3P_a=#+_Nn6BLH_VnVx zeM!*+ruLXJNa+;S%HYnP4!~t#NIQQJ(<(K)9Bx=rj=QP$9BmpKkj)GQ!jDsCW@2Y1 z;xz?tA0&QCG2Varv<=58xKVUD+t(V}{`Vs!VoqNwtc}(`;ILjkrQ`nAiyv&X>vh5^ zh59-9ed+0ML%$Vnon$z?bz2tf6AI2Ml~Yk@PSC7Gzy?o|yt9#CB@G7tTZJL}|) z{Nuva@>ZR5Njq`7J12}Siw;kl~zAHdGKQM!}(E#r>E>$u#o>^Z> z)io%wTsAy?;U|Q2JNoAr6*w`uyvEgaB`hab6C2mQ?`|DF^Fd&9{p=o@H!#<#U$o$} zcNl-(2S~Cf@?5t|c5xYICw6~o;}FKmJ@^{!m&ci$s5JplPMGCiE}DGfy6&FSu8?l{ zvPLq|cJ}JWcMD%DM54RSC*MI{+Wys~V)o#Z{Dr!(`b`FhfJ{(kl`id54k(EhwOx$r^GOOvDmIX3nD z%uz`GJ)mVF#NB{6H9YtEVGnL57JatNOT#O)@j0u^-w_#m;fkR#x}w&l8dJ8AweeQb zrZ9o_vDcS5W$X3IUdkcFlI)2JNv@3e|MQJ1L*?8~Tg@@Dhv?i8kG~9T$py}Z< zbZg%u6_rE?oF0`JBxgyUEKOW@YufZE>T?#0vvdA+y{w|xgI|6?9`-7I(Uf+eMCS}9!{&JL0P8~+h#cw|O1rR}0$G1C-KH8N&E4lCb zky?xq@WO9Q<__m|nOP-N;FJwNB1Bu#YeFz8Cf>hEDpA9B%vo;tw=Q;DA-=!Mbmy&9 z{{4pR-S9%Axk@AS;AYB`SDfMok6}=ZZe<1C5dC$-2KPj(E4eegHMli(HTmkXn%+9L zFT<1C4+SDW0Em+Jw3W*R0SBPB!t0Q;XJczhT~l4N!Q+0DA7-)S?DGw!+M^j2>U#bq zA^vA0;j!7Fw;Z%SGUlo7))UlE4#SI=Lh~j{Yn=Ig$C3v{qHo$$Y#6*&EO|!J_448K z6R#FDL>8lDZ9yh4tUE(R2Zl|4TR3_eD{Wrxn`3{n3w-lwQ)49SeeF6i7XA9Fl#;&k zw9JSxqOsX=W;@ZPJSVa4$=z5ly*fy-qvF^;`n0Xf`M}0IvQe@|khy`w&|+_j>P^KE z@(K0f&zSo*_us9_U#&4(ySSjk_OKEvZ!~|pj~Cq{rxbVWRNQEbDU|-WoIgKrIj6EJ z;aY0T@*N-~59kH=wx_L=+Rkn-Zi)0-zVzt$ZzqlL={jAT+H1@HH(#(p5+M)v_u)@& z(Qco=7eM=bw=7gJfC_VcBRPMfgH8R_U|Dk1#CX|QL8?U#KlM>~5I(8j(=Pm(N+bz^ zFTA5E6m1^`DcvZb_M0R%U%Em*89rWS&|Vpl#Rj~(iwy9JtH@XlIrgCV!y?Q+_++cF z%3@E7-2mjju%3rJ{1+Myw64IZ{rOKLg}2p+XYap;Ok=@bb(s1AoRBsIPAPFPoz9-V zSxMSjdcWx~td@YO4%eXOObLdzHb^Dsj*(*=wI0s3 zIs%!4mR)=LA4)5`kF(uVBJ_%+x}xQ~ySmdSTazgtqP4Ie;8e7xY6Tb<5$gAByF#sB zJg<~1_nL?VL9q0#dWZs#IS7d(X_I%SL+Dv!L_Y zLo1V@%-0+dNmX-ZDWci3Z#(So7j8N6b28R$_lgqEl!XZmewM0nmS`~l=n^kza?$aY z)QW1Y_!$v4b~uh^WHgJJana(C^-QcyIOjrm&6f}}+FB~J?YE{SIg&C?kIXf8Ee8}u zrrzpIm_f;~^S*)2l}&S}9)XkZ8*d8~ye z@L6qTSt@tx6L3Fgm&@(;G14_f{$+Ye`3)-j}W`3}2|r86Gi2KK=2pUv-|0 z46$nSC^1w6Da7PjB<-k>I^SO9y8T7}X51OKPs4ANR{UkI&(x4NK_(AO-Y_MF%x)Cv z-+``w^h@n;R&7Gb_W|ZA6;bhJ8A~`<%%&rRU7!}ftVM?3(VYp)d0Y(p z_j4Z>)Z$JfquP>{Pho*kgi#C*;X)KMuU*cQ%<@$qpY-)th>a}Ncupy6$yl6KX?g|5 zZRU#HF;5HDV8@S;O4dvk7C=R!54)yy;qBn8%I(L$B#BO573K>XT9byFbk zKJ$oh7uI85`DK*AW73m8B`GmcT&}-TQ!Y1=on7kDuKnghd{_I2Fd~fSNSvBU{>jJ(G@pgIE zu-PDaL+*X^!>2-)4$ekujF8&U`h15IMqRKY#Y;a$?Z&-bpCJuS+Aa@))~Ue1=M zFLyo5J8k-%A*VS2@#r*$S@e>mom)#UYuyju5bXD%B4CVIf zxLJ}PjkyO(BOfpZgJTs4A{Yy}(!B-?xpx9eQiD(Mi{BH0YDrqMXt3Gn5Z4fES*?>eqe5YohF@c~)UpD@rL1LA()&qanfLY+riKSyI!mE`yz zNNwsV*v-an4?ON((sY$j=I_l7GF`;1Yd18dys~1gX`YZ#V zZuwiF%==Fyfyx{{dcqziT*bZr%)l?5L&>knWF4EoEh%NTE~aB5^R77?xoRmYWD9Ry zLvv3K2O-NgrTyt=)@!$Sr7O0E`TL;=12=ns(s`~@Tt3t`L_GF(Y;&az*4*kq=MFYc z=yX=K!<}m3@n)$8Y?d?qXdg=N>oera+MBuhGCI$7;8BW0LiQ2j!OKmZ%{Z{ci45I{ zups_C|50$Uld@dEV!!x)g^2jyZ=<0mzk*06}4TK z%6zJU=&BFJMfx`rr#%^3KN?m;lC$DEBtt$NB9t5Ivl24{s`Y<;QdfSj_h(^Z9MV0P ztZR;pN|tw){MrXid{JH4;|~7uF7|!igvA5pkdx0GAmv<~PK1n5`NB=OVAL8CLOg!; zpmE>LEaD%gLM^ICXW=wyu+~hh<~7Oxfq(E7z@%7ajQA@$SZBgE$>6^lFA3j_|DG=& z57fQYUN>zK5FX_I+5OUGvesm8^K$y3Z(lEZnYQd}=wXLj^ava4_uyu?ttOj!n33cMOic9KeP$hF3t`=Z3sy z0X$u|aS}^=H z_1kay32eK5TX&4tLT2N%^X(1k8Sl-ZC5o;yn`Fjy9BQ#J}C$v_;@y~wQJubD0G*0iQh|kHQkwur32$oFVZnv(I z`?vHp%^DHrexrFmPhLDJ_f)8wW<9O6_AB5$q0GbVL_TtE_z^JAj-9@Ne9QtD>;Z>2 z*v>i!i@Tkn8plU=jamHRd_?Y7KXJ2ST?!TWy!RUznw-S<#Yy7tY(8P1jQX03Pj%cHKC1W->YRUu1+ez`q0x81Lt z9=4Z^b?K~_y8E|&uUA&2;pKgv>?EN0GxeBmb#-y!M->6rM7D?Z_%27;ru$D6zV6z; zj*qVgdy3pZQAaZR{1t~ro*+3xd(8hZQuds` z=>_fI=CM48%Cy{#he2jH5ASYW@3(XBatMhL0Z;_|2t`Tp(FvX4|jA?{*1sq3K9Qi~;#W`CT*j5;Ko`=-rr%Hs9@-BXVV_8Q~x zw#r}dTkz2`KZ^#PCI#F`zo)&M2fmi_tKuxw{Y{d3Vpy$yTD{r!sfG-}owdL6S&9-f zWs-r_eCTY=jpi-l(Yar;l>uC2x%#{s(dbC&B&*zBU}9_<=Tvs9$jhwhkG zJ8s2mMSyQ3j#r3Kh}(R~joi_4 zZCn1)NJ0Qdcad$=(;H8yuC=y_j4_07V^lr$P~`R5pV0U_E88P#{BYnZ%Brz_`fn*y zyYyw1{oO8)Z(}*y5;q6Z?wr-xefQuJZAsUBeVg&E5xHl)kh~4d7 zDkAVA9%--_&%s}}s@Pvfk6y#^*zyF1eiA&`C<>j(EK>;tBYn z>htupo3{L4*u`W&<`KA#b8J{rRH5anKacT>pGB+IMznp(R+d+3;ptwHFLF71Y52bY z8Q4arEB*Z4P<1^G)mFe6eGvB~U+t^coi~U4L;lrnn)0hh%QtHgB;OltctqCd-rKmX zbD=-aTcYOPL%-!4viBzyT|84#G`ex}PPt+_|Gy7=Jzn)>iMn)EHz#;!xzBCzmo!@5 zlY_23YgxZv)+63mbd{x}1pni9+7jun@zvB|M<}AJqX+(bSAP2f(3qQxD+)heCgA&! z`}$1VfojF;dA?ugmlOyzw)TL}qr?rDrCx>P{3Y++%YUe&DtW4zU5aY>M*&8ac0tE1 z@>?Afgl6=&LQ|@P+LO*It>HQe!zRcmyr00>hPiC#>BrHe>kaLu*Z1r2&)lG#Jr!yx zQb;+hN>OQ#{pE~Tfc10?#VWWM8)`x4y(>3Q8K^-k8w;72-N|-`Cf?ThLAFCUo)z&7 zI^^}b!f4jNDGC1+k=Q(Asia7}ab{HUK&!&?n}9pYu}pOQwQ}^+Rqm&<|4s-cdE3md zIzATz{m^Biq09k30>C^g$jx zrwZ6nKSfj`J8lB27Ghg5xgy`$E)~4yuwqpo=ll$HLB154DJa+Yr~G(d4mCPbR;Eu@ z4Rcd^8mXq2j1gAR0;6+V9ND$B^_U6vH>OTMxcaApB+7``z~#p5(5c}96wJ1zE4c17 zC0UC@|NQZL@!|UK$CP^)v`ecHBUZ&8*5K3bzmD#A;39x~Ee{13eW!B19oFko9@K)B z&Q*Mt=vHx@s?-#=Eb@P-5>zoJSA*V*uOVdoVO-%*_uIh)ZXezG zJb$Egc!0IzhH(iOe>p2G?n~IuaQ)RE?%{EZ<`so0iYJIWDc^&%#GOW=D&Pvveh+9U zWaUTL@;`uYYc<5eD#J9ZbTRVA+BxCc&JnXM_qNd5f4ja3i=R?%3vDM%83#Weh|*-w zJtliBP`yAtOi@0$q^UtvDR4=*R7S9_-h^_uVZyoB7urAxjAtJ?C>GGUh8$gaZc8lg z?wi$*Nv;dv?xn`vl_6eR<&AHCIsT{mrMW!IN|um zHRYn6Vyc}-NaWlk*A=C`q~WhdXHSn`7v5M{K1e?P?n>kB2){4bbln$w$eY-ychvpl ztlQJty0MI}o|!|!4L819FP|*r?$RIjHdilc{4!kNf2sk`yM&&&?=BodF|gCWWYYe1 z-BJBn5RlA0+G}*xL;I~VMjxXB-S&3f>Wlh!B0&vs|4cFuf$vYay1V5tkgmBG>m<@% zQI^};E8w^{n={3-U({Sp1q+!W`1J1WW*Osn@+O2VJ^F{Wn z7=Pk5)03Ac0lDJNRoR_RQQZ&%7LRUxNM>rUyNUbN@8X`nbX@)N=iTmO zshYO;87~H>yKHpWTGwVp`Rf~}a=4I$JCy8uAyfKHLeZXu*Ri#efkIh|XECoZk&{&kVz+imeY1y1vo37iGy;;rxAK#a=JDZnjSm;U`7VsFRlSLU^+DO`#l?Ls?^WQ^^x|5U%BB3N&3U!acg|X3lFdS8Snno za_?tyIlBWd%*8t@EJ2d$^)EOGn+b6hPaoygLM9HRlhw$@@sEK9gZFdc%Z{7?m!o~@ zeG#?n7py_SvT{oSOV{E(4Mr0Vudr0|4M;nAcT7a_{bHNc3)&k}y6sayP9}Ry zwXpXGuHaDQ%8-UmWagqzbTU~B{K*V$xax4aZ?PBoT=2YBY?wa3(crbQ^y4l1Y|p%Q z9xLfP!uvJS21mEegq@5P-N7%aV|}6@JW-RS@_LIzy`V^oXdmF8T`#^frez=w%dX_9 z4C*^`>tra~SK(vz#VudEq}dwx0HR^2rGpgqS)(x|N|lzJQQ&POwz}{*%IKLg;h#j4 zguHA2cjxODdQFxD`b5P4=;IvYy-$2F*4epGYe(A>ag~oH7pgzw=?%-N8F4%F>Hh$v zKwG~`0Wp@lO8JyEkqPH4rz@@Zb5>a^{gxyY`P?B=R^i!dc0h$+UnKDH8Lc=4R-65Q zQ}PEySqJJw7SPd`6JJ`_3*{SyjmVc4f@n|gK3n0wC;s|mu_z8v z^9Hp2N>-;+{0D-w+6a~a>ZAmsz0U$#f;A)3m?6Xn^A154L-Ebu!PD4U&4z{b%h*1m zeLZRg((mv59XSGtt2sS?&GH&y-(H!y3)6QGK5!K z?|z1c@~AH*!5fqkUiY+I;WLqh)V$H}pJ&DwE_MXcw)h>)pVAxaoSJ8ln^(4>KIL6y z+SIh|HaK?D`j9E2VnKh8DxP`6LQAWbR;x`S;kr)a;O)ER%cPEi)ZyCk*I@h0JW8~N z&(3rrd8rs$^M*sQg%z- z#XBpLGe__SC`{W-fc;Cgr;9tWc?~bMYML!`FgFPv)*QUYUd;PIj%jDb$o-KIp5MdE zcV?VPMvOujXN_QTlYf!SP%U{MV1)+h$lkUuIRX&%>SE{aRj{C|FkLhkj9B$M@|}f! zQ?ibANQsou)VO$5-|LruHcrr%bAYY6Go3EnfuK({0+3_{GEySGov7DqkxP^o7(N)I z&RdL=TD`&g9Wwx8s3)(DhQQwAv|RHXEaUDQ;SimMGU1=g#Sz#Ju_ zL-qtC@Re<3R89F}oX3mmn{D`8(NX~n*`P>bfVHER5GC-QKrbD80jf#}|>c45pIKR9moSh-;qNmh(=IwbF-B80z4Bv9A)4DWu~ zfZFh2SEe8deZBk?L!$U|?hv8fWUf%<8^)}EM@$h%V2zr851+R)B|`j_ujzL{Vaj?Z z!600yy&>WBj@yM~mOzm+Dk6|pn>K8wJ|*yxOGOB^fr+ZzF%l=ZzjV|UDgD|Rfi)>a z6bUC}`D#eE`?EA}5|&K8v_nF1$UXXYlUM9ejA`IuL*p6})hf^(F-G^ z4Jwd|tdcB$YEQ>~JtPtsavz9eWJF-JnKC1h%8MirgGI>yC<&HT`<53edHd0 zMcVMbav#icx+=ZaJ>?8Sbgx zQzRufAoTnl41tAI(%YdBN6rpj4=mi(8?aQcz^)Ikr_sQ@%3y6`G;g zbAblM!1_)!(MRfu^6>#xa|BHE+{p+rd*QN?^Q zXef#;)$cHWBxIz7L#FqegxX|Iy2A`&$jI-JkdmHLZ7!MOIimx*U-^LOQ`E{VA0&yw zeHD42?AWGhJ0oCFVxTNN5;k&PVvdL`AduLQ5PQBN~iyx`pMzm~{@4Bx?h!Q7q zj168*Mpd^FJxy&LXONIU_Xg*XI;<4a=at&}py)_W+2M(Bjnxh7C1Gxt=0FF*BU7u* zPk)!TT5}*yn+zEeBGrtjh$qQ^2j-{Vxj_c`EQUaB_yUSsm}KKXuYE9>(-n@bQOn>% zke3p*{wlUBiY_-P&w}&&Ow6e^%i~DhpA(c5GUpmncFWseh8hH3eyNBjE`j zrGw|YxhhHa_tER~K6F>7-s7VNUaqNUNhWfRO^t(!CK&-1^ukjN$@`su-ectfmFLUZ zfjGsXRU?4iJgOeD3O_u=g{vXqT2DRxF-h4;z3PE6`&~Fyy|K(H^3A2oi$CYQ!JHmd zAxayXP~pjkgIF}S-V&T_k|J~OKzyZ=wD-mlbQA5wE)#R{#B{F{Dh z84E|x&H=qr>=05|IGOg`RmyPSu&VDl`H1@jW0Icx{LpUCjAJ}5+E{wo9zbDd-$*LP z&1siB)P>tBUXQPT2X{qkTvQj)oFl#zT#a&DcRce8>q(s-kM>aVv$xrcQMWR`wvc1D z!Ty;qE!soRY^|Mo~%zi+_Hp2h|D6HnJE~N0PDn+S78SKGKQn zY%BQtpx4yz5FHu0Ifm6-(fm7-zHqRgrVE2aJD`R>9Sym`#2h;@6yJl28`b>X_Kt88;-TuJw z_q{NhegkH%G66_%QT17H7T1iuKWUvyv8qdML}J-H5%1+Y?FFbbMp)gJ91f4<6Y@Je zrx^={_r#Kam^=Q%Lz{l2r_3>2YPAZyt?J*TM5MUS_IOP*jxh>5f9k@TW$%id;-op*?8D9_Z^ zoofd*doyGq>G~Zm?>*y<&qaQ4zZeo@GtX6s1=DMP)i@y85ent*T`@&wlm{%DKO*<& zDovu0^CMT2ag<-G%(wawH3yrhM9&-FZR0}(j1ZUSK0s`b=OBMa70txeJO=|^S`sR8 zi4f-ZAamnNs^1YbOD<8|me9u;V-Y-^_Vh)=x}ZVNc|)_KZe5LFlv6gci@d*|#N zqrO>x?p~jhtTbHi0Bh-$B2myN=M9Z?*5uS1h-BZ1r;0G?_h;f@@yfUH^2}8g8FiYu zR5K2U|6!~v&!r;)pS^@b<9F15xZ@pZ3FiGTZJ;-gZ1b_- zdIa;69-VFAd(-|=zY9jQe@AwEMuyaihP*0&EqcK0Fuc?V+~f1PwFCsOZex>b*nd zTGJoz!QzL_FI6>fP3v8`I4;t8(%Mf z)@jDg+^!Vg+*Rt_sS%aG!zZ-XJ^B)?$SQ#NrD^z;g+($f{@ft~pq^j58^Yjx8ql0n}b2Wyj$Wv8Y|OK59{qg#65syGv`}QOw;du{!yG?8KOm>t}3=gbyRX#}qvKtq0wgG*oji7?E4sxE9{0 zyj^7ZoUL*3!zKrj?_n@xgq?%wbyfzs$h*Sw`PL7~mYNWW^{Fp?-&Rq@N6Z1q)aR6i zA(6A&$T&!Q8=3=bz24yW%>w1gk`sg9vi92>uu~Dq8Z}L^5z}Z}<-(skwWTk#h71MzV2!56xS(m>k<1>0cwDN@^WkyKFNKuG1XB1O0H7Q5H z@sf5U=GrHU|7^o&m;Ne$SX9$pw=&Sg9am%Z29un;9$?h(k=LAUR$!R2B!qmQ&`Q|` zCt2n^ygdw$v^C#D=gipq`>mpR@9Q^UTq1IX%4Oi>YU{53Rif*|ga{O0a6AF81cbmtm4^Mv1DNQQ$X?D&L8Zaok?#T!2nmJ)^xgq0OC5z+1WwR6J_w; zmysrrzk|OqW8&JlnEQ8d$@K}A{<5cSjPcP0}zS&;Y6KT*de&rkiXdpV%`W|=} z?v0XgEAQ#WK?@4(m$T#9Zi^qt0bna%%~LLR>u<=7w_+@Ce242N&(Aq(`sEy);!GJg za~UX*o99%2;xgu9ffdn4)Axu{`Lsy!)Xz0z*AMDmhruAIoF)=SI@x{sBt~2H->W~d!`rVHY2N}bRuf%>}^I5p5HSV zCDL+#onY!amj|Q8?MTcviQI;qYmN%U9yK<(`dmg|BwOO12IME%{%B4+CYQVq)DlwB zJAY?HJaZK&A^ieQlF^g-Up$-}He)P2(a4)}Y#5%8d}(p#0{G@>6d78-v|-KUeLaCP zT!}p<@y_+{U_4BefeMMzBJVY$YLqmt6H5wzELpd?zF z9F82|V9xdS;H=5pQhiNKjWuthMtoYk)5f4ni-knSL1{H4uyMI^@^xcemM~ z1AA<4m$WFQ8oRFZu3|IUjP<1_?Xu6p`SGRsZnLJc%G_NIT;!X%cSde(qD0k)e+iG} z*e=e&+@lmo0kUc{qGK7cL9ofKn>z%=`q=VIFZSFszvnsxo=Y3#P6S`6Q;%JLSw-=> zT|P<;BFm5O`KbSZ!z3ju#;5uoDgd`fkKp8y?>5&%21EVM@Ytm<4Mh}~L-xirlggjH zvCQ&aK&>KU^qy^I-rG8jA9%teS@@_`Pi~>=O<3lYyb+@&^_g1DXH+`R+wvm^cgs`4 zFUO+m5s2{Ty~6~BiK_cR87eS;=bQr}p7u(qMLd%4YYt$>laqO%%-?(7qsR}CO4KPC zmrhn35kkPXk$EiO`5YD98%$R5)a#9RKXDEpN^G-{;8$bs=E;KUKd+ooe*ZPuVn)#y z>Ql|=XF%HPMgpdIfTLy`1hJ`G3Ni`!<;hYP$bDJ8agKH_f;xXMiKf|q#$}my<7f6_ zWL6oFs;ZN@t8l2Gtj^zoo%u2XFGgw`pIK^Z+H=YV-rM)|Q9d!+`=&UA@8kv#V1w;{SP%t~-Eaj!k6~ zu;A>?-1I2{Wq>lPHWopD?aP$F)nwMJ;2grXdh3Pp=@q%(HoVKdcX;=c30FYx{!wDB z#B`%6D*l?(k zku;jUt?)B>@0?28XT(M|*`d~CZ?L+Fn$Sk_OU@35CUW8GjnDgk>U#&vo5Z_p<7Mbu z`C4C68?p_)fVA3hF~We?%E4NCPix*dBb>QzBi5E$CmRcnxb9IH6zh|{;RJAm;(Jt+ zh5D=+B>}jsRhaSe2-s(DD+aC7P(%v&Cu>G$(|P2Xo5yXPn(E+u-18)O55XW8yPSnPrl_$!<@(p6iKOPRn*#Vyw=&ehpthw^{iubB|)-Tl1!v-4jdC4&4&HNqy=2 zp*m8%KQms^J#!xDwp4^%1!iMb3%JkFCY^Qeg?Vyw)!3$g4KO>`hfC)5uDfbh(TT-S zy)ixR=>Y`YM^csF!#BC52Lrm7pE~z}UC?+-j9X7SWR8uEk)Ca=2-YFLbX;SJC71`N zU!vSdzA&UKG(Iw#YHZm4-s$t6XDIlz8%gjd=AAf;P4$hWc*&O8;PWDS_{vkFY98{8 z8ueggNv(!|uUAka?;UAvOJYi9&)k{3Z0e9GdztG4ZX;Y?V-tS*q_wM(_n?cZHb96- z23jHjm2)k*QOqRUus-@^jdHGA&NU4ZFIx7tshXExy6v){a(%W#PFH`A$a_X?=1~DJ zEeYh30ycRXQO}6W*Qlj^+*{iqfgZ^=OxNC{`>3pc)xUFcptpqW+$%@#z0#tb4>cRo zmqx;{&N+}S3Y}fw!$aGg32-=0aPETxKqNg`GZ*NQ8a@dqTkeCC%GJ9{YB^rc8uiIX zoViJ&-mk3xBZpEfCnM}6uRSCA{KLY*Icjz8mh`2`nc~Sx9Z90%D}CNG2`#CALxy9wc|VWbqXP%C-)q0A zePGbp8>QyRJc(scBBzgdk;}@39&>=X_H`tVSdCLdsGAR!!Q<-h8Mv!_PnQShaet|( zSw}pVhxD7oZLo3Pjha{(fL^-#QW~+mn3O<&!Dk$Bd5SYlxeD@m+3(dGB=slpy)eAe zByt2KA|~0}3|ZPEkXM(UMv){8K-nAks5({kJ7CEYr&1zcrgtI^SR9VkW-tWiZHaYq zT-e!$zLOTq$VT7OHe2wnOzC@CxP5R=m;lIN>?!?%%^kwVFmy|T?Li6XU)g%Yy&9;GV_pw{;wpZ>BF@fuzk zJ6vYm!s&Ne=0o}39`z+(zixkppI@}{8XI<%cUo-=lHNUSbfr5~+sHl2)d~oozq3sc ziYYndj^(ae%Ums-=2cUF7M1$y!!$lfHKtn(`sCH}689#+CVzk>X_)_Dvt; zqLQ`HO#O~R7gtpyMl%k}kp2U;#ML3px#n%9$k*@e`?DD-)ou5p=lbBXrbkzANXQ?l zyDYE-Tfe8!&#!*74!)wy`a@zVA3gWmF^X5U1em*LM{!y%+Wa2%B+_D8)P%-=lACS# zsMA*i#VqEU`&w0xD=|z962Mn_XcwH>NTO;4=XPgVrvx^=_cb0FL7QrGJs;dsEqNcA zNwcWc%>2kU>b<8gZBdc{t!=bXXoJHa-CHV-4malVF4W;qDEJJ0Wa;^vON@_yuOYlA8 zWqp_%l(?1qenXS5+*7py2WtF|te|O2#0{Ri zM{_ffd_jS%kj%}JNW$-b-(wTA$qbhjaUjOQ{GN?1ll#CSUHg>C%0!!5z0D)}GtUAv z0~}Mf*;VGry~BJLu&*`(Ia?y|RwV^-RAd``1sSnfY0;|9W*e0yGw#fJY>(#d_0YBV z3nW-QTF=*oLWidPJO+-F7=R~7JDBVN^nZq^g#9Pdh=`U|Qu5m75nm@A_QtAyf4tkD~u zbLv%_5~FObm>m*H(zWBan~bxJ5N^seDjt=+VV}+$mj9xwt&0l5nWx4z`0F7a>v!-% zGtN@N<&c(zGD21$LTjZUIsX`Ns! zk?fL|&^mjEUOBYI0jZ@y3d0eX=CE<*wOwz_$Q8Q{bZuJVVhCQ09NX(0 zCWBD zrEAkyZ>r@?=>gnS)BB{4m^YE5B){jwHJG~P$oe>X<%SmBH!R%7o_TFpf?0HVg88Dm zg32fa(p)+uUn0fg;ov6urSr%g%Uv~(+7R6a)Z@&5TWl6DNsCf;m>|NVR&G|Jqwiku zhmJ`o+cyYns<%ZHAu}vD4(zTBM8boSU%G6lwsXHN`HtypugDy@<%2RL!)JGt7cH#j{d8<0>VWvR;YLi2kzzORf#^5}l47QLCc zBYD4nR2#t?kzYzD7h0`3z!b@4l@h-74TSnjkjNKiQDe%m4R`-a_xY%<0#qwF!K z_Za``fT!1}v7I+pi%5m1B<~Qo4NrRYb}XtnlzoahR~fOKw^92hkt5sr1l!2oq%(E4 zzQDt@WF%!fm*JMGQKLJQvDp%_)s{f^^zTT2h<|2m3i}*jT55xr747$jlZ|p&V}p%o z4DEJ_pJrwq2?%y+X*=$WIU~g+jM|#F;eBhoGR~ke>=^ZaQ=ub~e(HqrEYzJyGC6hG z8~V?T6z?h%ooN;9Dk6($Rd089NNSKfl&Y{uwvkQyr8k*y=|6zYz;ITleozoKFM&9J z+huFVg?`VU%Y6K1!woID(#7SojaNHkVEZz%uzGCn-i#uD>?>m5 z%wpVer=M48cKeC}JmbNtjKABGK(qa&Y7s>U&*)lTY8&#ir9|u{{p4&cps;Q;p67fQ zIOah5>US_ONTf^&fK_6c_I;i9^zQHK9d2o3>?+)JCBz-q_?n2D{dmyDa?~n-uc_V2 z8V2AgU3rIQKp9Y9dU(+@UcVoIs&S>?e?RchZrz(iu)bjdM~*~4Q+vUL^3FzdWPv?UbjTr-YKY zBzAvCcK%N5V+R`%ajZGGY{bNz?w1#^X9sB!FLCyE;*2Y+dRMUrrFXP{fl4E&Gv_TE z{NULJooZ@>-dWhi{+(5#c)be;?N(|-{?2{_Tu;e~fiByiPi!_|M;jwpj$pi|sUP@C zaF=?wdDbUHE;Tk9F|brh4!E>BS%;K!NQZ1A4=nXJd~G~t^=2Is>kO`XlVNj99rh4- zr!Qw4?851hQ5S;ar}p)KA?-w~>WyL4XnWVFhavad6R0s`hnOz-M|0jViLS|7cVO*C zDxPDLgPXb-DjjsmSG5@)=c8W00ht4l%r-FKy$=Kmc;LE?$ZD>(VkC3stm+B(ShjJ2 z?0LU&VDMyh8%T?cZyylT&8|Z7=^TzjP0%xK8JeLc}Zt~t=Zw_6TC~w#)Y1H zbW(#ny`Tz#sLPYPm*U-CHo4%c{NzqV!~v^RV^jC+NM0OT6+r5zGdzh9pt&D=8f|U*Lbd+s_qCGYev;G zl4z6?H4-y}@4yUyNAc}8Us%Wwg(Y8Ecln^lH$EQXRg@)XXQiQJv>XH9{hn3 z76iBZ$b^B0A2Jvu?THLq4R4}Wt zUkCRwWJ~s@7I9kd$9AC|$$c=wnyrU$h%{OlwhBT&XOzo-<9O$plXuwFq7P{9&OE_8 z^TpBwepbgbXLKCljCdXg8nKKWk~s8v=4kj`5eDD7;3xBYoW<11#RnzKZbsxDzh)S{zPR>ML4aX1I zc(%cRz@2)CS56t1T%Y%Hm#m(>;Y;iDqYwvz$!vo^J{cuMs#&$Uucya{|EYRIk>1|C z6Xh;1ezw^qBjk-V{W5de29;;}6A_a>ns?=7&{A)!H@kaI%HCvuO(mlQ4Zta>H~1HKVzS9WCCH=9{kC9c zNPm@@q+)k@f*0%1y9#y%A!B_Hgo+g9FOofT<*_F5aph`bJ$WZG`=lsO8E^E;DqfpA zWJ8dY8u1B8-5%!?kgKaxoIqSaKlP>CKsV(HM&65HtlA*vxiaod9sOLXlcSB0c$j;C zR7?VfG=GPeI=!vj%3%F@es+3LzuRIGjl@)1MQ&`4;24F4b9Ok>=-4&t10z}MmIn%z zvwM^Ek)Etm^-&O>`W;u&l-LLeH^78^X-{=Nm zqc{04@jaaTFc>wX>XE&Gn6iyZI%)rZh%HM5s5QOrTr!C^;RhZC5bAgC>LKU5O}9pr z*lp-SiTPnku>tEwlF7p}S2q#~VA_{90v!3Jl-u@{h+#-8=-+|M&V9{`#DiWMmx^qB zojC^swXv4{gF)qqzNzMVc!JYwcww3V-p@8qfPuPQE^e%|=bHDeYtmql#HnD9{}p|F-611077{Xhd#PlT zXAVr2DV%NaJiKy!cwHLzG|E6pT&munP>zfu@FG1NyKF5T@k$(j{w28`3_gEH04gn(ODU9&*IzRfd|F`2XN~%>^*hU* z5tuukJMl;?^`*2JdWP%`|7arCa5>zYo%LFHG!sXB4U&$G`jR}i^fZ!uXjVD44ahCe z!os7OS+m!&OSZ~=z5Mdn=kL&v(pPig=)f~wZR9F81H;9fRJk?VK$!J^{U-6h>jz&F z&QJ|iZ_;m6q-=?MH1{aN`DO>d;9a=Gvp3w_sX<;!Fm(l@i^o|x)9j6gkQzS!y()9L zuYtejel>TjXc?`z_El-&Tm@+?T`xy5hx^hmExdB$Zm$Eker5uYOmeGh4mhK)#OjKj zN)(^6&4q+@D+!EqGncD>eEsT7PVio?(|k)#`>?fuQ}xrdz~tit@#dG}nQN^3rJSFr zXMGQhb4TSb-f(BD+bDvOvva9H(b|R!{>vLIC-O?a3*d+X(>-dnntQ)pxFIq==QpIP z=W1X0T@s&oUAwfHJS7($sjB=)Izc#9`WuN9+<9zo?#aW5mp|57^M3+^q~ciJam^MkeMVYq(<RR9-d`bxnG%=}uXXQX9ly<*A2la<=;XAgSk$t~nsd3O55Og`_u6u$o2R+Tc#_ z8KqsniX+PJxOofPN`kz$_$f$aaC{k?XilH{Q8=meH|+6$FLeasT_E8;DBYh#b>-gI z>gcSM4X({#sfzcM1fgo*A$-J2GS|wXe3zAy63G3Yw;7_nY7e06k*wHfdtUhyb01*2 zW@gj~RA}GJr~0@d&X_8eLjqw|m^l(zZKbV~n4Vs32$gr$NzsN&v-jwN1Ge-X4lY?( zrKJtm7j~6@ym!`BHSfGf6%ml?TJyGY0hT{Rh60#qS^OmQ-m;KMu+kKY_i>|mr+!TW z!&C@X5*4pn3vf&mH>k~mTR3+Jem>+@H3zDppv^7`uddi;ODsd~(L-K$agr%6gC@Q# z{!w;DPD=j{{@i|p>Hbn5b8KP-y{~bONXx7?f|Or>cD#`IyZniiH)yfqY9V>v=87tk z%pa3lBj8%tN?X?kr+L5I*Z$6m^V)#UmnVy4l-jGgW`D^$ua}n6Ich+}s41P(Q5pUZ zpb1{Ky5sL2?yd0T+MJ)h$?yJy6}d)$B{)451AvHImO10k(1RV77bf|fKZ zn&0tm_nP9(`xH`1n+siM&VhJ9=JGs53UH%dHMWn;hVpS~V`KO2g0|c|WN)9_nzk8# zEd)}wbXZC+bVkngD5O?i9Amqr0p|#)iCn=ow&C~hy`u^svWIN5(~cm8=29cRuj&i*T}4|@-f+FC8eVlcNaUmUTyO5a z!nQsTb;)7RFWvA{^r$ztTX{6~#;7hdD#_eDG9);(dcVPjCr_3(`(u5l#1@c)wZ*8WxQl7O#l#WmK4sAqsi(iankb`2900Mw=Zh zE!*(!NcRQm3{NLd$zAHZ3NrWuWTEBvYyd6A=KWw<2if_PS zm)<<8GLyUXYZAHG_5LuCRp~8%O_doctXZ?epp~6ldxvT_S-P0(@o=LaYY7IE+Sl6P z63tPILnhlfXYWSAFMVem`z2!qj)`R7oHq;9-UvU0F*?Uabjw%)X!zjmt~nTv`t&(G zU{SNyg}&5kPTQFT6I9*t0$?=aIzIve&UVfLOuyXw8Z}lydfFGsT=^J(BO;;tL1_Ub zT==;Y73^t$)dO(ErC1}7w0oomX$dCd&Nj|)0R;^OJ&Dyv%0TyUyBnn?elk5XswoD3n-oi(|q2u zmMMhU9XV_6s?Q4`cC8VAd??t3>(raKF)h6Z4>|-~^#)pWroBB5me5SLF}A+RxxCNH zD{xGG&?|TRELNVcGnQ2^M(HjO4BYgj92*+t^wf)C$PCJTFdxt4jTlwj7+QJemKjL2 zCA@hV*Hi$B$<%FRucZ&=!NAxn!~gMsrB24FA>qT{YIdNk@09_6s|^On)YeHpnQg3% z8gJ>rctB=93nwI-R|0J6`bjq>Cr(KUM$5AIdiFG*N=@1QwQn4o$)M6uKUc_7ggTg^6`(rYbYRi_my;TwoI z=irc2oIb9{DSNtqPoo6|sH?H5Cyr&NBy`wkM&YD%xk_`jkvNOYWN%Pul}k!Jkds(E z&Vz#jHA3B%jJf7H)dqKM<;zI@!33Z268!bRUym3yr>;P0%??P5s%YKj5Lqov2yBs2 zQ1kX26*cn3z@H_K-fh%TtDHMwyG6LMG%gH8A6XRjrO!=&LGikkg{-8b=a;e?w|l+8 zupw`UyM9N$nZijaQMn?|+^Df|TvxWiTbEHqI-+VMwc}Bc!=dB|IQJ>B^*g_Kg6o}o z!YyXi@CQ8Bloi%Uls3uxP5St>RMxCE0>Y^gKe3Y^g@4lq*F)a^PJ)EM+y{)Gt&p;M zQ@K5TD9?d^%+9Eyq|8ri#ID!(eb2Lvm*>peh1QGypxX>$&|FhKVp*`Yrh=qP`dt*Q zV7KL|cjmXM=>& zLnc=K4(6oPP`nAE71>4_i?B%b2KfsjnG%OC5qN@sfSe9Fql&8}yBG7EL$UXPq8eMV z@F~C~`rkJ!V0h+yYoj_v#&)0Zy#QAAr8}(B7m1g?XH7x27Z-liJCNc`yD&?ZUl%QgqBVQJAX;4_ecX!F7-v1ZhYM5=tfObE0Pm7Lid z97_7Q1~VN##B8%k3#~n>s1;+cb`{A}ec0-MjRb10B^>|V8?7@>ummysL7ia1a@mq~ z_sVG-kw>ZZWXsz17jmS|>$*6CZV|%b<($af9pbQet@M21^-|KfMVxKRP z85LFSM5yQ~Io7CknAy&{M;VP%*8drG5b2h=6D3c-@|EFPu|w*1;i*y4JZF^44*PR| z&4Ici9jj*0^0Va}yhqWX903pDo?e{S8$v&Cf0xb^NWaGRRzsz-z0k(G;L;EK0{290 zTfN~{$*RY$N~7-8R-G>^6l$|R*b@0W2YQOSm0us|m3y}NP&zXrfQ#hyWo!_QeJlHS z75(Z~mM9O{l6&;?4Pyp3$$ZYeGo!M9PR$M>j9l!zDH!i4;A-Ax4{foY0Nb!W5)DLR zC*&T*$((h4AFqX#k%$gtB(Oz!_oDT%jnajCeP^x|EPhqBvL@Gaoz9V=1 zIVzLp-eFFD(lX+v_b{c#HS*_w&U_aXpr8xo_eeNvO^8#sQSdLv3MotVrr`XMNDHt* z(BnLFK)iCNvNzuAzQryKTIrd4Nkq>2r|vem*PKySc=N|=!vUCQj>^d^RA){cU-nwv zJA4N=T&;qN4R34{F$eNR6@st5BhASZ*liB_;1`JD_b8J5~mtkVC6OF?X^ZVFrq%(j-$$*K#Z!-e6UTL#b|VZtpK9(=7sZ^hU5;QGZ#g>?XL#O7__E2m4g6?g zTa~~-+mL%l^=;nZnw@FmS+4t9?JE3*`K9jU#)rIz*QMv$$DnVo5wIHPj7YzEPN9#p z4aU&a0+6AIO60DBhgAu;dgJs!3;jhRM>!<`h3R*(r@z=g?|GJg37xm4WV6Keh&uQLmap(py1=f^d^WH#%2@ouLln53%&vlUP;XEy75#Y#?UbMIj&TO*K2xI5EbwM6erCB zDVgDca`!@(icVFVQyr?R12rH_pUyK9925D@RZvG7)oT8ZJ(@9OR7Ze|+1tobOJB`f z>4DD5BoU*`-8*9MiG+C%!kVDFV7&TL!Cx`b(NdyWpd_kSr>u3ZgA7(*pM{7^0u5r7uKqZGgx)Ozj6e8 zw*WLX2lsoDS&SRt(ri5QNEfyT3Z-J|91EG>}+6l@52qN2TXbHNv zfe)$IS<1OfwoVo*1>C6lJumCi^Y+>i|JThoNnCDB7C500M~;B0$Jtq5>O$HQp+8aa zfo`%5I=Qr&&@5oI%M;8?O;5|-4zvwiB}sVFu@2rSi?Y z&nazP#r2vuwMd%(0HTpCkvs7tDJ4;1*pM+}=lYPG83z=@c82rj!}TXEGe>vslZp?B5B z=bbnqd}Lqn{>sh6y65+x`h%y-5v&}SE!l2=7~ryv>MrT^5M&aU$sIq64ri>I8YFJj zZNO?0(SZ+!dYf8+pjB2m6+)lnx99Coa-`2eoidrWIirgIsES#$dt;e=85=DvE%DDyY&U%YpMe_8lO=y#7_Lq|))#@|y2U=8h4!+M z*uHhKR(6r_Gp@#75=9=<`$nmdLkQB)RDhZ>l z^A|LL2Fl)s-#_Cr6u#kD&flTMCVuCmu*s1+9~!mKl$jbp1`2}J`4Ot%O3HoxoSlWz zp2WS`GA#iQ%yaqy!MpEy=AO=W?@?A3ji+X3;EU6mlBXd*D}QHHgwA&x&4MR?HRnK; z;#aZ?Iw5@C-Dc1M=c!lmWa@n_@gE69eJO{`+`lu1mRL495|e7y+1sejmuJDGsmGOV zR4GZ#o2_tL)1D(y!Z=rf{UeXQeg{?y2CgM+mK>W}jB1K!n?;4({vG#QTJOUwd1h3R zNeOeZvq(O(_dKza zs0;76zF`rkGtz5pNW%f3Q$iI=4PUTc@^sGiJSxxRDUs&7rk*%R1$l{U1cPocV@AUG zcGWZ6(2)8jhqzhOb{3RDke54A=p`!yNnAz<)-yU3)xLXibhLL8)&*{VF7JbNRsAhr zXC(>b#Md0G>vKyR5Ve>3RjCPyq%5iPiQ{-3bBAnVq5V3uG0u!@e)ijIP82-fwW{Iy z((VFk$=&40y)Z`C9PB$9<-B)xvBRF7eN@rRn_?e$%bWw5f@@lbA4~00s<9pK8*e~L z+&gJ6sCTbmX`U=_OE|NC>W$+EV@*m%qIllqXto&)*=BxZy~D>x!JK;{j7i=gJlWgv zIMTB%-2kXP_o(6rs^C>`@H;pqQX;(EZ~cYKAm0U8R4}fZ11&f^YfWc~No%q?$r3l$ zH8wT@1*P`eK!RpP7`dldWYS~Co|J-GtF0=JtiPH!{Aypad`RAZz=koSbP(v{?hU(S zzGhG;(wcKdjk%eZ=TSMZDw098p!`UE2Le!)g*x?6Fs|!*0cS`U&vSjL)M@3XQ^MPt zk)e4oOlOwd48SUJsd|&jBf~KzgZMx94s^N-XW3>X!RGpS%sSWV7o1<}6!VMkDKn5} zc0@CvQcyk!%4=+YJnL-xlptBlR|e-J8l+qwEY6;@>}|h&8{00yJ=+NCE$Q>-ZI-RL z*Y9AFX>^8?bx)N}vkeSYBG%w~?q^yO;@+4^b0?|-*qV@c*M!@Ht)rgTpICIHW zIo#J&Uuyb*5?!%n^on_d>4-Gi=K#0T(~@UFWLxYG;3^7 z@ScX2DD2y9AUo5O1)1(X$Wcp~Z4ZVvUpW1+aD3r^jGLvHDsP#iUS2B6w8YEMvjgd# zRsqIg&ac!qRFT=zPcZ_KkMy9=3O}oeTw{Z1R~slLYgej-g;j$oZS>`ah%Yf&sDZqi zH3uYvJ2pnJK(2^Vri9-;wSa{mc$w;*TW&PiTptn)3^fO$fP5&m6PLSiMaDvDCtuh| zM&UDmj`I2*_JZWpl$x&i0YRvnV!=Gq(F!FSaMtYE+tA;>NI3KAl&JlNg&|k&Nw3>; zu0`jbX-UWr_~Ka@k~8f9>Od90l99b2udKf3^#;n#e;MVEpL&N#@@y2m+$@`_G;g>s z)lG80joJsjM^VkHZ&{-rJl`1=;Z6j2%+-eXmvd0PA^XcpRF8$OfqFmN-2G0j97|&F zIRH$%C(;~Iv7lbwA*>SJpLZ*)I*-_ zRgHtKv<*20SOvQc?0&K_4$#ruyUKG4a9?8se=#$6DUtY*(TZhM4NqpCW!pd`bH{HG z`dI^M;U`xFDMv8s>gJ3N-n@*CNxB&Dyy^{bpKId)68<8H(g{PiBB6~aN$~_0y3#)6jIn-E73wb#tMW&^2mn=Y7j-=`B`zfF9l3Wdl@a=NzIde)HGwGqA$2!LAR(|%BjU}r0heo0 zJ2!7J3WaJH@jI(fHPtsIlSI>cX~p``e`nO)yN)V^sVkGb6-CS6xyb4SugW8FA6Fa6 zME;u+p7QjRsN#u3rB)k{4w8Y|AtbLg&ku%>FD(98J=9yzxn`W=+pAHl&}#@Kc?!9v z2Yn^s*v&T7+l())IPW`(O@h$jp1sKjOf-Y|E%aA@&!G3pYH2IUvFCnsNcmf9e*_#) z_@h$7_mp`B>&Pz2+kaJ|YD+KZ2#Ie?t^#K`$8L=PjtpOBN+7KACSPR_pmoYNo8nD% zg5@Ks4_G&>OgOpAIRdzvGj&S{12BUefi0y5ca3er4wSLB6$$N{ddTYEo1qrtl`-Ug zqb0U?g;DO?C3rgyfAqo2v!A3$Je8$`bfG?|oGx{!GN$ zy5I&%|Jy31tNs3JfpLH3yt!aqzxAb3BHI#2#^|odv%ri{bvSzyOnT<}e{A^PGa9>Y zJ78swdPjYh7P2xnqhMN%0OumQ%$CrVyNxJQ#%X2mDZQ5GXH;lUHq#ZH9V9kKu-(tr z9Dp~^#C0ORgb&Y~?_h!T&3CvGGuvxD)Bx;Vb*QGAxTp2tb4ZN~(-Pvk+*Kk15cf3) zD#A2MXFYa^sBQx}pV>F-e{o1-&l^d_`L0{B9x_F`w-Y2dqgE^D8+TECkDOxc_9;=7 zr{9H3bU8U;5WY)A%Nt2mcb=sBoy#fB{B4L9#%9hAhqr{8?9Hp0FYN}qkIg#TxLm;c zYsX9FdG7fxC=Lq*Sm$)Z`wtS8zoVLW>g0H=5%T8<6wBPwf4~#qf7sXAmP|D8s5JsF z@UnFqB?dC~!9#reGB#)z;iUQfZsl&C+H5t|KgrE^7wMCqpN4Qwx8zzy&6E76-I zqQ13v#Dd?dRMqcbQ*E}{4TmLdDBFl;Wqz>QW+2!(J5Snep2m$9ee1o0w6u{*!rPdn z>ol@{ICXQ>yy0Kge-ynJV#E4Ub%FY9Z~hs7RJBpN{j=vP3@V$n#NEmK$92PEa=Uen zQ4;90y7@3^Ls;eafL(EJ22U=G=UnyZ2R_%f?joI5Tb81nz`EZ zE|`-uIys{uh$Ckq-vt#h#jR>~)V)+ZDkV-y z>ThiNrv!p*f3vF#m!}a{%BN-2{HjAZes&AVcG3{*O_)_U5GCAw60?osbQMU^g zGgn{Df18_%HzFlUC{qJ!1SG<3DN%$eqc2{+8`yZZL1B{j&MqYrgJQN(!{y5ePPc#U zcsVgLZRz`S4iJ=D}j1F_Jd_Oi`WL72p$>^$gFOll7JFI1Oo z3H`Qq{H_KPFle^H=94c5)@68#+y_rt7n!q)e^=P=8XfcFAW{_=0p{zVVVpd1qJ9ZQ+G}|VWnK!j#ziG{zSI)b=R&QW~ds@i;RZ3v)Yt&79VsUn0DK}~Tj-aN8J0(zI zeNMqZK$Wu1fvYn2f$;JzGc0!nx2UAmo1ztrqm~Hj

nSoO>UT92t|qh{gsi{S9~g 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

    EobXq+TvjWy65 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 -- Gitee