From 6c8bb74be1094ea38c30af633faa3fdd762ac63a Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Fri, 24 May 2024 16:51:28 +0800 Subject: [PATCH] Improve:App protocol. --- middleware/AppManager/README.md | 2 +- .../src/Protocol/SixFrame/SixFrameHandle.cpp | 93 +++++++++++++------ .../src/Protocol/SixFrame/SixFrameHandle.h | 10 +- .../src_mock/AppMonitor_Mock_Test.cpp | 2 +- .../AppManager/src/AppManager_Test.cpp | 14 ++- .../tool/include/AppManagerTestTool.h | 2 +- .../tool/src/AppManagerTestTool.cpp | 4 +- .../AppManager/tool/src/ServersMock.cpp | 4 +- .../AppManager/tool/src/ServersMock.h | 2 +- 9 files changed, 92 insertions(+), 41 deletions(-) diff --git a/middleware/AppManager/README.md b/middleware/AppManager/README.md index e3c6592..a131f86 100644 --- a/middleware/AppManager/README.md +++ b/middleware/AppManager/README.md @@ -133,7 +133,7 @@ #### 1.2.2.3. 问题列表 1. 针对软件迭代需求,除了一些和APP业务逻辑相关的参数需要特殊处理外,是否可以通过协议来获取设备自定义的参数设置?方便设备可以随意的增加/删除设置参数。 -答:已经支持,看协议能力。 +答:==已经支持==,看协议能力。 2. 没发现升级功能。 答:公版APP不支持升级功能。 diff --git a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp index 0c48db1..9e9adfa 100644 --- a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp +++ b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.cpp @@ -287,25 +287,33 @@ void inline SixFrameHandle::ResponseGetBatteryInfo(cJSON *result, const AppGetBa cJSON_AddNumberToObject(info, "charge", static_cast(param.mChargeStatus)); cJSON_AddNumberToObject(info, "capacity", param.mCapacity); } -AppParamValue inline SixFrameHandle::RequestParamValueParse(const std::string &url) +void inline SixFrameHandle::RequestParamValueParse(const std::string &url, std::map ¶mList) { auto parseFunc = [](const std::string &key, const std::string &value, std::shared_ptr &parse) { - std::shared_ptr> parseImpl = std::dynamic_pointer_cast>(parse); + std::shared_ptr>> parseImpl = + std::dynamic_pointer_cast>>(parse); + if ("param" == key) { + if ("all" == value) { + parseImpl->mData["all"] = true; // means app want to get all value. + } + } if ("param" == key) { if ("rec" == value) { - parseImpl->mData.mRec = SwitchStatus::ON; // means app want to get mRec value. + parseImpl->mData["rec"] = true; // means app want to get rec value. } } }; - std::shared_ptr parse = std::make_shared>(); - std::shared_ptr> parseImpl = std::dynamic_pointer_cast>(parse); + std::shared_ptr parse = std::make_shared>>(); + std::shared_ptr>> parseImpl = + std::dynamic_pointer_cast>>(parse); ExtractParamsFromUrl(url, parseFunc, parse); - return parseImpl->mData; + paramList = parseImpl->mData; } void SixFrameHandle::RequestGetParamValue(const std::string &url, ResponseHandle responseHandle, void *context) { LogInfo("RequestGetParamValue.\n"); - // AppParamValue appGetValue = RequestParamValueParse(url); // TODO: + std::map paramList; + RequestParamValueParse(url, paramList); AppParamValue paramDevice; mAppMonitor->GetParamValue(paramDevice); cJSON *result = MakeResponseResult(ResposeResult::SUCCESSFUL); @@ -314,33 +322,58 @@ void SixFrameHandle::RequestGetParamValue(const std::string &url, ResponseHandle responseHandle("Device run out of memory.", context); return; } - ResponseGetParamValue(result, paramDevice); + ResponseGetParamValue(result, paramDevice, paramList); ResponseJsonString(result, responseHandle, context); cJSON_Delete(result); } -void inline SixFrameHandle::ResponseGetParamValue(cJSON *result, const AppParamValue ¶m) +void inline SixFrameHandle::ResponseGetParamValue(cJSON *result, const AppParamValue ¶m, + const std::map ¶mList) { - // cJSON *info = cJSON_CreateArray(); - // if (nullptr == info) { - // LogError("cJSON_CreateArray failed.\n"); - // return; - // } - // cJSON_AddItemToObject(result, CJSON_INFO_STRING, info); - // cJSON *mic = cJSON_CreateObject(); - // if (nullptr != mic) { - // cJSON_AddItemToArray(info, mic); - // cJSON_AddStringToObject(mic, "name", "mic"); - // cJSON_AddNumberToObject(mic, "value", static_cast(param.mMicStatus)); - // } - // cJSON *rec = cJSON_CreateObject(); - // if (nullptr != rec) { - // cJSON_AddItemToArray(info, rec); - // cJSON_AddStringToObject(rec, "name", "rec"); - // cJSON_AddNumberToObject(rec, "value", static_cast(param.mRec)); - // } - cJSON *info = nullptr; - cJSON_AddItemToObject(result, CJSON_INFO_STRING, info = cJSON_CreateObject()); - cJSON_AddNumberToObject(info, "value", static_cast(param.mRec)); + auto it = paramList.find("all"); + if (it != paramList.end()) { + cJSON *info = cJSON_CreateArray(); + if (nullptr == info) { + LogError("cJSON_CreateArray failed.\n"); + return; + } + cJSON_AddItemToObject(result, CJSON_INFO_STRING, info); + cJSON *mic = cJSON_CreateObject(); + if (nullptr != mic) { + cJSON_AddItemToArray(info, mic); + cJSON_AddStringToObject(mic, "name", "mic"); + cJSON_AddNumberToObject(mic, "value", static_cast(param.mMicStatus)); + } + cJSON *rec = cJSON_CreateObject(); + if (nullptr != rec) { + cJSON_AddItemToArray(info, rec); + cJSON_AddStringToObject(rec, "name", "rec"); + cJSON_AddNumberToObject(rec, "value", static_cast(param.mRec)); + } + cJSON *osd = cJSON_CreateObject(); + if (nullptr != osd) { + cJSON_AddItemToArray(info, osd); + cJSON_AddStringToObject(osd, "name", "osd"); + cJSON_AddNumberToObject(osd, "value", 1); + } + } + else { + cJSON *info = nullptr; + cJSON_AddItemToObject(result, CJSON_INFO_STRING, info = cJSON_CreateObject()); + { + auto it = paramList.find("mic"); + if (it != paramList.end()) { + cJSON_AddNumberToObject(info, "value", static_cast(param.mMicStatus)); + return; + } + } + { + auto it = paramList.find("rec"); + if (it != paramList.end()) { + cJSON_AddNumberToObject(info, "value", static_cast(param.mRec)); + return; + } + } + } } void SixFrameHandle::RequestGetCapability(const std::string &url, ResponseHandle responseHandle, void *context) { diff --git a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.h b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.h index 3d70437..61dbf8d 100644 --- a/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.h +++ b/middleware/AppManager/src/Protocol/SixFrame/SixFrameHandle.h @@ -72,9 +72,15 @@ private: void ResponseGetSdCardInfo(cJSON *result, const AppGetSdCardInfo ¶m); void RequestGetBatteryInfo(const std::string &url, ResponseHandle responseHandle, void *context); void ResponseGetBatteryInfo(cJSON *result, const AppGetBatteryInfo ¶m); - AppParamValue RequestParamValueParse(const std::string &url); + /** + * @brief There are many parameters that need to be set for the content that the APP needs to obtain in the protocol + * package, The APP may retrieve all or some of the parameters. + * @param url [in] + * @param paramList [out] + */ + void RequestParamValueParse(const std::string &url, std::map ¶mList); void RequestGetParamValue(const std::string &url, ResponseHandle responseHandle, void *context); - void ResponseGetParamValue(cJSON *result, const AppParamValue ¶m); + void ResponseGetParamValue(cJSON *result, const AppParamValue ¶m, const std::map ¶mList); void RequestGetCapability(const std::string &url, ResponseHandle responseHandle, void *context); void ResponseGetCapability(cJSON *result, const AppGetCapability ¶m); void RequestGetLockVideoStatus(const std::string &url, ResponseHandle responseHandle, void *context); diff --git a/test/application/HuntingCamera/src_mock/AppMonitor_Mock_Test.cpp b/test/application/HuntingCamera/src_mock/AppMonitor_Mock_Test.cpp index 830bcea..8d0ad3c 100644 --- a/test/application/HuntingCamera/src_mock/AppMonitor_Mock_Test.cpp +++ b/test/application/HuntingCamera/src_mock/AppMonitor_Mock_Test.cpp @@ -123,7 +123,7 @@ TEST_F(HuntingCameraTest, INTEGRATION_HunttingCamera_AUTO_GetParamValue) MainThread::GetInstance()->Init(); TestManager::ResetTimeOut(1000 * 3); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - MockGetParamValue(); + MockGetParamValue("all"); MainThread::GetInstance()->Runing(); } // ../output_files/test/bin/HuntingCameraTest diff --git a/test/middleware/AppManager/src/AppManager_Test.cpp b/test/middleware/AppManager/src/AppManager_Test.cpp index ffb1b75..df11036 100644 --- a/test/middleware/AppManager/src/AppManager_Test.cpp +++ b/test/middleware/AppManager/src/AppManager_Test.cpp @@ -173,7 +173,19 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetParamValue) IAppManager::GetInstance()->Init(mAppParam); IAppManager::GetInstance()->SetAppMonitor(monitor); std::this_thread::sleep_for(std::chrono::milliseconds(100)); - AppManagerTestTool::MockGetParamValue(); + AppManagerTestTool::MockGetParamValue("all"); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + IAppManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/AppManagerTest +// --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_AUTO_GetParamValue2 +TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_AUTO_GetParamValue2) +{ + std::shared_ptr monitor = AppManagerTestTool::MakeMonitorMock(); + IAppManager::GetInstance()->Init(mAppParam); + IAppManager::GetInstance()->SetAppMonitor(monitor); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + AppManagerTestTool::MockGetParamValue("rec"); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IAppManager::GetInstance()->UnInit(); } diff --git a/test/middleware/AppManager/tool/include/AppManagerTestTool.h b/test/middleware/AppManager/tool/include/AppManagerTestTool.h index 3889ecf..9c1c778 100644 --- a/test/middleware/AppManager/tool/include/AppManagerTestTool.h +++ b/test/middleware/AppManager/tool/include/AppManagerTestTool.h @@ -34,7 +34,7 @@ protected: // About http void MockSetDateTime(void); void MockSetTimeZone(void); void MockUploadFiles(void); - void MockGetParamValue(void); + void MockGetParamValue(const std::string ¶mName); void MockGetCapability(void); void MockGetLockVideoStatus(void); void MockGetStorageInfo(void); diff --git a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp b/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp index bbc9d65..e967346 100644 --- a/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp +++ b/test/middleware/AppManager/tool/src/AppManagerTestTool.cpp @@ -122,7 +122,7 @@ void AppManagerTestTool::MockUploadFiles(void) } ServersMock::GetInstance()->MockUploadFiles(); } -void AppManagerTestTool::MockGetParamValue(void) +void AppManagerTestTool::MockGetParamValue(const std::string ¶mName) { std::shared_ptr mock = std::dynamic_pointer_cast(mAppMonitorMock); if (mock) { @@ -130,7 +130,7 @@ void AppManagerTestTool::MockGetParamValue(void) .Times(ONLY_BE_CALLED_ONCE) .WillOnce(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION)))); } - ServersMock::GetInstance()->MockGetParamValue(); + ServersMock::GetInstance()->MockGetParamValue(paramName); } void AppManagerTestTool::MockGetCapability(void) { diff --git a/test/middleware/AppManager/tool/src/ServersMock.cpp b/test/middleware/AppManager/tool/src/ServersMock.cpp index 2d2bd71..0c0bd90 100644 --- a/test/middleware/AppManager/tool/src/ServersMock.cpp +++ b/test/middleware/AppManager/tool/src/ServersMock.cpp @@ -146,10 +146,10 @@ void ServersMock::MockGetBatteryInfo(void) DeleteServersHttp(http); } } -void ServersMock::MockGetParamValue(void) +void ServersMock::MockGetParamValue(const std::string ¶mName) { LogInfo("APP_GET_PARAM_VALUE test start.\n"); - std::string mockRequest = mServerUrl + APP_GET_PARAM_VALUE; + std::string mockRequest = mServerUrl + APP_GET_PARAM_VALUE + "?param=" + paramName; ServerHttp *http = NewServersHttp(mockRequest.c_str()); if (http) { HttpGet(http); diff --git a/test/middleware/AppManager/tool/src/ServersMock.h b/test/middleware/AppManager/tool/src/ServersMock.h index 14963ec..e7b36f9 100644 --- a/test/middleware/AppManager/tool/src/ServersMock.h +++ b/test/middleware/AppManager/tool/src/ServersMock.h @@ -28,7 +28,7 @@ public: virtual void MockGetMediaInfo(void); virtual void MockGetSdCardInfo(void); virtual void MockGetBatteryInfo(void); - virtual void MockGetParamValue(void); + virtual void MockGetParamValue(const std::string ¶mName); virtual void MockGetCapability(void); virtual void MockGetLockVideoStatus(void); virtual void MockGetStorageInfo(void);