Improve:App protocol.

This commit is contained in:
Fancy code 2024-05-24 16:51:28 +08:00
parent 4834d682d4
commit 6c8bb74be1
9 changed files with 92 additions and 41 deletions

View File

@ -133,7 +133,7 @@
#### 1.2.2.3. 问题列表
1. 针对软件迭代需求除了一些和APP业务逻辑相关的参数需要特殊处理外是否可以通过协议来获取设备自定义的参数设置方便设备可以随意的增加/删除设置参数。
答:已经支持,看协议能力。
答:==已经支持==,看协议能力。
2. 没发现升级功能。
公版APP不支持升级功能。

View File

@ -287,25 +287,33 @@ void inline SixFrameHandle::ResponseGetBatteryInfo(cJSON *result, const AppGetBa
cJSON_AddNumberToObject(info, "charge", static_cast<int>(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<std::string, bool> &paramList)
{
auto parseFunc = [](const std::string &key, const std::string &value, std::shared_ptr<VParseUrl> &parse) {
std::shared_ptr<ParseUrl<AppParamValue>> parseImpl = std::dynamic_pointer_cast<ParseUrl<AppParamValue>>(parse);
std::shared_ptr<ParseUrl<std::map<std::string, bool>>> parseImpl =
std::dynamic_pointer_cast<ParseUrl<std::map<std::string, bool>>>(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<VParseUrl> parse = std::make_shared<ParseUrl<AppParamValue>>();
std::shared_ptr<ParseUrl<AppParamValue>> parseImpl = std::dynamic_pointer_cast<ParseUrl<AppParamValue>>(parse);
std::shared_ptr<VParseUrl> parse = std::make_shared<ParseUrl<std::map<std::string, bool>>>();
std::shared_ptr<ParseUrl<std::map<std::string, bool>>> parseImpl =
std::dynamic_pointer_cast<ParseUrl<std::map<std::string, bool>>>(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<std::string, bool> 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 &param)
void inline SixFrameHandle::ResponseGetParamValue(cJSON *result, const AppParamValue &param,
const std::map<std::string, bool> &paramList)
{
// 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<int>(param.mMicStatus));
// }
// cJSON *rec = cJSON_CreateObject();
// if (nullptr != rec) {
// cJSON_AddItemToArray(info, rec);
// cJSON_AddStringToObject(rec, "name", "rec");
// cJSON_AddNumberToObject(rec, "value", static_cast<int>(param.mRec));
// }
cJSON *info = nullptr;
cJSON_AddItemToObject(result, CJSON_INFO_STRING, info = cJSON_CreateObject());
cJSON_AddNumberToObject(info, "value", static_cast<int>(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<int>(param.mMicStatus));
}
cJSON *rec = cJSON_CreateObject();
if (nullptr != rec) {
cJSON_AddItemToArray(info, rec);
cJSON_AddStringToObject(rec, "name", "rec");
cJSON_AddNumberToObject(rec, "value", static_cast<int>(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<int>(param.mMicStatus));
return;
}
}
{
auto it = paramList.find("rec");
if (it != paramList.end()) {
cJSON_AddNumberToObject(info, "value", static_cast<int>(param.mRec));
return;
}
}
}
}
void SixFrameHandle::RequestGetCapability(const std::string &url, ResponseHandle responseHandle, void *context)
{

View File

@ -72,9 +72,15 @@ private:
void ResponseGetSdCardInfo(cJSON *result, const AppGetSdCardInfo &param);
void RequestGetBatteryInfo(const std::string &url, ResponseHandle responseHandle, void *context);
void ResponseGetBatteryInfo(cJSON *result, const AppGetBatteryInfo &param);
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<std::string, bool> &paramList);
void RequestGetParamValue(const std::string &url, ResponseHandle responseHandle, void *context);
void ResponseGetParamValue(cJSON *result, const AppParamValue &param);
void ResponseGetParamValue(cJSON *result, const AppParamValue &param, const std::map<std::string, bool> &paramList);
void RequestGetCapability(const std::string &url, ResponseHandle responseHandle, void *context);
void ResponseGetCapability(cJSON *result, const AppGetCapability &param);
void RequestGetLockVideoStatus(const std::string &url, ResponseHandle responseHandle, void *context);

View File

@ -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

View File

@ -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<VAppMonitor> 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();
}

View File

@ -34,7 +34,7 @@ protected: // About http
void MockSetDateTime(void);
void MockSetTimeZone(void);
void MockUploadFiles(void);
void MockGetParamValue(void);
void MockGetParamValue(const std::string &paramName);
void MockGetCapability(void);
void MockGetLockVideoStatus(void);
void MockGetStorageInfo(void);

View File

@ -122,7 +122,7 @@ void AppManagerTestTool::MockUploadFiles(void)
}
ServersMock::GetInstance()->MockUploadFiles();
}
void AppManagerTestTool::MockGetParamValue(void)
void AppManagerTestTool::MockGetParamValue(const std::string &paramName)
{
std::shared_ptr<AppMonitorMock> mock = std::dynamic_pointer_cast<AppMonitorMock>(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)
{

View File

@ -146,10 +146,10 @@ void ServersMock::MockGetBatteryInfo(void)
DeleteServersHttp(http);
}
}
void ServersMock::MockGetParamValue(void)
void ServersMock::MockGetParamValue(const std::string &paramName)
{
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);

View File

@ -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 &paramName);
virtual void MockGetCapability(void);
virtual void MockGetLockVideoStatus(void);
virtual void MockGetStorageInfo(void);