diff --git a/CHANGELOG b/CHANGELOG index ff21f07f64ef9aa0a6dd1ce48abc8591b01a9773..78a85899e4b4f16049551d53e33f1f027c770f71 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,31 @@ +XEngine_Storage V3.9.0.1001 + +添加:用户支持单独限速模式了 +更新:匹配XEngine V7.42版本 +修改:限制模式是逻辑型了 +修改:上传会话字段ullFSize修改为ullRWLen +修改:P2P搜索文件可以不使用数据库了 +修改:P2P文件搜索必须设置文件HASH值 +修改:本地文件没有找到后会返回错误了 +优化:删除没有使用的APIHelp_Distributed_UPStorage函数参数 +优化:Session_UPStroage_Close函数代码 +修正:P2P没有查找没有返回bucket名称的问题 +删除:错误重试配置 +删除:没有使用的bucket选择模式代码 + +added:support user speed limit +update:match xengine v7.42 +modify:limit mode is boolean +modify:up session changed ullRWLen from ullFSize +modify:p2p search file can be not enable database +modify:p2p file search have to setting hash value +modify:local file search not found file that reply error code +improved:delete unused parament for APIHelp_Distributed_UPStorage function +improved:Session_UPStroage_Close function code +fixed:p2p not reply bucket name +delete:error try time configrue +delete:unused select bucket mode code +====================================================================================== XEngine_Storage V3.8.0.1001 更新:匹配了xengine v7.38 diff --git a/README.en.md b/README.en.md index b290d10965afb556502b41eda543eb384f8b2ad5..16851889eee32f2bb471c48497428ef35c34d159 100644 --- a/README.en.md +++ b/README.en.md @@ -87,6 +87,10 @@ P2P distributed download is the same as the hyper-threaded download of other dow - XEngine_APPClient client code dir - XEngine_SQLFile database sql file +## Example +UPLoad File: curl -d 'hello xengine' -X POST "http://192.168.1.8:5102/api?filename=hello.txt&storeagekey=storagekey1" +Download File: curl -X GET "http://192.168.1.8:5101/storagekey1/hello.txt" + ## now task P2P WAN file search and download support diff --git a/README.md b/README.md index 49fbc57b9bfe626ffb13548a8c5822603f54ac20..7df8c70e00d832c1884846e354586ae179d168fc 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,9 @@ make FLAGS=CleanAll 清理编译 - XEngine_APPClient 客户端演示代码 - XEngine_SQLFile 数据库脚本文件 +## 示例 +上传文件: curl -d 'hello xengine' -X POST "http://192.168.1.8:5102/api?filename=hello.txt&storeagekey=storagekey1" +下载文件: curl -X GET "http://192.168.1.8:5101/storagekey1/hello.txt" ## 秒传实现 秒传的实现不是靠服务器实现的,而是靠客户端实现的. @@ -88,8 +91,8 @@ P2P分布式下载已经支持,不过目前只能在局域网中,暂时不支持 P2P分布式下载与其他下载工具的超线程下载一样,原理是使用HTTP RANGE字段实现.各位可以通过libcurl等库实现此功能. ## 当前任务 -管理接口调试 本地网络接口删除 +上传目录控制,防止超过权限的上传动作 客户端连接数限制 P2P广域网文件查找与下载支持 分布式数据库存储 diff --git a/XEngine_APPClient/APPClient_Download/APPClient_Download.cpp b/XEngine_APPClient/APPClient_Download/APPClient_Download.cpp index 866ecfde0e8cdd55e1bf5a31b3c71fe7ec7b6ac6..4994a26a453d89a895c3fe28b323194b39a10b54 100644 --- a/XEngine_APPClient/APPClient_Download/APPClient_Download.cpp +++ b/XEngine_APPClient/APPClient_Download/APPClient_Download.cpp @@ -79,7 +79,7 @@ void P2PParse_List(LPCTSTR lpszMsgBuffer, int nMsgLen, list* pStl_ //创建分布式文件下载器 typedef struct { - XNETHANDLE xhToken; //下载句柄 + XHANDLE xhToken; //下载句柄 __int64x nPosStart; __int64x nPosEnd; }P2PFILE_PIECE; @@ -115,8 +115,8 @@ void P2PFile_Create(list* pStl_ListFile, LPCTSTR lpszFile) nPos += nPiece; _stprintf(tszRange, _T("%lld-%lld"), pSt_P2PFile[i].nPosStart, pSt_P2PFile[i].nPosEnd); } - - if (!DownLoad_Http_Create(&pSt_P2PFile[i].xhToken, tszDLUrl, lpszFile, tszRange, NULL, NULL, NULL)) + pSt_P2PFile[i].xhToken = DownLoad_Http_Create(tszDLUrl, lpszFile, tszRange, NULL, NULL, NULL); + if (NULL == pSt_P2PFile[i].xhToken) { printf("create download task is failed:%X\n", Download_GetLastError()); } @@ -135,7 +135,7 @@ void P2PFile_Create(list* pStl_ListFile, LPCTSTR lpszFile) { bComplete = FALSE; } - printf("DLToken:%lld DLTotal:%lf DLNow:%lf DLStatus:%d\n", pSt_P2PFile[i].xhToken, st_TaskInfo.dlTotal, st_TaskInfo.dlNow, st_TaskInfo.en_DownStatus); + printf("DLToken:%p DLTotal:%lf DLNow:%lf DLStatus:%d\n", pSt_P2PFile[i].xhToken, st_TaskInfo.dlTotal, st_TaskInfo.dlNow, st_TaskInfo.en_DownStatus); } if (bComplete) { @@ -160,7 +160,7 @@ int main() #endif int nHTTPCode = 0; - int nBodyLen = 2048; + int nBodyLen = 0; TCHAR *ptszMsgBody = NULL; //请求分布式存储文件所有位置 LPCTSTR lpszUrl = _T("http://127.0.0.1:5100/Api/Manage/Query"); @@ -169,9 +169,10 @@ int main() Json::Value st_JsonRoot; st_JsonRoot["nMode"] = 1; //使用P2P下载 st_JsonRoot["lpszBuckKey"] = "storagekey2"; - st_JsonRoot["lpszFileName"] = "qq.exe"; + //st_JsonRoot["lpszFileName"] = "qq.exe"; + st_JsonRoot["lpszFileHash"] = "D41D8CD98F00B204E9801998ECF8427E"; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBody, &nBodyLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBody, &nBodyLen)) { return -1; } diff --git a/XEngine_APPClient/APPClient_RestApi/APPClient_RestApi.cpp b/XEngine_APPClient/APPClient_RestApi/APPClient_RestApi.cpp index 30111aa209711daa36151c7c675ef9fc958efeae..0949dcd468eefd8730737f183a6c55dd02763a05 100644 --- a/XEngine_APPClient/APPClient_RestApi/APPClient_RestApi.cpp +++ b/XEngine_APPClient/APPClient_RestApi/APPClient_RestApi.cpp @@ -38,7 +38,7 @@ void API_Manage_Query() st_JsonRoot["lpszTimeEnd"]; st_JsonRoot["lpszBuckKey"] = "storagekey2"; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Query:%lX\n", APIHelp_GetLastError()); return; @@ -66,7 +66,7 @@ void API_Manage_Insert() st_JsonRoot["List"] = st_JsonArray; st_JsonRoot["Count"] = 1; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Insert:%lX\n", APIHelp_GetLastError()); return; @@ -91,7 +91,7 @@ void API_Manage_Delete() st_JsonRoot["List"] = st_JsonArray; st_JsonRoot["Count"] = 1; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Delete:%lX\n", APIHelp_GetLastError()); return; @@ -111,7 +111,7 @@ void API_Manage_Dir() st_JsonRoot["lpszBuckKey"] = "storagekey1"; st_JsonRoot["lpszUserDir"] = "user"; st_JsonRoot["nOPerator"] = 1; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Dir:%lX\n", APIHelp_GetLastError()); return; @@ -123,7 +123,7 @@ void API_Manage_Dir() st_JsonRoot["lpszBuckKey"] = "storagekey1"; st_JsonRoot["lpszUserDir"]; st_JsonRoot["nOPerator"] = 0; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Dir:%lX\n", APIHelp_GetLastError()); return; @@ -135,7 +135,7 @@ void API_Manage_Dir() st_JsonRoot["lpszBuckKey"] = "storagekey1"; st_JsonRoot["lpszUserDir"] = "user"; st_JsonRoot["nOPerator"] = 2; - if (!APIHelp_HttpRequest_Post(lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Dir:%lX\n", APIHelp_GetLastError()); return; @@ -150,7 +150,7 @@ void API_Manage_Task() int nLen = 0; int nCode = 0; TCHAR* ptszMsgBuffer = NULL; - if (!APIHelp_HttpRequest_Post(lpszUrl, NULL, &nCode, &ptszMsgBuffer, &nLen)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, NULL, &nCode, &ptszMsgBuffer, &nLen)) { printf("API_Manage_Task:%lX\n", APIHelp_GetLastError()); return; diff --git a/XEngine_APPClient/APPClient_UPDownload/APPClient_UPDownload.cpp b/XEngine_APPClient/APPClient_UPDownload/APPClient_UPDownload.cpp index 295897a55b3026a17dc7d4bb1f5966ae44cad78f..9279ac42987fc27d006931d1dfb6ea89ae5cbf60 100644 --- a/XEngine_APPClient/APPClient_UPDownload/APPClient_UPDownload.cpp +++ b/XEngine_APPClient/APPClient_UPDownload/APPClient_UPDownload.cpp @@ -32,7 +32,7 @@ using namespace std; //上传文件 void File_UPLoad() { - LPCTSTR lpszUrl = _T("http://192.168.1.8:5102/2.txt"); + LPCTSTR lpszUrl = _T("http://127.0.0.1:5102/api?filename=newfile4.txt&storeagekey=storagekey2"); int nLen = 0; int nCode = 0; TCHAR* ptszMsgBuffer = NULL; @@ -48,7 +48,7 @@ void File_UPLoad() OPenSsl_Help_BasicEncoder("123123aa", "123123", tszBaseBuffer); _stprintf(tszHdrBuffer, _T("Range: bytes=0-5/10\r\nAuthorization: %s\r\n"), tszBaseBuffer); - if (!APIHelp_HttpRequest_Post(lpszUrl, lpszMsgBuffer, &nCode, &ptszMsgBuffer, &nLen, tszHdrBuffer)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, lpszMsgBuffer, &nCode, &ptszMsgBuffer, &nLen, tszHdrBuffer)) { printf("upload failed:%lX\n", APIHelp_GetLastError()); return; @@ -66,9 +66,10 @@ void File_UPLoad() printf("upload:%d\n", nCode); BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); //断点续传必须指定storagekey + nLen = 0; memset(tszHdrBuffer, '\0', MAX_PATH); _stprintf(tszHdrBuffer, _T("Range: bytes=5-9/10\r\nAuthorization: %s\r\nStorageKey: %s\r\n"), tszBaseBuffer, tszKeyBuffer); - if (!APIHelp_HttpRequest_Post(lpszUrl, lpszMsgBuffer2, &nCode, &ptszMsgBuffer, &nLen, tszHdrBuffer)) + if (!APIHelp_HttpRequest_Custom(_T("POST"), lpszUrl, lpszMsgBuffer2, &nCode, &ptszMsgBuffer, &nLen, tszHdrBuffer)) { printf("upload failed:%lX\n", APIHelp_GetLastError()); return; @@ -79,10 +80,9 @@ void File_UPLoad() //下载文件 void File_Download() { - LPCTSTR lpszUrl = _T("http://192.168.1.8:5101/storagekey2/2.txt"); + LPCTSTR lpszUrl = _T("http://192.168.1.8:5101/storagekey2/newfile4.txt"); int nLen = 0; - int nCode = 0; TCHAR* ptszMsgBuffer = NULL; TCHAR tszBaseBuffer[128]; TCHAR tszHdrBuffer[MAX_PATH]; @@ -92,7 +92,7 @@ void File_Download() OPenSsl_Help_BasicEncoder("123123aa", "123123", tszBaseBuffer); _stprintf(tszHdrBuffer, _T("Range: bytes=0-5\r\nAuthorization: %s\r\n"), tszBaseBuffer); - if (!APIHelp_HttpRequest_Get(lpszUrl, &ptszMsgBuffer, &nLen, &nCode, tszHdrBuffer)) + if (!APIHelp_HttpRequest_Custom(_T("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nLen, tszHdrBuffer)) { printf("download failed:%lX\n", APIHelp_GetLastError()); return; @@ -102,7 +102,7 @@ void File_Download() memset(tszHdrBuffer, '\0', MAX_PATH); _stprintf(tszHdrBuffer, _T("Range: bytes=5-10\r\nAuthorization: %s\r\n"), tszBaseBuffer); - if (!APIHelp_HttpRequest_Get(lpszUrl, &ptszMsgBuffer, &nLen, &nCode, tszHdrBuffer)) + if (!APIHelp_HttpRequest_Custom(_T("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nLen, tszHdrBuffer)) { printf("download failed:%lX\n", APIHelp_GetLastError()); return; diff --git a/XEngine_APPClient/VSCopy_x86.bat b/XEngine_APPClient/VSCopy_x86.bat new file mode 100644 index 0000000000000000000000000000000000000000..6cf246ab19467e15508502654232ede94af2e635 --- /dev/null +++ b/XEngine_APPClient/VSCopy_x86.bat @@ -0,0 +1,12 @@ +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_OPenSsl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_APIHelp.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_SystemSdk\XEngine_SystemApi.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_Download\XEngine_Download.dll" "./" + +copy /y "%XEngine_Lib32%\XEngine_HelpComponents\zlib1.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libcrypto-3.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libssl-3.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\libcurl.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_LibEx\nghttp2.dll" "./" \ No newline at end of file diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index ef5d8010fc44b9f88ec20f10e359f4086e2afaa2..241c63b77f9e00ad4db7a4bf4017c6620c453bb4 100644 Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 0f5f0f2dea98d4c5d591bb111fe807f933c4a387..4eb8d762d6ab3a6b6f008c2a6c1482e328b91812 100644 Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp index 22ee768fd119cd06bf00b23d47d25789eb7f9b8d..f99df564791b7e09f5a1bcfb23d03c893e805dcd 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.cpp @@ -282,5 +282,73 @@ BOOL CAPIHelp_Api::APIHelp_Api_GetIPInfo(LPCTSTR lpszMsgBuffer, int nMsgLen, XEN _tcscpy(pSt_IPAddrInfo->tszIPISP, st_JsonObject["tszIPISP"].asCString()); _tcscpy(pSt_IPAddrInfo->tszIPTime, st_JsonObject["tszIPTime"].asCString()); + return TRUE; +} +/******************************************************************** +函数名称:APIHelp_Api_UrlParse +函数功能:URL参数解析函数 + 参数.一:ppptszList + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要解析的列表 + 参数.二:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.三:ptszFileName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出文件名 + 参数.四:ptszKeyName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出存储的bucket +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CAPIHelp_Api::APIHelp_Api_UrlParse(TCHAR*** ppptszList, int nListCount, TCHAR* ptszFileName, TCHAR* ptszKeyName) +{ + APIHelp_IsErrorOccur = FALSE; + + LPCTSTR lpszHDRFile = _T("filename"); + LPCTSTR lpszHDRKey = _T("storeagekey"); + LPCTSTR lpszHDRPath = _T("path"); + + for (int i = 0; i < nListCount; i++) + { + TCHAR tszKey[MAX_PATH]; + TCHAR tszValue[MAX_PATH]; + + memset(tszKey, '\0', MAX_PATH); + memset(tszValue, '\0', MAX_PATH); + + BaseLib_OperatorString_GetKeyValue((*ppptszList)[i], _T("="), tszKey, tszValue); + + if (0 == _tcsnicmp(lpszHDRFile, tszKey, _tcslen(lpszHDRFile))) + { + //编码格式是utf8,需要转为ansi +#ifdef _MSC_BUILD + TCHAR tszFileName[MAX_PATH]; + memset(tszFileName, '\0', MAX_PATH); + + OPenSsl_Codec_UrlDeCodec(tszValue, _tcslen(tszValue), tszFileName); + + int nLen = _tcslen(tszFileName); + BaseLib_OperatorCharset_UTFToAnsi(tszFileName, ptszFileName, &nLen); +#else + OPenSsl_Codec_UrlDeCodec(tszValue, _tcslen(tszValue), ptszFileName); +#endif + } + else if (0 == _tcsnicmp(lpszHDRKey, tszKey, _tcslen(lpszHDRKey))) + { + _tcscpy(ptszKeyName, tszValue); + } + } return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h index 93609c5967b98edb0a68fd66e1bc3e57d7efd8e4..d1f079926d26b2e62086c480e4a163848dcfd6c1 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Api/APIHelp_Api.h @@ -22,6 +22,7 @@ public: BOOL APIHelp_Api_RangeFile(int* pInt_SPos, int* pInt_EPos, __int64x* pInt_Count, TCHAR** pptszListHdr, int nHdrCount); BOOL APIHelp_Api_VerHash(LPCTSTR lpszFileHash, TCHAR** pptszListHdr, int nHdrCount); BOOL APIHelp_Api_GetIPInfo(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_IPADDRINFO* pSt_IPAddrInfo); + BOOL APIHelp_Api_UrlParse(TCHAR*** ppptszList, int nListCount, TCHAR* ptszFileName, TCHAR* ptszKeyName); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h b/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h index ffed44de7478cda580571cd77f41245166e8a772..70010c6203a347d49c66b2c8568295c18314082d 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Define.h @@ -97,22 +97,17 @@ extern "C" BOOL APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer, list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode); +extern "C" BOOL APIHelp_Distributed_UPStorage(list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode); /******************************************************************** 函数名称:APIHelp_Distributed_GetPathKey 函数功能:通过BUCKET名称查找对应路径 @@ -260,4 +255,33 @@ extern "C" BOOL APIHelp_Api_VerHash(LPCTSTR lpszFileHash, TCHAR** pptszListHdr, 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL APIHelp_Api_GetIPInfo(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_IPADDRINFO* pSt_IPAddrInfo); \ No newline at end of file +extern "C" BOOL APIHelp_Api_GetIPInfo(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_IPADDRINFO* pSt_IPAddrInfo); +/******************************************************************** +函数名称:APIHelp_Api_UrlParse +函数功能:URL参数解析函数 + 参数.一:ppptszList + In/Out:In + 类型:三级指针 + 可空:N + 意思:输入要解析的列表 + 参数.二:nListCount + In/Out:In + 类型:整数型 + 可空:N + 意思:输入列表个数 + 参数.三:ptszFileName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出文件名 + 参数.四:ptszKeyName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出存储的bucket +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL APIHelp_Api_UrlParse(TCHAR*** ppptszList, int nListCount, TCHAR* ptszFileName, TCHAR* ptszKeyName); \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp index 8b1f94eb4dbb87b97062076b19118a445f769323..1addda39e2e68d93cee268e24b1dcb80a0e293d6 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.cpp @@ -242,22 +242,17 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer, /******************************************************************** 函数名称:APIHelp_Distributed_UPStorage 函数功能:通过分布式存储列表获得一个存储地址 - 参数.一:lpszMsgBuffer - In/Out:In - 类型:常量字符指针 - 可空:N - 意思:输入要解析的URL - 参数.二:pStl_ListBucket + 参数.一:pStl_ListBucket In/Out:In 类型:容器指针 可空:N 意思:输入要解析的列表 - 参数.三:pSt_StorageBucket + 参数.二:pSt_StorageBucket In/Out:Out 类型:数据结构指针 可空:N 意思:输出获取到的可用存储 - 参数.四:nMode + 参数.三:nMode In/Out:In 类型:整数型 可空:N @@ -267,7 +262,7 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer, 意思:是否成功 备注: *********************************************************************/ -BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage(LPCTSTR lpszMsgBuffer, list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode) +BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage(list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode) { APIHelp_IsErrorOccur = FALSE; @@ -278,51 +273,6 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage(LPCTSTR lpszMsgBuffer, return FALSE; } if (4 == nMode) - { - if (!APIHelp_Distributed_DLStorage(lpszMsgBuffer, pStl_ListBucket, pSt_StorageBucket)) - { - return FALSE; - } - //判断目录大小是否正常 - int nListCount = 0; - __int64u nDirCount = 0; //当前目录大小 - CHAR** ppListFile; - - TCHAR tszFilePath[MAX_PATH]; - memset(tszFilePath, '\0', MAX_PATH); - - _tcscpy(tszFilePath, pSt_StorageBucket->tszFilePath); - if (tszFilePath[_tcslen(tszFilePath) - 1] != '*') - { - int nPathType = 0; - BaseLib_OperatorString_GetPath(tszFilePath, &nPathType); - //判断是绝对路径还是相对路径 - if (1 == nPathType) - { - _tcscat(tszFilePath, _T("\\*")); - } - else if (2 == nPathType) - { - _tcscat(tszFilePath, _T("/*")); - } - } - SystemApi_File_EnumFile(tszFilePath, &ppListFile, &nListCount, NULL, NULL, TRUE, 1); - for (int j = 0; j < nListCount; j++) - { - struct _tstat64 st_FStat; - _tstat64(ppListFile[j], &st_FStat); - nDirCount += st_FStat.st_size; - } - BaseLib_OperatorMemory_Free((XPPPMEM)&ppListFile, nListCount); - //如果当前目录大小大于设定的大小. - if (nDirCount >= APIHelp_Distributed_GetSize(pSt_StorageBucket->tszBuckSize)) - { - APIHelp_IsErrorOccur = TRUE; - APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_SIZE; - return FALSE; - } - } - else if (5 == nMode) { BOOL bFound = FALSE; //上传专用,由用户指定 @@ -580,6 +530,7 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_FileListParse(LPCTSTR lpszMsgBuff { pSt_DBFile->st_ProtocolFile.nFileSize = st_JsonArray[i]["nFileSize"].asInt64(); _tcscpy(pSt_DBFile->tszTableName, st_JsonArray[i]["tszTableName"].asCString()); + _tcscpy(pSt_DBFile->tszBuckKey, st_JsonArray[i]["tszBuckKey"].asCString()); _tcscpy(pSt_DBFile->st_ProtocolFile.tszFileUser, st_JsonArray[i]["tszFileUser"].asCString()); _tcscpy(pSt_DBFile->st_ProtocolFile.tszFileHash, st_JsonArray[i]["tszFileHash"].asCString()); _tcscpy(pSt_DBFile->st_ProtocolFile.tszFileName, st_JsonArray[i]["tszFileName"].asCString()); diff --git a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.h b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.h index 195def9059f20eb29e34cfc2ff3afb350d3d71a3..7cb8338314b9061f5992c8e33c2f50bcdab4a8fa 100644 --- a/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.h +++ b/XEngine_Source/StorageModule_APIHelp/APIHelp_Distributed/APIHelp_Distributed.h @@ -21,7 +21,7 @@ public: BOOL APIHelp_Distributed_RandomAddr(list* pStl_ListAddr, TCHAR* ptszAddr, int nMode); BOOL APIHelp_Distributed_FileList(list* pStl_ListParse, XSTORAGECORE_DBFILE*** pppSt_ListPacket, int* pInt_ListCount); BOOL APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer, list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket); - BOOL APIHelp_Distributed_UPStorage(LPCTSTR lpszMsgBuffer, list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode); + BOOL APIHelp_Distributed_UPStorage(list* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode); BOOL APIHelp_Distributed_GetPathKey(list* pStl_ListBucket, LPCTSTR lpszBuckKey, TCHAR* ptszFilePath); protected: BOOL APIHelp_Distributed_FileListParse(LPCTSTR lpszMsgBuffer, int nMsgLen, XSTORAGECORE_DBFILE* pSt_DBFile); diff --git a/XEngine_Source/StorageModule_APIHelp/StorageModule_APIHelp.def b/XEngine_Source/StorageModule_APIHelp/StorageModule_APIHelp.def index 7bbae8d638694a0eb6660a9d57117699a5e67de4..08ba7abb028583784d5590c71379b7da3e76ac4a 100644 --- a/XEngine_Source/StorageModule_APIHelp/StorageModule_APIHelp.def +++ b/XEngine_Source/StorageModule_APIHelp/StorageModule_APIHelp.def @@ -12,4 +12,5 @@ EXPORTS APIHelp_Api_ProxyAuth APIHelp_Api_RangeFile APIHelp_Api_VerHash - APIHelp_Api_GetIPInfo \ No newline at end of file + APIHelp_Api_GetIPInfo + APIHelp_Api_UrlParse \ No newline at end of file diff --git a/XEngine_Source/StorageModule_APIHelp/pch.cpp b/XEngine_Source/StorageModule_APIHelp/pch.cpp index f8c7bce9a98395c8660ce2bb3b61f97c6d29ad23..85b5414abbbc27c947d766124ebbbf9b0ed7dd44 100644 --- a/XEngine_Source/StorageModule_APIHelp/pch.cpp +++ b/XEngine_Source/StorageModule_APIHelp/pch.cpp @@ -43,9 +43,9 @@ extern "C" BOOL APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer, list*pStl_ListBucket, XENGINE_STORAGEBUCKET * pSt_StorageBucket, int nMode) +extern "C" BOOL APIHelp_Distributed_UPStorage(list*pStl_ListBucket, XENGINE_STORAGEBUCKET * pSt_StorageBucket, int nMode) { - return m_APIDistributed.APIHelp_Distributed_UPStorage(lpszMsgBuffer, pStl_ListBucket, pSt_StorageBucket, nMode); + return m_APIDistributed.APIHelp_Distributed_UPStorage(pStl_ListBucket, pSt_StorageBucket, nMode); } extern "C" BOOL APIHelp_Distributed_GetPathKey(list*pStl_ListBucket, LPCTSTR lpszBuckKey, TCHAR * ptszFilePath) { @@ -69,4 +69,8 @@ extern "C" BOOL APIHelp_Api_VerHash(LPCTSTR lpszFileHash, TCHAR * *pptszListHdr, extern "C" BOOL APIHelp_Api_GetIPInfo(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_IPADDRINFO * pSt_IPAddrInfo) { return m_APIHelp.APIHelp_Api_GetIPInfo(lpszMsgBuffer, nMsgLen, pSt_IPAddrInfo); +} +extern "C" BOOL APIHelp_Api_UrlParse(TCHAR * **ppptszList, int nListCount, TCHAR * ptszFileName, TCHAR * ptszKeyName) +{ + return m_APIHelp.APIHelp_Api_UrlParse(ppptszList, nListCount, ptszFileName, ptszKeyName); } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Config/Config_Define.h b/XEngine_Source/StorageModule_Config/Config_Define.h index 92d55fdecc9172e489913d6af2f536055a293e6b..0ffdc069691bc669dc8d5ae2d206ba5f20140cb5 100644 --- a/XEngine_Source/StorageModule_Config/Config_Define.h +++ b/XEngine_Source/StorageModule_Config/Config_Define.h @@ -81,7 +81,7 @@ typedef struct tag_XEngine_ServerConfig }st_XProxy; struct { - int nDLTry; + BOOL bLimitMode; __int64x nMaxUPLoader; __int64x nMaxDNLoader; }st_XLimit; diff --git a/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp b/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp index 777e54692b361edaa54a21a58999668e5c2e0b6c..bd187a240a2aa65c0a1df10a068abeb6020f25bc 100644 --- a/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp +++ b/XEngine_Source/StorageModule_Config/Config_Json/Config_Json.cpp @@ -176,7 +176,7 @@ BOOL CConfig_Json::Config_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVERCONFIG return FALSE; } Json::Value st_JsonXLimit = st_JsonRoot["XLimit"]; - pSt_ServerConfig->st_XLimit.nDLTry = st_JsonXLimit["nDLTry"].asUInt(); + pSt_ServerConfig->st_XLimit.bLimitMode = st_JsonXLimit["bLimitMode"].asBool(); pSt_ServerConfig->st_XLimit.nMaxDNLoader = st_JsonXLimit["nMaxDNLoad"].asInt64(); pSt_ServerConfig->st_XLimit.nMaxUPLoader = st_JsonXLimit["nMaxUPLoad"].asInt64(); diff --git a/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.cpp b/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.cpp index d9a8c4c8bfef80019c0b7787be91e4b9b6b8d640..145d013ee9976c4c3ffabcdbb120288494928d4c 100644 --- a/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.cpp +++ b/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.cpp @@ -360,4 +360,61 @@ BOOL CProtocol_StorageParse::Protocol_StorageParse_ProxyNotify(LPCTSTR lpszMsgBu *pInt_FileSize = st_JsonRoot["nFileSize"].asInt64(); return TRUE; +} +/******************************************************************** +函数名称:Protocol_StorageParse_SpeedLimit +函数功能: + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的内容 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pInt_Code + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出回复值 + 参数.四:pInt_Limit + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出回复的限制 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +BOOL CProtocol_StorageParse::Protocol_StorageParse_SpeedLimit(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_Code, int* pInt_Limit) +{ + Protocol_IsErrorOccur = FALSE; + + if ((NULL == lpszMsgBuffer) || (NULL == pInt_Limit)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_XENGINE_STORAGE_PROTOCOL_PARAMENT; + return FALSE; + } + Json::Value st_JsonRoot; + Json::CharReaderBuilder st_JsonBuild; + Json::CharReader* pSt_JsonReader(st_JsonBuild.newCharReader()); + + JSONCPP_STRING st_JsonError; + //解析JSON + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + _tcslen(lpszMsgBuffer), &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = TRUE; + Protocol_dwErrorCode = ERROR_XENGINE_STORAGE_PROTOCOL_PARSE; + return FALSE; + } + delete pSt_JsonReader; + pSt_JsonReader = NULL; + + *pInt_Code = st_JsonRoot["code"].asInt(); + *pInt_Limit = st_JsonRoot["nLimitSpeed"].asInt(); + return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.h b/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.h index 474c524c623e18dba6d70085c8f44f47723bfc5a..515b4e55787f392e266b4fe5a56fbed99182526a 100644 --- a/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.h +++ b/XEngine_Source/StorageModule_Protocol/Protocol_Parse/Protocol_StorageParse.h @@ -21,4 +21,5 @@ public: BOOL Protocol_StorageParse_ReportFile(LPCTSTR lpszMsgBuffer, int nMsgLen, XSTORAGECORE_DBFILE*** pppSt_DBFile, int* pInt_ListCount); BOOL Protocol_StorageParse_DirOperator(LPCTSTR lpszMsgBuffer, TCHAR* ptszUserDir, TCHAR* ptszBuckKey, int* pInt_Operator); BOOL Protocol_StorageParse_ProxyNotify(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszClientAddr, TCHAR* ptszBuckKey, TCHAR* ptszFileName, TCHAR* ptszFileHash, __int64x* pInt_FileSize); + BOOL Protocol_StorageParse_SpeedLimit(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_Code, int* pInt_Limit); }; diff --git a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def index 711435e851fd04e4ea89b58607bf40464336edc9..1fd3d9ad6431afe0c85f78bc930b8d158c48c81b 100644 --- a/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def +++ b/XEngine_Source/StorageModule_Protocol/StorageModule_Protocol.def @@ -8,6 +8,7 @@ EXPORTS Protocol_StorageParse_QueryFile Protocol_StorageParse_ReportFile Protocol_StorageParse_DirOperator + Protocol_StorageParse_SpeedLimit Protocol_StoragePacket_BasicAuth Protocol_StoragePacket_UPDown diff --git a/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h b/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h index 69818452446fc81d9c6c49d1ddec1cfafe496c40..afd410472c286b790b942d1f9a63d28378574685 100644 --- a/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h +++ b/XEngine_Source/StorageModule_Protocol/StorageProtocol_Define.h @@ -158,6 +158,35 @@ extern "C" BOOL Protocol_StorageParse_ReportFile(LPCTSTR lpszMsgBuffer, int nMsg 备注: *********************************************************************/ extern "C" BOOL Protocol_StorageParse_DirOperator(LPCSTR lpszMsgBuffer, CHAR * ptszUserDir, TCHAR * ptszBuckKey, int* pInt_Operator); +/******************************************************************** +函数名称:Protocol_StorageParse_SpeedLimit +函数功能: + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的内容 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pInt_Code + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出回复值 + 参数.四:pInt_Limit + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出回复的限制 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" BOOL Protocol_StorageParse_SpeedLimit(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_Code, int* pInt_Limit); /************************************************************************/ /* 打包协议导出 */ /************************************************************************/ diff --git a/XEngine_Source/StorageModule_Protocol/pch.cpp b/XEngine_Source/StorageModule_Protocol/pch.cpp index 3a34d1d2f8a38059f0f7c11f700d459329d7a41d..f8a1ae7d0d7dd8bd5de9ba6778b5336c8b63a7ac 100644 --- a/XEngine_Source/StorageModule_Protocol/pch.cpp +++ b/XEngine_Source/StorageModule_Protocol/pch.cpp @@ -45,6 +45,10 @@ extern "C" BOOL Protocol_StorageParse_DirOperator(LPCTSTR lpszMsgBuffer, TCHAR * { return m_StorageParse.Protocol_StorageParse_DirOperator(lpszMsgBuffer, ptszUserDir, ptszBuckKey, pInt_Operator); } +extern "C" BOOL Protocol_StorageParse_SpeedLimit(LPCTSTR lpszMsgBuffer, int nMsgLen, int* pInt_Code, int* pInt_Limit) +{ + return m_StorageParse.Protocol_StorageParse_SpeedLimit(lpszMsgBuffer, nMsgLen, pInt_Code, pInt_Limit); +} /************************************************************************/ /* 打包协议导出 */ /************************************************************************/ diff --git a/XEngine_Source/StorageModule_Session/Session_Define.h b/XEngine_Source/StorageModule_Session/Session_Define.h index 76bc103d67782c26cc8ae555ecd0d17e6bc3259b..d3afc11648620508fbdd074d11e9c727ecf587f7 100644 --- a/XEngine_Source/StorageModule_Session/Session_Define.h +++ b/XEngine_Source/StorageModule_Session/Session_Define.h @@ -20,12 +20,13 @@ typedef struct TCHAR tszFileHash[128]; //文件HASH值 TCHAR tszBuckKey[128]; //BUCKKey __int64x ullCount; //总大小 - __int64x ullRWCount; //读取(写入)总大小 + __int64x ullRWCount; //需要读取(写入)总大小 __int64x ullRWLen; //已经读取(写入)的大小 - __int64x ullFSize; //文件真实大小 __int64x ullPosStart; //开始位置 __int64x ullPosEnd; //结束位置 - int nErrorTime; //错误次数 + + int nLimit; //限制工具 + XHANDLE xhToken; FILE* pSt_File; }SESSION_STORAGEINFO; ////////////////////////////////////////////////////////////////////////// @@ -71,29 +72,29 @@ extern "C" BOOL Session_User_Destory(); 类型:常量字符指针 可空:N 意思:输入要判断的密码 + 参数.三:pInt_Limit + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出获取到的限速 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass); +extern "C" BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass, int* pInt_Limit = NULL); /************************************************************************/ /* 存储会话导出的函数 */ /************************************************************************/ /******************************************************************** 函数名称:Session_DLStroage_Init 函数功能:初始化下载会话管理器 - 参数.一:nTryTime - In/Out:In - 类型:整数型 - 可空:Y - 意思:输入下载错误重试次数 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Session_DLStroage_Init(int nTryTime = 3); +extern "C" BOOL Session_DLStroage_Init(); /******************************************************************** 函数名称:Session_DLStroage_Destory 函数功能:销毁下载管理器 @@ -146,12 +147,17 @@ extern "C" BOOL Session_DLStroage_Destory(); 类型:常量字符指针 可空:Y 意思:文件的HASH值 + 参数.九:xhToken + In/Out:In + 类型:句柄 + 可空:Y + 意思:输入限制器句柄 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x * pInt_Count, __int64x * pInt_LeftCount, int nPosStart = 0, int nPostEnd = 0, LPCTSTR lpszFileHash = NULL); +extern "C" BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x * pInt_Count, __int64x * pInt_LeftCount, int nPosStart = 0, int nPostEnd = 0, LPCTSTR lpszFileHash = NULL, int nLimit = 0, XHANDLE xhToken = NULL); /******************************************************************** 函数名称:Session_DLStroage_GetBuffer 函数功能:获得下载器中指定缓冲区 @@ -221,17 +227,12 @@ extern "C" BOOL Session_DLStroage_GetCount(int* pInt_ListCount); 类型:整数型 可空:N 意思:输入文件位置 - 参数.三:bError - In/Out:In - 类型:逻辑型 - 可空:Y - 意思:是否有由错误引起的 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek, BOOL bError = TRUE); +extern "C" BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek); /******************************************************************** 函数名称:Session_DLStorage_GetAll 函数功能:获取下载池的任务列表 diff --git a/XEngine_Source/StorageModule_Session/Session_Error.h b/XEngine_Source/StorageModule_Session/Session_Error.h index 90eed5d4cb175e9c416b936edadb08f574bfb6ca..0c789f36c165cc6605a4407eca595f34758253e6 100644 --- a/XEngine_Source/StorageModule_Session/Session_Error.h +++ b/XEngine_Source/StorageModule_Session/Session_Error.h @@ -18,5 +18,4 @@ #define ERROR_STORAGE_MODULE_SESSION_OPENFILE 0x0010003 #define ERROR_STORAGE_MODULE_SESSION_NOTFOUND 0x0010004 #define ERROR_STORAGE_MODULE_SESSION_PASSWORD 0x0010005 -#define ERROR_STORAGE_MODULE_SESSION_EMPTY 0x0010006 -#define ERROR_STORAGE_MODULE_SESSION_ERRORTIME 0x0010007 \ No newline at end of file +#define ERROR_STORAGE_MODULE_SESSION_EMPTY 0x0010006 \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.cpp b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.cpp index d432926ce5a445b02637fea1502af44b57cf908e..5fa93a4290d86baf1afafdae20227f22e8455717 100644 --- a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.cpp +++ b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.cpp @@ -23,21 +23,15 @@ CSession_DLStroage::~CSession_DLStroage() /******************************************************************** 函数名称:Session_DLStroage_Init 函数功能:初始化下载会话管理器 - 参数.一:nTryTime - In/Out:In - 类型:整数型 - 可空:Y - 意思:输入下载错误重试次数 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -BOOL CSession_DLStroage::Session_DLStroage_Init(int nTryTime /* = 3 */) +BOOL CSession_DLStroage::Session_DLStroage_Init() { Session_IsErrorOccur = FALSE; - m_nTryTime = nTryTime; return TRUE; } /******************************************************************** @@ -101,12 +95,17 @@ BOOL CSession_DLStroage::Session_DLStroage_Destory() 类型:常量字符指针 可空:Y 意思:文件的HASH值 + 参数.九:xhToken + In/Out:In + 类型:句柄 + 可空:Y + 意思:输入限制器句柄 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -BOOL CSession_DLStroage::Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x* pInt_Count, __int64x* pInt_LeftCount, int nPosStart /* = 0 */, int nPostEnd /* = 0 */, LPCTSTR lpszFileHash /* = NULL */) +BOOL CSession_DLStroage::Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x* pInt_Count, __int64x* pInt_LeftCount, int nPosStart /* = 0 */, int nPostEnd /* = 0 */, LPCTSTR lpszFileHash /* = NULL */, int nLimit /* = 0 */, XHANDLE xhToken /* = NULL */) { Session_IsErrorOccur = FALSE; @@ -149,6 +148,12 @@ BOOL CSession_DLStroage::Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTST { _tcscpy(st_Client.tszFileHash, lpszFileHash); } + //设置限制 + if (nLimit > 0) + { + st_Client.nLimit = nLimit; + st_Client.xhToken = xhToken; + } //填充下载信息 st_Client.pSt_File = _tfopen(lpszFileDir, _T("rb")); if (NULL == st_Client.pSt_File) @@ -329,17 +334,12 @@ BOOL CSession_DLStroage::Session_DLStroage_GetCount(int* pInt_ListCount) 类型:整数型 可空:N 意思:输入文件位置 - 参数.三:bError - In/Out:In - 类型:逻辑型 - 可空:Y - 意思:是否有由错误引起的 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -BOOL CSession_DLStroage::Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek, BOOL bError /* = TRUE */) +BOOL CSession_DLStroage::Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek) { Session_IsErrorOccur = FALSE; @@ -352,21 +352,9 @@ BOOL CSession_DLStroage::Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int n st_Locker.unlock_shared(); return FALSE; } - if (stl_MapIterator->second.nErrorTime > m_nTryTime) - { - Session_IsErrorOccur = TRUE; - Session_dwErrorCode = ERROR_STORAGE_MODULE_SESSION_ERRORTIME; - st_Locker.unlock_shared(); - return FALSE; - } //移动文件指针 fseek(stl_MapIterator->second.pSt_File, nSeek, SEEK_CUR); stl_MapIterator->second.ullRWLen += nSeek; - - if (bError) - { - stl_MapIterator->second.nErrorTime++; - } st_Locker.unlock_shared(); return TRUE; } diff --git a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.h b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.h index ace5a214bdf4162e2c7843a5e94e7fe3ad514275..81c08d7d953354a55a3b87633ead394900154d2b 100644 --- a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.h +++ b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_DLStroage.h @@ -17,13 +17,13 @@ public: CSession_DLStroage(); ~CSession_DLStroage(); public: - BOOL Session_DLStroage_Init(int nTryTime); + BOOL Session_DLStroage_Init(); BOOL Session_DLStroage_Destory(); - BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x* pInt_Count, __int64x* pInt_LeftCount, int nPosStart = 0, int nPostEnd = 0, LPCTSTR lpszFileHash = NULL); + BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x* pInt_Count, __int64x* pInt_LeftCount, int nPosStart = 0, int nPostEnd = 0, LPCTSTR lpszFileHash = NULL, int nLimit = 0, XHANDLE xhToken = NULL); BOOL Session_DLStroage_GetBuffer(LPCTSTR lpszClientAddr, TCHAR* ptszMsgBuffer, int* pInt_MsgLen); BOOL Session_DLStroage_GetInfo(LPCTSTR lpszClientAddr, SESSION_STORAGEINFO* pSt_StorageInfo); BOOL Session_DLStroage_GetCount(int* pInt_ListCount); - BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek, BOOL bError = TRUE); + BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek); BOOL Session_DLStorage_GetAll(SESSION_STORAGEINFO*** pppSt_StorageInfo, int* pInt_ListCount); BOOL Session_DLStroage_Delete(LPCTSTR lpszClientAddr); private: diff --git a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_UPStroage.cpp b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_UPStroage.cpp index 983768cbcac599f25d699c1297845bc3a3f61315..eec0c8a2de7e30a8414e17294af85b6d71cf9e8f 100644 --- a/XEngine_Source/StorageModule_Session/Session_Stroage/Session_UPStroage.cpp +++ b/XEngine_Source/StorageModule_Session/Session_Stroage/Session_UPStroage.cpp @@ -136,6 +136,11 @@ BOOL CSession_UPStroage::Session_UPStroage_Insert(LPCTSTR lpszClientAddr, LPCTST //文件是否存在 if ((m_bResume) && ((0 != nPosStart) || (0 != nPostEnd)) && (0 == _taccess(lpszFileDir, 0))) { + struct _tstat64 st_FStat; + memset(&st_FStat, '\0', sizeof(struct _tstat64)); + _tstat64(st_Client.st_StorageInfo.tszFileDir, &st_FStat); + st_Client.st_StorageInfo.ullRWLen = st_FStat.st_size; + st_Client.st_StorageInfo.pSt_File = _tfopen(lpszFileDir, _T("rb+")); if (NULL == st_Client.st_StorageInfo.pSt_File) { @@ -370,15 +375,8 @@ BOOL CSession_UPStroage::Session_UPStroage_Delete(LPCTSTR lpszClientAddr) { fclose(stl_MapIterator->second.st_StorageInfo.pSt_File); } - if (0 == stl_MapIterator->second.st_StorageInfo.ullFSize) - { - struct _tstat64 st_FStat; - memset(&st_FStat, '\0', sizeof(struct _tstat64)); - _tstat64(stl_MapIterator->second.st_StorageInfo.tszFileDir, &st_FStat); - stl_MapIterator->second.st_StorageInfo.ullFSize = st_FStat.st_size; - } //大小是否足够 - if ((stl_MapIterator->second.st_StorageInfo.ullCount != stl_MapIterator->second.st_StorageInfo.ullFSize) && !m_bResume) + if ((stl_MapIterator->second.st_StorageInfo.ullCount != stl_MapIterator->second.st_StorageInfo.ullRWLen) && !m_bResume) { _tremove(stl_MapIterator->second.st_StorageInfo.tszFileDir); } @@ -404,7 +402,7 @@ BOOL CSession_UPStroage::Session_UPStroage_Close(LPCTSTR lpszClientAddr) { Session_IsErrorOccur = FALSE; - st_Locker.lock(); + st_Locker.lock_shared(); unordered_map::iterator stl_MapIterator = stl_MapStroage.find(lpszClientAddr); if (stl_MapIterator != stl_MapStroage.end()) { @@ -412,11 +410,7 @@ BOOL CSession_UPStroage::Session_UPStroage_Close(LPCTSTR lpszClientAddr) { fclose(stl_MapIterator->second.st_StorageInfo.pSt_File); } - struct _tstat64 st_FStat; - memset(&st_FStat, '\0', sizeof(struct _tstat64)); - _tstat64(stl_MapIterator->second.st_StorageInfo.tszFileDir, &st_FStat); - stl_MapIterator->second.st_StorageInfo.ullFSize = st_FStat.st_size; } - st_Locker.unlock(); + st_Locker.unlock_shared(); return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Session/Session_User/Session_User.cpp b/XEngine_Source/StorageModule_Session/Session_User/Session_User.cpp index 320a58975440f46ff867c9789efeccd313914c9c..eea19b74cea4326383158e9de52cc2887acdc2fa 100644 --- a/XEngine_Source/StorageModule_Session/Session_User/Session_User.cpp +++ b/XEngine_Source/StorageModule_Session/Session_User/Session_User.cpp @@ -70,7 +70,7 @@ BOOL CSession_User::Session_User_Init(LPCTSTR lpszUserFile) SESSION_USERINFO st_UserInfo; memset(&st_UserInfo, '\0', sizeof(SESSION_USERINFO)); - _stscanf(ptszTokStr, _T("%s %s"), st_UserInfo.tszUserName, st_UserInfo.tszUserPass); + _stscanf(ptszTokStr, _T("%s %s %s"), st_UserInfo.tszUserName, st_UserInfo.tszUserPass, st_UserInfo.tszUserLimit); stl_MapUser.insert(make_pair(st_UserInfo.tszUserName, st_UserInfo)); ptszTokStr = _tcstok(NULL, lpszLineStr); @@ -108,12 +108,17 @@ BOOL CSession_User::Session_User_Destory() 类型:常量字符指针 可空:N 意思:输入要判断的密码 + 参数.三:pInt_Limit + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出获取到的限速 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -BOOL CSession_User::Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass) +BOOL CSession_User::Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass, int* pInt_Limit /* = NULL */) { Session_IsErrorOccur = FALSE; @@ -141,6 +146,10 @@ BOOL CSession_User::Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass) st_Locker.unlock_shared(); return FALSE; } + if (NULL != pInt_Limit) + { + *pInt_Limit = _ttoi(stl_MapIterator->second.tszUserLimit); + } st_Locker.unlock_shared(); return TRUE; } \ No newline at end of file diff --git a/XEngine_Source/StorageModule_Session/Session_User/Session_User.h b/XEngine_Source/StorageModule_Session/Session_User/Session_User.h index 9b634b927dac5ff5923ca1a336b3d565df02cced..36ebad96f4d69608ed911492ca2d8730e4b1f113 100644 --- a/XEngine_Source/StorageModule_Session/Session_User/Session_User.h +++ b/XEngine_Source/StorageModule_Session/Session_User/Session_User.h @@ -15,6 +15,7 @@ typedef struct { TCHAR tszUserName[128]; TCHAR tszUserPass[128]; + TCHAR tszUserLimit[128]; }SESSION_USERINFO; class CSession_User @@ -25,7 +26,7 @@ public: public: BOOL Session_User_Init(LPCTSTR lpszUserFile); BOOL Session_User_Destory(); - BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass); + BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass, int* pInt_Limit = NULL); private: shared_mutex st_Locker; private: diff --git a/XEngine_Source/StorageModule_Session/pch.cpp b/XEngine_Source/StorageModule_Session/pch.cpp index 3f718cd799f94cc7c7145d3edce08bc102eeeee9..63a174e5e91cad8d55e4dcddc13f874b5a0cc2b8 100644 --- a/XEngine_Source/StorageModule_Session/pch.cpp +++ b/XEngine_Source/StorageModule_Session/pch.cpp @@ -41,24 +41,24 @@ extern "C" BOOL Session_User_Destory() { return m_User.Session_User_Destory(); } -extern "C" BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass) +extern "C" BOOL Session_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass, int* pInt_Limit) { - return m_User.Session_User_Exist(lpszUser, lpszPass); + return m_User.Session_User_Exist(lpszUser, lpszPass, pInt_Limit); } /************************************************************************/ /* 存储会话导出的函数 */ /************************************************************************/ -extern "C" BOOL Session_DLStroage_Init(int nTryTime) +extern "C" BOOL Session_DLStroage_Init() { - return m_DLStorage.Session_DLStroage_Init(nTryTime); + return m_DLStorage.Session_DLStroage_Init(); } extern "C" BOOL Session_DLStroage_Destory() { return m_DLStorage.Session_DLStroage_Destory(); } -extern "C" BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x * pInt_Count, __int64x * pInt_LeftCount, int nPosStart, int nPostEnd, LPCTSTR lpszFileHash) +extern "C" BOOL Session_DLStroage_Insert(LPCTSTR lpszClientAddr, LPCTSTR lpszBuckKey, LPCTSTR lpszFileDir, __int64x * pInt_Count, __int64x * pInt_LeftCount, int nPosStart, int nPostEnd, LPCTSTR lpszFileHash, int nLimit, XHANDLE xhToken) { - return m_DLStorage.Session_DLStroage_Insert(lpszClientAddr, lpszBuckKey, lpszFileDir, pInt_Count, pInt_LeftCount, nPosStart, nPostEnd, lpszFileHash); + return m_DLStorage.Session_DLStroage_Insert(lpszClientAddr, lpszBuckKey, lpszFileDir, pInt_Count, pInt_LeftCount, nPosStart, nPostEnd, lpszFileHash, nLimit, xhToken); } extern "C" BOOL Session_DLStroage_GetBuffer(LPCTSTR lpszClientAddr, TCHAR * ptszMsgBuffer, int* pInt_MsgLen) { @@ -72,9 +72,9 @@ extern "C" BOOL Session_DLStroage_GetCount(int* pInt_ListCount) { return m_DLStorage.Session_DLStroage_GetCount(pInt_ListCount); } -extern "C" BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek, BOOL bError) +extern "C" BOOL Session_DLStorage_SetSeek(LPCTSTR lpszClientAddr, int nSeek) { - return m_DLStorage.Session_DLStorage_SetSeek(lpszClientAddr, nSeek, bError); + return m_DLStorage.Session_DLStorage_SetSeek(lpszClientAddr, nSeek); } extern "C" BOOL Session_DLStorage_GetAll(SESSION_STORAGEINFO * **pppSt_StorageInfo, int* pInt_ListCount) { diff --git a/XEngine_Source/VSCopy_Debug.bat b/XEngine_Source/VSCopy_Debug.bat index d7d162899fb24aa0fa5d7eb633edf3eef9311d74..0aa8cbe1f0495b90764c0f9a7e6819979c19913b 100644 --- a/XEngine_Source/VSCopy_Debug.bat +++ b/XEngine_Source/VSCopy_Debug.bat @@ -12,4 +12,6 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_APIHelp.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpServer.dll" "./" \ No newline at end of file +copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpServer.dll" "./" + +copy /y "D:\XEngine\XEngine_SourceCode\Debug\libcurl-d.dll" "./" \ No newline at end of file diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp index 5aee61157712356b7f50a106c4801277493e68e4..4dad86e03ec2e1d47678f63320452806533082e5 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Center.cpp @@ -83,7 +83,7 @@ BOOL XEngine_Task_HttpCenter(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int TCHAR* ptszBody = NULL; Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); - APIHelp_HttpRequest_Post(st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); + APIHelp_HttpRequest_Custom(_T("POST"), st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); if (200 != nResponseCode) { st_HDRParam.bIsClose = TRUE; diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp index a98ed28d3eeb72c3676e024e1951f0a14c0cf03e..e662c79a6cf777ac86a253bbc7717e6f9034fe60 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Download.cpp @@ -46,9 +46,23 @@ void CALLBACK XEngine_Download_CBSend(LPCSTR lpszClientAddr, SOCKET hSocket, LPV int nListCount = 0; __int64u nTimeWait = 0; TCHAR tszMsgBuffer[4096]; + SESSION_STORAGEINFO st_StorageInfo; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO)); + Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo); + if (st_ServiceCfg.st_XLimit.bLimitMode && st_StorageInfo.nLimit > 0) + { + __int64u nLimitTime = 0; + Algorithm_Calculation_GetSDFlow(st_StorageInfo.xhToken, &nLimitTime); + if (nLimitTime > st_StorageInfo.nLimit) + { + //当前平均速度大于限制速度,不做处理 + NetCore_TCPXCore_CBSendEx(xhNetDownload, lpszClientAddr, XEngine_Download_CBSend); + return; + } + } if (Session_DLStroage_GetBuffer(lpszClientAddr, tszMsgBuffer, &nMsgLen)) { if (nMsgLen <= 0) @@ -65,7 +79,7 @@ void CALLBACK XEngine_Download_CBSend(LPCSTR lpszClientAddr, SOCKET hSocket, LPV Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo); Protocol_StoragePacket_UPDown(tszProxyStr, &nPLen, st_StorageInfo.tszFileDir, st_StorageInfo.tszBuckKey, st_StorageInfo.tszClientAddr, st_StorageInfo.ullRWCount, TRUE, st_StorageInfo.tszFileHash); - if (APIHelp_HttpRequest_Post(st_ServiceCfg.st_XProxy.st_XProxyPass.tszDLPass, tszProxyStr, &nHttpCode)) + if (APIHelp_HttpRequest_Custom(_T("POST"), st_ServiceCfg.st_XProxy.st_XProxyPass.tszDLPass, tszProxyStr, &nHttpCode)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("下载客户端:%s,请求完成通知返回值:%d,文件:%s,地址:%s"), lpszClientAddr, nHttpCode, st_StorageInfo.tszFileDir, st_ServiceCfg.st_XProxy.st_XProxyPass.tszDLPass); } @@ -80,6 +94,10 @@ void CALLBACK XEngine_Download_CBSend(LPCSTR lpszClientAddr, SOCKET hSocket, LPV } else { + if (st_ServiceCfg.st_XLimit.bLimitMode && st_StorageInfo.nLimit > 0) + { + Algorithm_Calculation_ADDSDFlow(st_StorageInfo.xhToken, nMsgLen); + } XEngine_Task_SendDownload(lpszClientAddr, tszMsgBuffer, nMsgLen); } } @@ -87,16 +105,21 @@ void CALLBACK XEngine_Download_CBSend(LPCSTR lpszClientAddr, SOCKET hSocket, LPV { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,获取用户对应文件内容失败,错误:%lX"), lpszClientAddr, Session_GetLastError()); } - //限速 - Session_DLStroage_GetCount(&nListCount); - Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096); - //WINDOWS下sleep_for精度可能不准 - std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait)); + //限速,如果没有单独限速,默认全局限速 + if (st_ServiceCfg.st_XLimit.bLimitMode && (0 == st_StorageInfo.nLimit)) + { + Session_DLStroage_GetCount(&nListCount); + Algorithm_Calculation_SleepFlow(xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit.nMaxDNLoader, nListCount, 4096); + //WINDOWS下sleep_for精度可能不准 + std::this_thread::sleep_for(std::chrono::microseconds(nTimeWait)); + } } BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, TCHAR** pptszListHdr, int nHdrCount) { int nSDLen = 2048; + int nLimit = 0; + XHANDLE xhLimit = NULL; __int64x ullCount = 0; //总大小 __int64x ullSize = 0; //需要下载大小 TCHAR tszSDBuffer[2048]; @@ -140,11 +163,12 @@ BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in if (_tcslen(st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy) > 0) { int nBLen = 0; + int nCode = 0; int nResponseCode = 0; TCHAR* ptszBody = NULL; Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); - APIHelp_HttpRequest_Post(st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); + APIHelp_HttpRequest_Custom(_T("POST"), st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); if (200 != nResponseCode) { st_HDRParam.bIsClose = TRUE; @@ -155,12 +179,13 @@ BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPDOWNLOAD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,用户验证失败,用户名:%s,密码:%s,错误码:%d,错误内容:%s"), tszUserName, tszUserPass, tszUserPass, nResponseCode, ptszBody); } + Protocol_StorageParse_SpeedLimit(ptszBody, nSDLen, &nCode, &nLimit); BaseLib_OperatorMemory_FreeCStyle((VOID**)&ptszBody); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("下载客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s"), lpszClientAddr, st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszUserName, tszUserPass); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("下载客户端:%s,代理服务:%s 验证通过,用户名:%s,密码:%s,值:%d"), lpszClientAddr, st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszUserName, tszUserPass, nCode); } else { - if (!Session_User_Exist(tszUserName, tszUserPass)) + if (!Session_User_Exist(tszUserName, tszUserPass, &nLimit)) { st_HDRParam.bIsClose = TRUE; st_HDRParam.bAuth = TRUE; @@ -236,8 +261,12 @@ BOOL XEngine_Task_HttpDownload(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in OPenSsl_Api_Digest(tszFileDir, tszHashKey, &nHashLen, TRUE, st_ServiceCfg.st_XStorage.nHashMode); BaseLib_OperatorString_StrToHex((char*)tszHashKey, nHashLen, tszHashStr); BaseLib_OperatorString_GetFileAndPath(tszFileDir, NULL, NULL, NULL, st_HDRParam.tszMimeType); + if (nLimit > 0) + { + xhLimit = Algorithm_Calculation_Create(); + } //插入数据 - if (!Session_DLStroage_Insert(lpszClientAddr, st_StorageBucket.tszBuckKey, tszFileDir, &ullCount, &ullSize, nPosStart, nPosEnd, tszHashStr)) + if (!Session_DLStroage_Insert(lpszClientAddr, st_StorageBucket.tszBuckKey, tszFileDir, &ullCount, &ullSize, nPosStart, nPosEnd, tszHashStr, nLimit, xhLimit)) { st_HDRParam.bIsClose = TRUE; st_HDRParam.nHttpCode = 404; diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h b/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h index acebad343089b9f7f162824081382bd62aa8f5a2..712dca8b0ec8292776eeee6e25e49a5c24d40e67 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h @@ -77,9 +77,9 @@ extern XHANDLE xhNetDownload; extern XHANDLE xhNetUPLoader; extern XHANDLE xhNetCenter; -extern XNETHANDLE xhUPPool; -extern XNETHANDLE xhDLPool; -extern XNETHANDLE xhCTPool; +extern XHANDLE xhUPPool; +extern XHANDLE xhDLPool; +extern XHANDLE xhCTPool; extern XHANDLE xhDLSsl; extern XHANDLE xhUPSsl; diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp index 37c9cc8e151349b4881863561e29b009c81f0074..71959a3e9871ff7538f41912a9d632c45dc80773 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp @@ -190,7 +190,15 @@ BOOL XEngine_Net_CloseClient(LPCTSTR lpszClientAddr, int nLeaveType, int nClient NetCore_TCPXCore_CloseForClientEx(xhNetDownload, lpszClientAddr); SocketOpt_HeartBeat_DeleteAddrEx(xhHBDownload, lpszClientAddr); } - Session_DLStroage_Delete(lpszClientAddr); + SESSION_STORAGEINFO st_StorageInfo; + memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO)); + + if (Session_DLStroage_GetInfo(lpszClientAddr, &st_StorageInfo)) + { + Algorithm_Calculation_Close(st_StorageInfo.xhToken); + Session_DLStroage_Delete(lpszClientAddr); + } + RfcComponents_HttpServer_CloseClinetEx(xhDLHttp, lpszClientAddr); OPenSsl_Server_CloseClientEx(xhDLSsl, lpszClientAddr); } diff --git a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp index f9b9a933704bd737e5310060bed8c64e2c60cb32..941e554d1964a02526611cc862565037ffc6e6a0 100644 --- a/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp +++ b/XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp @@ -88,7 +88,7 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in TCHAR* ptszBody = NULL; Protocol_StoragePacket_BasicAuth(pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, lpszClientAddr, tszUserName, tszUserPass, tszSDBuffer, &nSDLen); - APIHelp_HttpRequest_Post(st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); + APIHelp_HttpRequest_Custom(_T("POST"), st_ServiceCfg.st_XProxy.st_XProxyAuth.tszAuthProxy, tszSDBuffer, &nResponseCode, &ptszBody, &nBLen); if (200 != nResponseCode) { st_HDRParam.bIsClose = TRUE; @@ -142,16 +142,30 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in int nRVMode = 0; int nRVCount = 0; int nHDSize = 0; - TCHAR tszStorageKey[MAX_PATH]; + TCHAR tszFileName[MAX_PATH]; XENGINE_STORAGEBUCKET st_StorageBucket; - LPCTSTR lpszStorageKey = _T("StorageKey"); - memset(tszStorageKey, '\0', MAX_PATH); + memset(tszFileName, '\0', MAX_PATH); memset(&st_StorageBucket, '\0', sizeof(XENGINE_STORAGEBUCKET)); - //是否制定了bucket - if (RfcComponents_HttpHelp_GetField(&pptszListHdr, nHdrCount, lpszStorageKey, st_StorageBucket.tszBuckKey)) + //解析参数 + TCHAR** pptszParamList; + int nParamCount = 0; + RfcComponents_HttpHelp_GetParament(pSt_HTTPParam->tszHttpUri, &pptszParamList, &nParamCount); + if (nParamCount < 1) { - if (!APIHelp_Distributed_UPStorage(pSt_HTTPParam->tszHttpUri, st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket, 5)) + st_HDRParam.nHttpCode = 413; + RfcComponents_HttpServer_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); + BaseLib_OperatorMemory_Free((XPPPMEM)&pptszParamList, nParamCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("上传客户端:%s,请求上传文件失败,提供的参数:%s 不正确,错误:%lX"), lpszClientAddr, pSt_HTTPParam->tszHttpUri, HttpServer_GetLastError()); + return FALSE; + } + APIHelp_Api_UrlParse(&pptszParamList, nParamCount, tszFileName, st_StorageBucket.tszBuckKey); + //是否指定了bucket + //http://127.0.0.1:5102/api?filename=1.txt&storeagekey=storagekey1 + if (_tcslen(st_StorageBucket.tszBuckKey) > 0) + { + if (!APIHelp_Distributed_UPStorage(st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket, 4)) { st_HDRParam.bIsClose = TRUE; st_HDRParam.nHttpCode = 413; @@ -164,7 +178,7 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in } else { - if (!APIHelp_Distributed_UPStorage(pSt_HTTPParam->tszHttpUri, st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket, st_LoadbalanceCfg.st_LBLocation.nUPLoadMode)) + if (!APIHelp_Distributed_UPStorage(st_LoadbalanceCfg.st_LoadBalance.pStl_ListBucket, &st_StorageBucket, st_LoadbalanceCfg.st_LBLocation.nUPLoadMode)) { st_HDRParam.bIsClose = TRUE; st_HDRParam.nHttpCode = 413; @@ -175,7 +189,7 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in return FALSE; } } - _stprintf(tszFileDir, _T("%s%s"), st_StorageBucket.tszFilePath, pSt_HTTPParam->tszHttpUri); + _stprintf(tszFileDir, _T("%s/%s"), st_StorageBucket.tszFilePath, tszFileName); if (!Session_UPStroage_Exist(lpszClientAddr)) { @@ -229,18 +243,16 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in memset(tszPassNotify, '\0', MAX_PATH); memset(&st_StorageInfo, '\0', sizeof(SESSION_STORAGEINFO)); - - Session_UPStroage_Close(lpszClientAddr); Session_UPStroage_GetInfo(lpszClientAddr, &st_StorageInfo); //大小是否足够 - if (st_StorageInfo.ullCount != st_StorageInfo.ullFSize) + if (st_StorageInfo.ullCount != st_StorageInfo.ullRWLen) { st_HDRParam.bIsClose = TRUE; st_HDRParam.nHttpCode = 200; Protocol_StoragePacket_UPDown(tszPassNotify, &nPLen, st_StorageInfo.tszBuckKey, st_StorageInfo.tszFileDir, st_StorageInfo.tszClientAddr, st_StorageInfo.ullRWLen, FALSE); RfcComponents_HttpServer_SendMsgEx(xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszPassNotify, nPLen); XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("上传客户端:%s,请求上传文件成功,文件名:%s,总大小:%lld,写入大小:%lld,文件不完整,需要等待断点续传完毕"), lpszClientAddr, tszFileDir, st_StorageInfo.ullCount, st_StorageInfo.ullFSize); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("上传客户端:%s,请求上传文件成功,文件名:%s,总大小:%lld,写入大小:%lld,文件不完整,需要等待断点续传完毕"), lpszClientAddr, tszFileDir, st_StorageInfo.ullCount, st_StorageInfo.ullRWLen); return TRUE; } int nHashLen = 0; @@ -251,10 +263,11 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in memset(&st_ProtocolFile, '\0', sizeof(XSTORAGECORE_DBFILE)); _tcscpy(st_ProtocolFile.st_ProtocolFile.tszFilePath, st_StorageBucket.tszFilePath); - _tcscpy(st_ProtocolFile.st_ProtocolFile.tszFileName, pSt_HTTPParam->tszHttpUri + 1); + _tcscpy(st_ProtocolFile.st_ProtocolFile.tszFileName, tszFileName); _tcscpy(st_ProtocolFile.tszBuckKey, st_StorageBucket.tszBuckKey); - st_ProtocolFile.st_ProtocolFile.nFileSize = st_StorageInfo.ullFSize; - + st_ProtocolFile.st_ProtocolFile.nFileSize = st_StorageInfo.ullRWLen; + //上传完毕需要关闭,否则计算HASH会不正常 + Session_UPStroage_Close(lpszClientAddr); OPenSsl_Api_Digest(tszFileDir, tszHashStr, &nHashLen, TRUE, st_ServiceCfg.st_XStorage.nHashMode); BaseLib_OperatorString_StrToHex((char*)tszHashStr, nHashLen, st_ProtocolFile.st_ProtocolFile.tszFileHash); //处理结果 @@ -309,7 +322,7 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in if (st_ServiceCfg.st_XProxy.st_XProxyPass.bUPPass) { int nHttpCode = 0; - if (APIHelp_HttpRequest_Post(st_ServiceCfg.st_XProxy.st_XProxyPass.tszUPPass, tszPassNotify, &nHttpCode)) + if (APIHelp_HttpRequest_Custom(_T("POST"), st_ServiceCfg.st_XProxy.st_XProxyPass.tszUPPass, tszPassNotify, &nHttpCode)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("上传客户端:%s,请求完成通知返回值:%d,文件:%s,地址:%s"), lpszClientAddr, nHttpCode, st_StorageInfo.tszFileDir, st_ServiceCfg.st_XProxy.st_XProxyPass.tszUPPass); } diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp index 0e64a8f4522128c66d4a3b286befa6a30dbabbf5..c546f9569682a14c990a0354f36aa531cc933d63 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskManage.cpp @@ -43,20 +43,29 @@ BOOL XEngine_Task_Manage(LPCTSTR lpszAPIName, LPCTSTR lpszClientAddr, LPCTSTR lp memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); Protocol_StorageParse_QueryFile(lpszMsgBuffer, tszTimeStart, tszTimeEnd, tszBucketKey, tszFileName, tszFileHash, &nMode); - //查找数据库 - if (!st_ServiceCfg.st_XSql.bEnable) - { - st_HDRParam.bIsClose = TRUE; - st_HDRParam.nHttpCode = 501; - RfcComponents_HttpServer_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); - XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,请求查询文件失败,没有启用数据库,无法使用此功能!"), lpszClientAddr); - return TRUE; - } - Database_File_FileQuery(&ppSt_ListFile, &nListCount, tszTimeStart, tszTimeEnd, tszBucketKey, tszFileName, tszFileHash); //根据使用模式来操作 if (0 == nMode) { + //查找数据库 + if (!st_ServiceCfg.st_XSql.bEnable) + { + st_HDRParam.bIsClose = TRUE; + st_HDRParam.nHttpCode = 501; + RfcComponents_HttpServer_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,请求查询文件失败,没有启用数据库,无法使用此功能!"), lpszClientAddr); + return FALSE; + } + Database_File_FileQuery(&ppSt_ListFile, &nListCount, tszTimeStart, tszTimeEnd, tszBucketKey, tszFileName, tszFileHash); + if (0 == nListCount) + { + st_HDRParam.bIsClose = TRUE; + st_HDRParam.nHttpCode = 404; + RfcComponents_HttpServer_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,请求查询文件失败,没有找到文件,查找文件名:%s,文件HASH:%s!"), lpszClientAddr, tszFileName, tszFileHash); + return FALSE; + } Protocol_StoragePacket_QueryFile(tszMsgBuffer, &nMsgLen, &ppSt_ListFile, nListCount, tszTimeStart, tszTimeEnd); RfcComponents_HttpServer_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam, tszMsgBuffer, nMsgLen); XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); @@ -71,9 +80,19 @@ BOOL XEngine_Task_Manage(LPCTSTR lpszAPIName, LPCTSTR lpszClientAddr, LPCTSTR lp SOCKET hRVSocket; list stl_ListFile; + if (_tcslen(tszFileHash) <= 0) + { + st_HDRParam.bIsClose = TRUE; + st_HDRParam.nHttpCode = 400; + + RfcComponents_HttpServer_SendMsgEx(xhCenterHttp, tszSDBuffer, &nSDLen, &st_HDRParam); + XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPCENTER); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,发送广播请求失败,因为查询文件HASH为空"), lpszClientAddr); + return FALSE; + } Protocol_StoragePacket_REQFile(tszSDBuffer, &nSDLen, NULL, tszFileHash); - NetCore_BroadCast_SendInit(&hSDSocket, st_ServiceCfg.st_P2xp.nRVPort, st_ServiceCfg.tszIPAddr); - NetCore_BroadCast_RecvInit(&hRVSocket, st_ServiceCfg.st_P2xp.nSDPort); + NetCore_BroadCast_SDCreate(&hSDSocket, st_ServiceCfg.st_P2xp.nRVPort, st_ServiceCfg.tszIPAddr); + NetCore_BroadCast_RVCreate(&hRVSocket, st_ServiceCfg.st_P2xp.nSDPort); if (!NetCore_BroadCast_Send(hSDSocket, tszSDBuffer, nSDLen)) { @@ -117,9 +136,6 @@ BOOL XEngine_Task_Manage(LPCTSTR lpszAPIName, LPCTSTR lpszClientAddr, LPCTSTR lp } else { - st_HDRParam.bIsClose = TRUE; - st_HDRParam.nHttpCode = 200; - int nListCount = 0; XSTORAGECORE_DBFILE** ppSt_ListPacket; APIHelp_Distributed_FileList(&stl_ListFile, &ppSt_ListPacket, &nListCount); diff --git a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp index 4e1d49703c8fd7697ccf8247d9d5c0db4462869b..89c18665761d227c70b7a0db18249282e2d64a5b 100644 --- a/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp +++ b/XEngine_Source/XEngine_StorageApp/Storage_APPTask/Storage_TaskP2p.cpp @@ -37,7 +37,7 @@ XHTHREAD XEngine_Task_P2PThread() BaseLib_OperatorMemory_Free((XPPPMEM)&pppSt_ListFile, nListCount); SOCKET hSDSocket; - NetCore_BroadCast_SendInit(&hSDSocket, st_ServiceCfg.st_P2xp.nSDPort, st_ServiceCfg.tszIPAddr); + NetCore_BroadCast_SDCreate(&hSDSocket, st_ServiceCfg.st_P2xp.nSDPort, st_ServiceCfg.tszIPAddr); NetCore_BroadCast_Send(hSDSocket, tszMsgBuffer, nMsgLen); NetCore_BroadCast_Close(hSDSocket); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("广播端:%s,请求查询文件成功,列表个数:%d"), tszIPAddr, nListCount); diff --git a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp index 0754838da0f12802a4f35d6ed17105c87db92444..f170fcbbce30033f9443b63a7c54eb7b967d12ad 100644 --- a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp +++ b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp @@ -3,17 +3,17 @@ BOOL bIsRun = FALSE; XLOG xhLog = NULL; -XHANDLE xhHBDownload = 0; -XHANDLE xhHBUPLoader = 0; -XHANDLE xhHBCenter = 0; +XHANDLE xhHBDownload = NULL; +XHANDLE xhHBUPLoader = NULL; +XHANDLE xhHBCenter = NULL; -XHANDLE xhNetDownload = 0; -XHANDLE xhNetUPLoader = 0; -XHANDLE xhNetCenter = 0; +XHANDLE xhNetDownload = NULL; +XHANDLE xhNetUPLoader = NULL; +XHANDLE xhNetCenter = NULL; -XNETHANDLE xhUPPool = 0; -XNETHANDLE xhDLPool = 0; -XNETHANDLE xhCTPool = 0; +XHANDLE xhUPPool = NULL; +XHANDLE xhDLPool = NULL; +XHANDLE xhCTPool = NULL; XHANDLE xhDLSsl = NULL; XHANDLE xhUPSsl = NULL; @@ -137,7 +137,7 @@ int main(int argc, char** argv) memset(tszAddr, '\0', sizeof(tszAddr)); _stprintf(tszAddr, _T("Http://127.0.0.1:%d/Api/Manage/Config"), st_ServiceCfg.nCenterPort); - APIHelp_HttpRequest_Post(tszAddr); + APIHelp_HttpRequest_Custom(_T("POST"), tszAddr); return 0; } st_XLogConfig.XLog_MaxBackupFile = st_ServiceCfg.st_XLog.nMaxCount; @@ -234,12 +234,12 @@ int main(int argc, char** argv) } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化HTTP下载服务成功,IO线程个数:%d"), st_ServiceCfg.st_XMax.nStorageDLThread); - if (!Session_DLStroage_Init(st_ServiceCfg.st_XLimit.nDLTry)) + if (!Session_DLStroage_Init()) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动下载会话服务失败,错误:%lX"), Session_GetLastError()); goto XENGINE_EXITAPP; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动下载会话服务成功,下载错误重试次数:%d"), st_ServiceCfg.st_XLimit.nDLTry); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动下载会话服务成功,下载限速模式:%s"), st_ServiceCfg.st_XLimit.bLimitMode ? "开" : "关"); if (st_ServiceCfg.st_XCert.bDLEnable) { @@ -275,7 +275,8 @@ int main(int argc, char** argv) ppSt_ListDLThread[i]->lParam = pInt_Pos; ppSt_ListDLThread[i]->fpCall_ThreadsTask = XEngine_Download_HTTPThread; } - if (!ManagePool_Thread_NQCreate(&xhDLPool, &ppSt_ListDLThread, st_ServiceCfg.st_XMax.nStorageDLThread)) + xhDLPool = ManagePool_Thread_NQCreate(&ppSt_ListDLThread, st_ServiceCfg.st_XMax.nStorageDLThread); + if (NULL == xhDLPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动HTTP下载处理线程池失败,错误:%d"), errno); goto XENGINE_EXITAPP; @@ -334,7 +335,8 @@ int main(int argc, char** argv) ppSt_ListUPThread[i]->lParam = pInt_Pos; ppSt_ListUPThread[i]->fpCall_ThreadsTask = XEngine_UPLoader_HTTPThread; } - if (!ManagePool_Thread_NQCreate(&xhUPPool, &ppSt_ListUPThread, st_ServiceCfg.st_XMax.nStorageDLThread)) + xhUPPool = ManagePool_Thread_NQCreate(&ppSt_ListUPThread, st_ServiceCfg.st_XMax.nStorageDLThread); + if (NULL == xhUPPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动HTTP上传处理线程池失败,错误:%d"), errno); goto XENGINE_EXITAPP; @@ -386,7 +388,8 @@ int main(int argc, char** argv) ppSt_ListCTThread[i]->lParam = pInt_Pos; ppSt_ListCTThread[i]->fpCall_ThreadsTask = XEngine_Center_HTTPThread; } - if (!ManagePool_Thread_NQCreate(&xhCTPool, &ppSt_ListCTThread, st_ServiceCfg.st_XMax.nCenterThread)) + xhCTPool = ManagePool_Thread_NQCreate(&ppSt_ListCTThread, st_ServiceCfg.st_XMax.nCenterThread); + if (NULL == xhCTPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动HTTP业务处理线程池失败,错误:%d"), errno); goto XENGINE_EXITAPP; @@ -396,7 +399,7 @@ int main(int argc, char** argv) //只有使用了数据库,才启用P2P if (st_ServiceCfg.st_XSql.bEnable) { - if (!NetCore_BroadCast_RecvInit(&hBroadSocket, st_ServiceCfg.st_P2xp.nRVPort)) + if (!NetCore_BroadCast_RVCreate(&hBroadSocket, st_ServiceCfg.st_P2xp.nRVPort)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动P2P存储广播服务失败,错误:%d"), errno); goto XENGINE_EXITAPP; diff --git a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.vcxproj b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.vcxproj index dda57b43108364280a659fe10e2a9c9d61657fdc..a7649b173fc049857d406ea57ff2491e7fec0197 100644 --- a/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.vcxproj +++ b/XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.vcxproj @@ -93,7 +93,7 @@ Level3 - true + false WIN32;_DEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true 4819 @@ -108,7 +108,7 @@ Level3 true true - true + false WIN32;NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreaded @@ -124,7 +124,7 @@ Level3 - true + false _DEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -138,7 +138,7 @@ Level3 true true - true + false NDEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreaded