mirror of
https://gitee.com/jiuyilian/embedded-framework.git
synced 2025-01-06 10:16:51 -05:00
Improve:AppManager tcp function.
This commit is contained in:
parent
2f6678c7eb
commit
bb0180882c
|
@ -22,7 +22,7 @@ void TestMissionState::GoInState()
|
||||||
{
|
{
|
||||||
MissionState::GoInState();
|
MissionState::GoInState();
|
||||||
LogInfo(" ========== TestMissionState::GoInState.\n");
|
LogInfo(" ========== TestMissionState::GoInState.\n");
|
||||||
AppParam mAppParam(APP_MANAGER_HTTP_SERVER_IP, APP_MANAGER_HTTP_SERVER_PORT); // TODO:
|
AppParam mAppParam(APP_MANAGER_DEVICE_IP, APP_MANAGER_HTTP_SERVER_PORT, APP_MANAGER_TCP_SERVER_PORT); // TODO:
|
||||||
IAppManager::GetInstance()->Init(mAppParam);
|
IAppManager::GetInstance()->Init(mAppParam);
|
||||||
std::shared_ptr<VAppMonitor> monitor =
|
std::shared_ptr<VAppMonitor> monitor =
|
||||||
std::dynamic_pointer_cast<TestMissionState>(MissionState::shared_from_this());
|
std::dynamic_pointer_cast<TestMissionState>(MissionState::shared_from_this());
|
||||||
|
|
|
@ -68,7 +68,8 @@ set(CURL_SHARED_LIBS_PATH "/mnt/mmc")
|
||||||
# ------------ build curl + openssl ------------ end
|
# ------------ build curl + openssl ------------ end
|
||||||
|
|
||||||
# ------------ build AppManager ------------ #
|
# ------------ build AppManager ------------ #
|
||||||
# set(APP_MANAGER_HTTP_SERVER_IP "localhost")
|
set(APP_MANAGER_DEVICE_IP "localhost")
|
||||||
set(APP_MANAGER_HTTP_SERVER_IP "192.168.1.29")
|
# set(APP_MANAGER_DEVICE_IP "192.168.1.29")
|
||||||
set(APP_MANAGER_HTTP_SERVER_PORT "8080")
|
set(APP_MANAGER_HTTP_SERVER_PORT "8080")
|
||||||
|
set(APP_MANAGER_TCP_SERVER_PORT "9876")
|
||||||
# ------------ build AppManager end ------------ #
|
# ------------ build AppManager end ------------ #
|
|
@ -11,6 +11,7 @@ include_directories(
|
||||||
${UTILS_SOURCE_PATH}/Log/include
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
${UTILS_SOURCE_PATH}/FxHttpServer/include
|
${UTILS_SOURCE_PATH}/FxHttpServer/include
|
||||||
${UTILS_SOURCE_PATH}/WebServer/include
|
${UTILS_SOURCE_PATH}/WebServer/include
|
||||||
|
${UTILS_SOURCE_PATH}/TcpModule/include
|
||||||
${HAL_SOURCE_PATH}/include
|
${HAL_SOURCE_PATH}/include
|
||||||
${EXTERNAL_SOURCE_PATH}/cJSON-1.7.17
|
${EXTERNAL_SOURCE_PATH}/cJSON-1.7.17
|
||||||
)
|
)
|
||||||
|
@ -24,7 +25,7 @@ aux_source_directory(./src/Protocol/SixFrame SRC_FILES)
|
||||||
set(TARGET_NAME AppManager)
|
set(TARGET_NAME AppManager)
|
||||||
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
add_library(${TARGET_NAME} STATIC ${SRC_FILES})
|
||||||
|
|
||||||
target_link_libraries(${TARGET_NAME} WebServer Hal cjson-static StatusCode Log)
|
target_link_libraries(${TARGET_NAME} WebServer TcpModule Hal cjson-static StatusCode Log)
|
||||||
|
|
||||||
if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true")
|
if ("${COMPILE_IMPROVE_SUPPORT}" MATCHES "true")
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
|
||||||
if (NOT DEFINED APP_MANAGER_HTTP_SERVER_IP)
|
if (NOT DEFINED APP_MANAGER_DEVICE_IP)
|
||||||
set(APP_MANAGER_HTTP_SERVER_IP "localhost")
|
set(APP_MANAGER_DEVICE_IP "localhost")
|
||||||
endif()
|
endif()
|
||||||
add_definitions(-DAPP_MANAGER_HTTP_SERVER_IP=\"${APP_MANAGER_HTTP_SERVER_IP}\")
|
add_definitions(-DAPP_MANAGER_DEVICE_IP=\"${APP_MANAGER_DEVICE_IP}\")
|
||||||
|
|
||||||
if (NOT DEFINED APP_MANAGER_HTTP_SERVER_PORT)
|
if (NOT DEFINED APP_MANAGER_HTTP_SERVER_PORT)
|
||||||
message(FATAL_ERROR "You should set http listen port.
|
message(FATAL_ERROR "You should set http listen port.
|
||||||
|
@ -10,3 +10,9 @@ if (NOT DEFINED APP_MANAGER_HTTP_SERVER_PORT)
|
||||||
Refer to:${IPC_SDK_PATH}/builde/cmake/toolchain/linux.toolchain.cmake")
|
Refer to:${IPC_SDK_PATH}/builde/cmake/toolchain/linux.toolchain.cmake")
|
||||||
endif()
|
endif()
|
||||||
add_definitions(-DAPP_MANAGER_HTTP_SERVER_PORT=${APP_MANAGER_HTTP_SERVER_PORT})
|
add_definitions(-DAPP_MANAGER_HTTP_SERVER_PORT=${APP_MANAGER_HTTP_SERVER_PORT})
|
||||||
|
if (NOT DEFINED APP_MANAGER_TCP_SERVER_PORT)
|
||||||
|
message(FATAL_ERROR "You should set TCP listen port.
|
||||||
|
Example: set(APP_MANAGER_TCP_SERVER_PORT \"8888\")
|
||||||
|
Refer to:${IPC_SDK_PATH}/builde/cmake/toolchain/linux.toolchain.cmake")
|
||||||
|
endif()
|
||||||
|
add_definitions(-DAPP_MANAGER_TCP_SERVER_PORT=${APP_MANAGER_TCP_SERVER_PORT})
|
||||||
|
|
|
@ -151,6 +151,24 @@ enum class FileCopy
|
||||||
SUPPORT_COPY,
|
SUPPORT_COPY,
|
||||||
END
|
END
|
||||||
};
|
};
|
||||||
|
enum class RecordingStatus
|
||||||
|
{
|
||||||
|
RECORDING_STOP = 0,
|
||||||
|
RECORDING_START,
|
||||||
|
END
|
||||||
|
};
|
||||||
|
enum class MicrophoneStatus
|
||||||
|
{
|
||||||
|
OFF = 0,
|
||||||
|
ON,
|
||||||
|
END
|
||||||
|
};
|
||||||
|
enum class BatteryStatus
|
||||||
|
{
|
||||||
|
CHARGING = 0,
|
||||||
|
NOT_CHARGING,
|
||||||
|
END
|
||||||
|
};
|
||||||
typedef struct app_get_product_info
|
typedef struct app_get_product_info
|
||||||
{
|
{
|
||||||
app_get_product_info()
|
app_get_product_info()
|
||||||
|
@ -327,6 +345,18 @@ typedef struct app_get_thumbnail
|
||||||
const std::string mFile;
|
const std::string mFile;
|
||||||
std::string mThumbnail;
|
std::string mThumbnail;
|
||||||
} AppGetThumbnail;
|
} AppGetThumbnail;
|
||||||
|
class VAppClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VAppClient() = default;
|
||||||
|
virtual ~VAppClient() = default;
|
||||||
|
virtual void SetRecordingStatus(const RecordingStatus &status);
|
||||||
|
virtual void SetMicrophoneStatus(const MicrophoneStatus &status);
|
||||||
|
virtual void SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity);
|
||||||
|
virtual void SetSdCardStatus(const SdCardStatus &status);
|
||||||
|
virtual void DeletedFileMessage(const std::string &file, const StorageFileType &type);
|
||||||
|
virtual void CreatedFileMessage(const std::string &file, const StorageFileType &type);
|
||||||
|
};
|
||||||
class VAppMonitor
|
class VAppMonitor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -349,14 +379,16 @@ public:
|
||||||
virtual StatusCode AppPlayback(const PlayBackEvent &event);
|
virtual StatusCode AppPlayback(const PlayBackEvent &event);
|
||||||
virtual StatusCode UploadFile(AppUploadFile ¶m);
|
virtual StatusCode UploadFile(AppUploadFile ¶m);
|
||||||
virtual StatusCode GetThumbnail(AppGetThumbnail ¶m);
|
virtual StatusCode GetThumbnail(AppGetThumbnail ¶m);
|
||||||
|
virtual StatusCode AppClientConnected(std::shared_ptr<VAppClient> &client);
|
||||||
};
|
};
|
||||||
typedef struct app_param
|
typedef struct app_param
|
||||||
{
|
{
|
||||||
app_param(const char *ip, const int port) : mIP(ip), mPort(port)
|
app_param(const char *ip, const int &httpPort, const int &tcpPort) : mIP(ip), mHttpPort(httpPort), mTcpPort(tcpPort)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
const char *mIP;
|
const char *mIP;
|
||||||
const int mPort;
|
const int mHttpPort;
|
||||||
|
const int mTcpPort;
|
||||||
} AppParam;
|
} AppParam;
|
||||||
class IAppManager
|
class IAppManager
|
||||||
{
|
{
|
||||||
|
|
51
middleware/AppManager/src/AppClient.cpp
Normal file
51
middleware/AppManager/src/AppClient.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Fancy Code.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#include "AppClient.h"
|
||||||
|
#include "IAppProtocolHandle.h"
|
||||||
|
#include "TcpModule.h"
|
||||||
|
AppClient::AppClient(const void *clientObject) : mClientObject(clientObject)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void AppClient::SetRecordingStatus(const RecordingStatus &status)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet = IAppProtocolHandle::GetInstance()->SetRecordingStatus(status);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
||||||
|
void AppClient::SetMicrophoneStatus(const MicrophoneStatus &status)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet = IAppProtocolHandle::GetInstance()->SetMicrophoneStatus(status);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
||||||
|
void AppClient::SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet =
|
||||||
|
IAppProtocolHandle::GetInstance()->SetBatteryStatus(status, batteryCapacity);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
||||||
|
void AppClient::SetSdCardStatus(const SdCardStatus &status)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet = IAppProtocolHandle::GetInstance()->SetSdCardStatus(status);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
||||||
|
void AppClient::DeletedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet = IAppProtocolHandle::GetInstance()->DeletedFileMessage(file, type);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
||||||
|
void AppClient::CreatedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
std::shared_ptr<ProtocolPacket> packet = IAppProtocolHandle::GetInstance()->CreatedFileMessage(file, type);
|
||||||
|
AcceptClientWrite((void *)mClientObject, packet->mData, packet->mDataLength);
|
||||||
|
}
|
33
middleware/AppManager/src/AppClient.h
Normal file
33
middleware/AppManager/src/AppClient.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Fancy Code.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#ifndef APP_CLIENT_H
|
||||||
|
#define APP_CLIENT_H
|
||||||
|
#include "IAppManager.h"
|
||||||
|
class AppClient : public VAppClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AppClient(const void *clientObject);
|
||||||
|
virtual ~AppClient() = default;
|
||||||
|
void SetRecordingStatus(const RecordingStatus &status) override;
|
||||||
|
void SetMicrophoneStatus(const MicrophoneStatus &status) override;
|
||||||
|
void SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity) override;
|
||||||
|
void SetSdCardStatus(const SdCardStatus &status) override;
|
||||||
|
void DeletedFileMessage(const std::string &file, const StorageFileType &type) override;
|
||||||
|
void CreatedFileMessage(const std::string &file, const StorageFileType &type) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const void *mClientObject;
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -13,15 +13,15 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
#include "AppManager.h"
|
#include "AppManager.h"
|
||||||
|
#include "AppClient.h"
|
||||||
#include "AppManagerMakePtr.h"
|
#include "AppManagerMakePtr.h"
|
||||||
// #include "FxHttpServer.h"
|
|
||||||
#include "IHalCpp.h"
|
#include "IHalCpp.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
|
#include "TcpModule.h"
|
||||||
#include "WebServer.h"
|
#include "WebServer.h"
|
||||||
AppManager::AppManager()
|
AppManager::AppManager()
|
||||||
{
|
{
|
||||||
// mHttpServerRuning = false;
|
mTcpServer = nullptr;
|
||||||
mProtocolHandle = std::make_shared<IAppProtocolHandle>();
|
|
||||||
}
|
}
|
||||||
const StatusCode AppManager::Init(const AppParam ¶m)
|
const StatusCode AppManager::Init(const AppParam ¶m)
|
||||||
{
|
{
|
||||||
|
@ -32,26 +32,53 @@ const StatusCode AppManager::Init(const AppParam ¶m)
|
||||||
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
return CreateStatusCode(STATUS_CODE_NOT_OK);
|
||||||
}
|
}
|
||||||
wifi->OpenApMode();
|
wifi->OpenApMode();
|
||||||
AppManagerMakePtr::GetInstance()->CreateProtocolHandle(mProtocolHandle);
|
std::shared_ptr<IAppProtocolHandle> protocolHandle;
|
||||||
|
AppManagerMakePtr::GetInstance()->CreateProtocolHandle(protocolHandle);
|
||||||
|
IAppProtocolHandle::GetInstance(&protocolHandle);
|
||||||
HttpServerStart(param);
|
HttpServerStart(param);
|
||||||
|
TcpServerStart(param);
|
||||||
return CreateStatusCode(STATUS_CODE_OK);
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
const StatusCode AppManager::UnInit(void)
|
const StatusCode AppManager::UnInit(void)
|
||||||
{
|
{
|
||||||
HttpServerStop();
|
HttpServerStop();
|
||||||
mProtocolHandle.reset();
|
TcpServerStop();
|
||||||
|
std::shared_ptr<IAppProtocolHandle> protocolHandle = std::make_shared<IAppProtocolHandle>();
|
||||||
|
IAppProtocolHandle::GetInstance(&protocolHandle);
|
||||||
|
mAppMonitor.reset();
|
||||||
return CreateStatusCode(STATUS_CODE_OK);
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
const StatusCode AppManager::SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
const StatusCode AppManager::SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
||||||
{
|
{
|
||||||
mProtocolHandle->SetAppMonitor(monitor);
|
IAppProtocolHandle::GetInstance()->SetAppMonitor(monitor);
|
||||||
|
mAppMonitor = monitor;
|
||||||
return CreateStatusCode(STATUS_CODE_OK);
|
return CreateStatusCode(STATUS_CODE_OK);
|
||||||
}
|
}
|
||||||
void AppManager::AppRequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle,
|
void AppManager::AppRequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle,
|
||||||
void *context)
|
void *context)
|
||||||
{
|
{
|
||||||
//
|
IAppProtocolHandle::GetInstance()->RequestHandle(url, urlLength, responseHandle, context);
|
||||||
mProtocolHandle->RequestHandle(url, urlLength, responseHandle, context);
|
}
|
||||||
|
void AppManager::AppRequestHandleTcp(const char *data, const unsigned int dataLength, ResponseHandle responseHandle,
|
||||||
|
void *context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void AppManager::AppClientConnected(const void *client, const char *ip)
|
||||||
|
{
|
||||||
|
void *object = (void *)client;
|
||||||
|
mAppClients[object] = std::make_shared<AppClient>(client);
|
||||||
|
mAppMonitor->AppClientConnected(mAppClients[object]);
|
||||||
|
}
|
||||||
|
void AppManager::AppClientClosed(const void *client)
|
||||||
|
{
|
||||||
|
void *object = (void *)client;
|
||||||
|
auto it = mAppClients.find(object);
|
||||||
|
if (it != mAppClients.end()) {
|
||||||
|
mAppClients.erase(it);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LogError("App client not exit.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void AppManager::HttpServerStart(const AppParam ¶m)
|
void AppManager::HttpServerStart(const AppParam ¶m)
|
||||||
{
|
{
|
||||||
|
@ -63,7 +90,6 @@ void AppManager::HttpServerStart(const AppParam ¶m)
|
||||||
}
|
}
|
||||||
void AppManager::HttpServerStop(void)
|
void AppManager::HttpServerStop(void)
|
||||||
{
|
{
|
||||||
// FxHttpServerExit();
|
|
||||||
WebServerExit();
|
WebServerExit();
|
||||||
if (mHttpSever.joinable()) {
|
if (mHttpSever.joinable()) {
|
||||||
mHttpSever.join();
|
mHttpSever.join();
|
||||||
|
@ -81,9 +107,53 @@ void AppManager::HttpServerThread(const AppParam ¶m)
|
||||||
appImpl->AppRequestHandle(url, urlLength, responseHandle, context);
|
appImpl->AppRequestHandle(url, urlLength, responseHandle, context);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// FxHttpServerInit(httpHandle, 8080);
|
WebServerParam web = {.mIp = param.mIP, .mPort = param.mHttpPort, .mHttpRequestHandle = httpHandle};
|
||||||
// FxHttpServerUnInit();
|
|
||||||
WebServerParam web = {.mIp = param.mIP, .mPort = param.mPort, .mHttpRequestHandle = httpHandle};
|
|
||||||
WebServerInit(web);
|
WebServerInit(web);
|
||||||
WebServerUnInit();
|
WebServerUnInit();
|
||||||
|
}
|
||||||
|
void AppManager::TcpServerStart(const AppParam ¶m)
|
||||||
|
{
|
||||||
|
auto acceptClientFunc = [](void *object, const char *ip) -> bool {
|
||||||
|
LogInfo("accept client, peer ip: %s\n", ip);
|
||||||
|
if (nullptr != object) {
|
||||||
|
std::shared_ptr<IAppManager> app = IAppManager::GetInstance();
|
||||||
|
std::shared_ptr<AppManager> appImpl = std::dynamic_pointer_cast<AppManager>(app);
|
||||||
|
if (appImpl) {
|
||||||
|
appImpl->AppClientConnected(object, ip);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
auto readFunc = [](const void *data, const ssize_t len, const void *object) -> void {
|
||||||
|
LogInfo("read data: %s\n", (char *)data);
|
||||||
|
};
|
||||||
|
auto closedFunc = [](const void *object) -> void {
|
||||||
|
LogInfo("closed.\n");
|
||||||
|
std::shared_ptr<IAppManager> app = IAppManager::GetInstance();
|
||||||
|
std::shared_ptr<AppManager> appImpl = std::dynamic_pointer_cast<AppManager>(app);
|
||||||
|
if (appImpl) {
|
||||||
|
appImpl->AppClientClosed(object);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
TcpServerParam tcpServerparam = {
|
||||||
|
.mIp = param.mIP,
|
||||||
|
.mPort = param.mTcpPort,
|
||||||
|
.mAcceptClientFunc = acceptClientFunc,
|
||||||
|
.mClientAcceptParam =
|
||||||
|
{
|
||||||
|
.mReadFunc = readFunc,
|
||||||
|
.mClosedFunc = closedFunc,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
mTcpServer = CreateTcpServer(tcpServerparam);
|
||||||
|
if (nullptr == mTcpServer) {
|
||||||
|
LogError("Create tcp server failed.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void AppManager::TcpServerStop(void)
|
||||||
|
{
|
||||||
|
if (nullptr != mTcpServer) {
|
||||||
|
FreeTcpServer(mTcpServer);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
#define APP_MANAGER_H
|
#define APP_MANAGER_H
|
||||||
#include "IAppManager.h"
|
#include "IAppManager.h"
|
||||||
#include "IAppProtocolHandle.h"
|
#include "IAppProtocolHandle.h"
|
||||||
|
#include <map>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
class AppManager : public IAppManager, public std::enable_shared_from_this<AppManager>
|
class AppManager : public IAppManager, public std::enable_shared_from_this<AppManager>
|
||||||
{
|
{
|
||||||
|
@ -26,6 +27,10 @@ public:
|
||||||
const StatusCode UnInit(void) override;
|
const StatusCode UnInit(void) override;
|
||||||
const StatusCode SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor) override;
|
const StatusCode SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor) override;
|
||||||
void AppRequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle, void *context);
|
void AppRequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle, void *context);
|
||||||
|
void AppRequestHandleTcp(const char *data, const unsigned int dataLength, ResponseHandle responseHandle,
|
||||||
|
void *context);
|
||||||
|
void AppClientConnected(const void *client, const char *ip);
|
||||||
|
void AppClientClosed(const void *client);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void HttpServerStart(const AppParam ¶m);
|
void HttpServerStart(const AppParam ¶m);
|
||||||
|
@ -33,9 +38,15 @@ private:
|
||||||
void HttpServerThread(const AppParam ¶m);
|
void HttpServerThread(const AppParam ¶m);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// bool mHttpServerRuning;
|
void TcpServerStart(const AppParam ¶m);
|
||||||
|
void TcpServerStop(void);
|
||||||
|
|
||||||
|
private:
|
||||||
std::thread mHttpSever;
|
std::thread mHttpSever;
|
||||||
std::shared_ptr<IAppProtocolHandle> mProtocolHandle;
|
std::shared_ptr<IAppProtocolHandle> mProtocolHandle;
|
||||||
|
void *mTcpServer;
|
||||||
|
std::shared_ptr<VAppMonitor> mAppMonitor;
|
||||||
|
std::map<void *, std::shared_ptr<VAppClient>> mAppClients;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -14,6 +14,24 @@
|
||||||
*/
|
*/
|
||||||
#include "IAppManager.h"
|
#include "IAppManager.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
|
void VAppClient::SetRecordingStatus(const RecordingStatus &status)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void VAppClient::SetMicrophoneStatus(const MicrophoneStatus &status)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void VAppClient::SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void VAppClient::SetSdCardStatus(const SdCardStatus &status)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void VAppClient::DeletedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void VAppClient::CreatedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
}
|
||||||
StatusCode VAppMonitor::GetProductInfo(AppGetProductInfo ¶m)
|
StatusCode VAppMonitor::GetProductInfo(AppGetProductInfo ¶m)
|
||||||
{
|
{
|
||||||
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
|
@ -82,6 +100,10 @@ StatusCode VAppMonitor::GetThumbnail(AppGetThumbnail ¶m)
|
||||||
{
|
{
|
||||||
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
}
|
}
|
||||||
|
StatusCode VAppMonitor::AppClientConnected(std::shared_ptr<VAppClient> &client)
|
||||||
|
{
|
||||||
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
|
}
|
||||||
std::shared_ptr<IAppManager> &IAppManager::GetInstance(std::shared_ptr<IAppManager> *impl)
|
std::shared_ptr<IAppManager> &IAppManager::GetInstance(std::shared_ptr<IAppManager> *impl)
|
||||||
{
|
{
|
||||||
static auto instance = std::make_shared<IAppManager>();
|
static auto instance = std::make_shared<IAppManager>();
|
||||||
|
|
81
middleware/AppManager/src/IAppProtocolHandle.cpp
Normal file
81
middleware/AppManager/src/IAppProtocolHandle.cpp
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 Fancy Code.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
#include "IAppProtocolHandle.h"
|
||||||
|
#include "ILog.h"
|
||||||
|
protocol_packet::~protocol_packet()
|
||||||
|
{
|
||||||
|
if (nullptr != mData) {
|
||||||
|
free(mData);
|
||||||
|
mData = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::shared_ptr<IAppProtocolHandle> &IAppProtocolHandle::GetInstance(std::shared_ptr<IAppProtocolHandle> *impl)
|
||||||
|
{
|
||||||
|
static auto instance = std::make_shared<IAppProtocolHandle>();
|
||||||
|
if (impl) {
|
||||||
|
if (instance.use_count() == 1) {
|
||||||
|
LogInfo("Instance changed succeed.\n");
|
||||||
|
instance = *impl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LogError("Can't changing the instance becase of using by some one.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
void IAppProtocolHandle::Init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void IAppProtocolHandle::UnInit(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void IAppProtocolHandle::RequestHandle(const char *url, const unsigned int &urlLength, ResponseHandle responseHandle,
|
||||||
|
void *context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void IAppProtocolHandle::RequestHandleTcp(const char *data, const unsigned int &dataLength,
|
||||||
|
ResponseHandle responseHandle, void *context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void IAppProtocolHandle::SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::SetRecordingStatus(const RecordingStatus &status)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::SetMicrophoneStatus(const MicrophoneStatus &status)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::SetBatteryStatus(const BatteryStatus &status,
|
||||||
|
const int &batteryCapacity)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::SetSdCardStatus(const SdCardStatus &status)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::DeletedFileMessage(const std::string &file,
|
||||||
|
const StorageFileType &type)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> IAppProtocolHandle::CreatedFileMessage(const std::string &file,
|
||||||
|
const StorageFileType &type)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
|
@ -14,11 +14,24 @@
|
||||||
*/
|
*/
|
||||||
#ifndef I_APP_PROTOCOL_HANDLE_H
|
#ifndef I_APP_PROTOCOL_HANDLE_H
|
||||||
#define I_APP_PROTOCOL_HANDLE_H
|
#define I_APP_PROTOCOL_HANDLE_H
|
||||||
|
#include "IAppManager.h"
|
||||||
#include "StatusCode.h"
|
#include "StatusCode.h"
|
||||||
#include "WebServer.h"
|
#include "WebServer.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
typedef struct protocol_packet
|
||||||
|
{
|
||||||
|
protocol_packet() : mData(nullptr), mDataLength(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
protocol_packet(void *data, const size_t &size) : mData(data), mDataLength(size)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
~protocol_packet();
|
||||||
|
void *mData;
|
||||||
|
size_t mDataLength;
|
||||||
|
} ProtocolPacket;
|
||||||
class VAppDataPacket
|
class VAppDataPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -30,18 +43,19 @@ class IAppProtocolHandle
|
||||||
public:
|
public:
|
||||||
IAppProtocolHandle() = default;
|
IAppProtocolHandle() = default;
|
||||||
virtual ~IAppProtocolHandle() = default;
|
virtual ~IAppProtocolHandle() = default;
|
||||||
virtual void Init(void)
|
static std::shared_ptr<IAppProtocolHandle> &GetInstance(std::shared_ptr<IAppProtocolHandle> *impl = nullptr);
|
||||||
{
|
virtual void Init(void);
|
||||||
}
|
virtual void UnInit(void);
|
||||||
virtual void UnInit(void)
|
virtual void RequestHandle(const char *url, const unsigned int &urlLength, ResponseHandle responseHandle,
|
||||||
{
|
void *context);
|
||||||
}
|
virtual void RequestHandleTcp(const char *data, const unsigned int &dataLength, ResponseHandle responseHandle,
|
||||||
virtual void RequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle,
|
void *context);
|
||||||
void *context)
|
virtual void SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor);
|
||||||
{
|
virtual std::shared_ptr<ProtocolPacket> SetRecordingStatus(const RecordingStatus &status);
|
||||||
}
|
virtual std::shared_ptr<ProtocolPacket> SetMicrophoneStatus(const MicrophoneStatus &status);
|
||||||
virtual void SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
virtual std::shared_ptr<ProtocolPacket> SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity);
|
||||||
{
|
virtual std::shared_ptr<ProtocolPacket> SetSdCardStatus(const SdCardStatus &status);
|
||||||
}
|
virtual std::shared_ptr<ProtocolPacket> DeletedFileMessage(const std::string &file, const StorageFileType &type);
|
||||||
|
virtual std::shared_ptr<ProtocolPacket> CreatedFileMessage(const std::string &file, const StorageFileType &type);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
|
@ -14,13 +14,16 @@
|
||||||
*/
|
*/
|
||||||
#include "SixFrameHandle.h"
|
#include "SixFrameHandle.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
|
#include <cstring>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
using std::placeholders::_1;
|
using std::placeholders::_1;
|
||||||
using std::placeholders::_2;
|
using std::placeholders::_2;
|
||||||
using std::placeholders::_3;
|
using std::placeholders::_3;
|
||||||
// using std::placeholders::_4;
|
// using std::placeholders::_4;
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
const char *TCP_RESULT_MSGID = "msgid";
|
||||||
const char *CJSON_INFO_STRING = "info";
|
const char *CJSON_INFO_STRING = "info";
|
||||||
const char *CJSON_FILES_STRING = "files";
|
const char *CJSON_FILES_STRING = "files";
|
||||||
const char *APP_GET_PRODUCT_INFO = "/app/getproductinfo";
|
const char *APP_GET_PRODUCT_INFO = "/app/getproductinfo";
|
||||||
|
@ -67,7 +70,7 @@ SixFrameHandle::SixFrameHandle()
|
||||||
mResquesHandleFunc[APP_GET_THUMBNAIL] = std::bind(&SixFrameHandle::RequestGetThumbnail, this, _1, _2, _3);
|
mResquesHandleFunc[APP_GET_THUMBNAIL] = std::bind(&SixFrameHandle::RequestGetThumbnail, this, _1, _2, _3);
|
||||||
// mResquesHandleFunc["favicon.ico"] = std::bind(&SixFrameHandle::DoNothing, this, _1, _2, _);
|
// mResquesHandleFunc["favicon.ico"] = std::bind(&SixFrameHandle::DoNothing, this, _1, _2, _);
|
||||||
}
|
}
|
||||||
void SixFrameHandle::RequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle,
|
void SixFrameHandle::RequestHandle(const char *url, const unsigned int &urlLength, ResponseHandle responseHandle,
|
||||||
void *context)
|
void *context)
|
||||||
{
|
{
|
||||||
const std::string urlStr2 = url;
|
const std::string urlStr2 = url;
|
||||||
|
@ -81,9 +84,27 @@ void SixFrameHandle::RequestHandle(const char *url, const unsigned int urlLength
|
||||||
command = urlStr2.substr(0, urlStr2.length());
|
command = urlStr2.substr(0, urlStr2.length());
|
||||||
}
|
}
|
||||||
LogInfo("command = %s\n", command.c_str());
|
LogInfo("command = %s\n", command.c_str());
|
||||||
// ExtractParamsFromUrl(urlStr2, paramsMap);
|
|
||||||
RequestHandle2(command, urlStr2, responseHandle, context);
|
RequestHandle2(command, urlStr2, responseHandle, context);
|
||||||
}
|
}
|
||||||
|
void SixFrameHandle::RequestHandleTcp(const char *data, const unsigned int &dataLength, ResponseHandle responseHandle,
|
||||||
|
void *context)
|
||||||
|
{
|
||||||
|
cJSON *parsed = nullptr;
|
||||||
|
std::string command = "";
|
||||||
|
parsed = cJSON_Parse(data);
|
||||||
|
if (nullptr == parsed) {
|
||||||
|
LogError("cJSON_Parse failed.\n");
|
||||||
|
responseHandle("Device run out of memory.", context);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cJSON *msgid = cJSON_GetObjectItem(parsed, "msgid");
|
||||||
|
if (cJSON_IsString(msgid)) {
|
||||||
|
command = cJSON_GetStringValue(msgid);
|
||||||
|
}
|
||||||
|
LogInfo("command = %s\n", command.c_str());
|
||||||
|
RequestTcpHandle2(command, parsed, responseHandle, context);
|
||||||
|
cJSON_Delete(parsed);
|
||||||
|
}
|
||||||
void SixFrameHandle::ExtractParamsFromUrl(const std::string &url, ParseUrlResultFunc resultHandle,
|
void SixFrameHandle::ExtractParamsFromUrl(const std::string &url, ParseUrlResultFunc resultHandle,
|
||||||
std::shared_ptr<VParseUrl> &context)
|
std::shared_ptr<VParseUrl> &context)
|
||||||
{
|
{
|
||||||
|
@ -662,6 +683,47 @@ void SixFrameHandle::RequestGetThumbnail(const std::string &url, ResponseHandle
|
||||||
// respon.mThumbnail = "./34a396526922a33e97906920dbfef2a5.jpg";
|
// respon.mThumbnail = "./34a396526922a33e97906920dbfef2a5.jpg";
|
||||||
responseHandle(respon.mThumbnail.c_str(), context);
|
responseHandle(respon.mThumbnail.c_str(), context);
|
||||||
}
|
}
|
||||||
|
void SixFrameHandle::RequestTcpHandle2(const std::string command, const cJSON *const data,
|
||||||
|
ResponseHandle responseHandle, void *context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::SetRecordingStatus(const RecordingStatus &status)
|
||||||
|
{
|
||||||
|
cJSON *resultCJSON = cJSON_CreateObject();
|
||||||
|
if (nullptr == resultCJSON) {
|
||||||
|
LogError("cJSON_CreateObject failed.\n");
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
cJSON_AddStringToObject(resultCJSON, TCP_RESULT_MSGID, "rec");
|
||||||
|
cJSON *info = cJSON_CreateObject();
|
||||||
|
if (nullptr != info) {
|
||||||
|
cJSON_AddNumberToObject(info, "value", static_cast<int>(status));
|
||||||
|
cJSON_AddItemToObject(resultCJSON, CJSON_INFO_STRING, info);
|
||||||
|
}
|
||||||
|
AddTimestamp(resultCJSON);
|
||||||
|
return MakePacket(resultCJSON);
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::SetMicrophoneStatus(const MicrophoneStatus &status)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::SetBatteryStatus(const BatteryStatus &status,
|
||||||
|
const int &batteryCapacity)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::SetSdCardStatus(const SdCardStatus &status)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::DeletedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::CreatedFileMessage(const std::string &file, const StorageFileType &type)
|
||||||
|
{
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
cJSON *SixFrameHandle::MakeResponseResult(const ResposeResult result, const bool requestSet)
|
cJSON *SixFrameHandle::MakeResponseResult(const ResposeResult result, const bool requestSet)
|
||||||
{
|
{
|
||||||
const char *RESPONSE_RESULT = "result";
|
const char *RESPONSE_RESULT = "result";
|
||||||
|
@ -711,6 +773,29 @@ const char *SixFrameHandle::PrintfFileEvent(const AppGetFileInfo &fileInfo)
|
||||||
}
|
}
|
||||||
return "unknown event";
|
return "unknown event";
|
||||||
}
|
}
|
||||||
|
void SixFrameHandle::AddTimestamp(cJSON *json)
|
||||||
|
{
|
||||||
|
time_t current_time;
|
||||||
|
current_time = time(nullptr);
|
||||||
|
|
||||||
|
if (current_time == -1) {
|
||||||
|
LogError("Error getting the time\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cJSON_AddNumberToObject(json, "time", current_time);
|
||||||
|
}
|
||||||
|
std::shared_ptr<ProtocolPacket> SixFrameHandle::MakePacket(const cJSON *json)
|
||||||
|
{
|
||||||
|
char *resultStr = nullptr;
|
||||||
|
resultStr = cJSON_Print(json);
|
||||||
|
if (nullptr != resultStr) {
|
||||||
|
return std::make_shared<ProtocolPacket>(resultStr, strlen(resultStr));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LogError("MakePacket failed.\n");
|
||||||
|
return std::make_shared<ProtocolPacket>();
|
||||||
|
}
|
||||||
|
}
|
||||||
void SixFrameHandle::SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
void SixFrameHandle::SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor)
|
||||||
{
|
{
|
||||||
if (monitor) {
|
if (monitor) {
|
||||||
|
|
|
@ -51,8 +51,10 @@ public:
|
||||||
virtual ~SixFrameHandle() = default;
|
virtual ~SixFrameHandle() = default;
|
||||||
// virtual void Init(void) {}
|
// virtual void Init(void) {}
|
||||||
// virtual void UnInit(void) {}
|
// virtual void UnInit(void) {}
|
||||||
void RequestHandle(const char *url, const unsigned int urlLength, ResponseHandle responseHandle,
|
void RequestHandle(const char *url, const unsigned int &urlLength, ResponseHandle responseHandle,
|
||||||
void *context) override;
|
void *context) override;
|
||||||
|
void RequestHandleTcp(const char *data, const unsigned int &dataLength, ResponseHandle responseHandle,
|
||||||
|
void *context) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ExtractParamsFromUrl(const std::string &url, ParseUrlResultFunc resultHandle,
|
void ExtractParamsFromUrl(const std::string &url, ParseUrlResultFunc resultHandle,
|
||||||
|
@ -95,10 +97,22 @@ private:
|
||||||
std::string RequestGetThumbnailParse(const std::string &url);
|
std::string RequestGetThumbnailParse(const std::string &url);
|
||||||
void RequestGetThumbnail(const std::string &url, ResponseHandle responseHandle, void *context);
|
void RequestGetThumbnail(const std::string &url, ResponseHandle responseHandle, void *context);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void RequestTcpHandle2(const std::string command, const cJSON *const data, ResponseHandle responseHandle,
|
||||||
|
void *context); // TODO: delete
|
||||||
|
std::shared_ptr<ProtocolPacket> SetRecordingStatus(const RecordingStatus &status) override;
|
||||||
|
std::shared_ptr<ProtocolPacket> SetMicrophoneStatus(const MicrophoneStatus &status) override;
|
||||||
|
std::shared_ptr<ProtocolPacket> SetBatteryStatus(const BatteryStatus &status, const int &batteryCapacity) override;
|
||||||
|
std::shared_ptr<ProtocolPacket> SetSdCardStatus(const SdCardStatus &status) override;
|
||||||
|
std::shared_ptr<ProtocolPacket> DeletedFileMessage(const std::string &file, const StorageFileType &type) override;
|
||||||
|
std::shared_ptr<ProtocolPacket> CreatedFileMessage(const std::string &file, const StorageFileType &type) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cJSON *MakeResponseResult(const ResposeResult result, const bool requestSet = false);
|
cJSON *MakeResponseResult(const ResposeResult result, const bool requestSet = false);
|
||||||
void ResponseJsonString(cJSON *json, ResponseHandle responseHandle, void *context);
|
void ResponseJsonString(cJSON *json, ResponseHandle responseHandle, void *context);
|
||||||
const char *PrintfFileEvent(const AppGetFileInfo &fileInfo);
|
const char *PrintfFileEvent(const AppGetFileInfo &fileInfo);
|
||||||
|
void AddTimestamp(cJSON *json);
|
||||||
|
std::shared_ptr<ProtocolPacket> MakePacket(const cJSON *json);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor) override;
|
void SetAppMonitor(std::shared_ptr<VAppMonitor> &monitor) override;
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace AppManagerTest
|
||||||
class AppManagerTest : public testing::Test, public AppManagerTestTool, public HalTestTool
|
class AppManagerTest : public testing::Test, public AppManagerTestTool, public HalTestTool
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AppManagerTest() : mAppParam(APP_MANAGER_HTTP_SERVER_IP, APP_MANAGER_HTTP_SERVER_PORT)
|
AppManagerTest() : mAppParam(APP_MANAGER_DEVICE_IP, APP_MANAGER_HTTP_SERVER_PORT, APP_MANAGER_TCP_SERVER_PORT)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
virtual ~AppManagerTest()
|
virtual ~AppManagerTest()
|
||||||
|
@ -64,7 +64,8 @@ TEST_F(AppManagerTest, INTEGRATION_AppManager_EXAMPLE_Demo0)
|
||||||
IAppManager::GetInstance()->Init(mAppParam);
|
IAppManager::GetInstance()->Init(mAppParam);
|
||||||
IAppManager::GetInstance()->SetAppMonitor(monitor);
|
IAppManager::GetInstance()->SetAppMonitor(monitor);
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(200000));
|
MockAppClientConnect();
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
||||||
IAppManager::GetInstance()->UnInit();
|
IAppManager::GetInstance()->UnInit();
|
||||||
}
|
}
|
||||||
// ../output_files/test/bin/AppManagerTest --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_Demo
|
// ../output_files/test/bin/AppManagerTest --gtest_filter=AppManagerTest.INTEGRATION_AppManager_EXAMPLE_Demo
|
||||||
|
|
|
@ -9,6 +9,7 @@ include_directories(
|
||||||
${UTILS_SOURCE_PATH}/StatusCode/include
|
${UTILS_SOURCE_PATH}/StatusCode/include
|
||||||
${UTILS_SOURCE_PATH}/Log/include
|
${UTILS_SOURCE_PATH}/Log/include
|
||||||
${UTILS_SOURCE_PATH}/Servers/include
|
${UTILS_SOURCE_PATH}/Servers/include
|
||||||
|
${UTILS_SOURCE_PATH}/TcpModule/include
|
||||||
${MIDDLEWARE_SOURCE_PATH}/AppManager/src
|
${MIDDLEWARE_SOURCE_PATH}/AppManager/src
|
||||||
${MIDDLEWARE_SOURCE_PATH}/AppManager/src/Protocol/SixFrame
|
${MIDDLEWARE_SOURCE_PATH}/AppManager/src/Protocol/SixFrame
|
||||||
${TEST_SOURCE_PATH}
|
${TEST_SOURCE_PATH}
|
||||||
|
|
|
@ -44,6 +44,9 @@ protected:
|
||||||
void MockAppPlayback(void);
|
void MockAppPlayback(void);
|
||||||
void MockMonitorSetFileList(std::vector<AppGetFileList> &files);
|
void MockMonitorSetFileList(std::vector<AppGetFileList> &files);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void MockAppClientConnect(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void AppManagerMockInit(std::shared_ptr<IAppManager> &vMock);
|
void AppManagerMockInit(std::shared_ptr<IAppManager> &vMock);
|
||||||
void AppMonitorInit(std::shared_ptr<VAppMonitor> &vMock);
|
void AppMonitorInit(std::shared_ptr<VAppMonitor> &vMock);
|
||||||
|
@ -51,6 +54,8 @@ private:
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<IAppManager> mAppManagerMock;
|
std::shared_ptr<IAppManager> mAppManagerMock;
|
||||||
std::shared_ptr<VAppMonitor> mAppMonitorMock;
|
std::shared_ptr<VAppMonitor> mAppMonitorMock;
|
||||||
|
void *mAppClientTool;
|
||||||
|
std::shared_ptr<VAppClient> mAppClient;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static std::shared_ptr<VAppMonitor> MakeMonitorMock(void);
|
static std::shared_ptr<VAppMonitor> MakeMonitorMock(void);
|
||||||
|
|
|
@ -27,14 +27,4 @@ const StatusCode AppManagerTest::SetAppMonitorTrace(std::shared_ptr<VAppMonitor>
|
||||||
{
|
{
|
||||||
LogInfo("AppManagerTest::SetAppMonitorTrace\n");
|
LogInfo("AppManagerTest::SetAppMonitorTrace\n");
|
||||||
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
}
|
}
|
||||||
// StatusCode AppManagerTest::GetAllLedsTrace(std::map<std::string, std::shared_ptr<VLedHal>> &allLeds)
|
|
||||||
// {
|
|
||||||
// LogInfo("AppManagerTest::GetAllLedsTrace\n");
|
|
||||||
// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
|
||||||
// }
|
|
||||||
// StatusCode AppManagerTest::GetAllKeysTrace(std::map<std::string, std::shared_ptr<VKeyHal>> &allKeys)
|
|
||||||
// {
|
|
||||||
// LogInfo("AppManagerTest::GetAllKeysTrace\n");
|
|
||||||
// return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
|
||||||
// }
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "AppMonitorMock.h"
|
#include "AppMonitorMock.h"
|
||||||
#include "ILog.h"
|
#include "ILog.h"
|
||||||
#include "ServersMock.h"
|
#include "ServersMock.h"
|
||||||
|
#include "TcpModule.h"
|
||||||
constexpr int ONLY_BE_CALLED_ONCE = 1;
|
constexpr int ONLY_BE_CALLED_ONCE = 1;
|
||||||
void AppManagerTestTool::Init(void)
|
void AppManagerTestTool::Init(void)
|
||||||
{
|
{
|
||||||
|
@ -33,6 +34,9 @@ void AppManagerTestTool::UnInit(void)
|
||||||
mAppManagerMock.reset();
|
mAppManagerMock.reset();
|
||||||
mAppMonitorMock.reset();
|
mAppMonitorMock.reset();
|
||||||
CancelOverrideAppManagerMakePtrObject();
|
CancelOverrideAppManagerMakePtrObject();
|
||||||
|
if (nullptr != mAppClientTool) {
|
||||||
|
FreeTcpClient(mAppClientTool);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void AppManagerTestTool::MockGetProductInfo(void)
|
void AppManagerTestTool::MockGetProductInfo(void)
|
||||||
{
|
{
|
||||||
|
@ -205,6 +209,36 @@ void AppManagerTestTool::MockMonitorSetFileList(std::vector<AppGetFileList> &fil
|
||||||
LogError("MockMonitorSetFileList failed, mAppMonitorMock isn't mock object.\n");
|
LogError("MockMonitorSetFileList failed, mAppMonitorMock isn't mock object.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void AppManagerTestTool::MockAppClientConnect(void)
|
||||||
|
{
|
||||||
|
std::shared_ptr<AppMonitorMock> mock = std::dynamic_pointer_cast<AppMonitorMock>(mAppMonitorMock);
|
||||||
|
if (mock) {
|
||||||
|
auto appClientConnected = [=](std::shared_ptr<VAppClient> &cliient) {
|
||||||
|
LogInfo("appClientConnected.\n");
|
||||||
|
mAppClient = cliient;
|
||||||
|
};
|
||||||
|
EXPECT_CALL(*mock.get(), AppClientConnectedTrace(_))
|
||||||
|
.Times(ONLY_BE_CALLED_ONCE)
|
||||||
|
.WillOnce(
|
||||||
|
DoAll(WithArgs<0>(Invoke(appClientConnected)), Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
||||||
|
}
|
||||||
|
auto readFunc = [](const void *data, const ssize_t len, const void *context) -> void {
|
||||||
|
LogInfo("read data: %s", (char *)data);
|
||||||
|
};
|
||||||
|
auto closedFunc = [](const void *object) -> void {
|
||||||
|
LogInfo("tcp client closed.\n");
|
||||||
|
};
|
||||||
|
TcpClientParam param = {
|
||||||
|
.mIp = APP_MANAGER_DEVICE_IP,
|
||||||
|
.mPort = APP_MANAGER_TCP_SERVER_PORT,
|
||||||
|
.mReadFunc = readFunc,
|
||||||
|
.mClosedFunc = closedFunc,
|
||||||
|
};
|
||||||
|
mAppClientTool = CreateTcpClient(param);
|
||||||
|
if (nullptr == mAppClientTool) {
|
||||||
|
LogError("CreateTcpClient failed.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
void AppManagerTestTool::AppManagerMockInit(std::shared_ptr<IAppManager> &vMock)
|
void AppManagerTestTool::AppManagerMockInit(std::shared_ptr<IAppManager> &vMock)
|
||||||
{
|
{
|
||||||
std::shared_ptr<AppManagerMock> mock = std::dynamic_pointer_cast<AppManagerMock>(vMock);
|
std::shared_ptr<AppManagerMock> mock = std::dynamic_pointer_cast<AppManagerMock>(vMock);
|
||||||
|
@ -268,5 +302,9 @@ void AppManagerTestTool::AppMonitorInit(std::shared_ptr<VAppMonitor> &vMock)
|
||||||
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
||||||
EXPECT_CALL(*mock.get(), UploadFileTrace(_))
|
EXPECT_CALL(*mock.get(), UploadFileTrace(_))
|
||||||
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
||||||
|
EXPECT_CALL(*mock.get(), GetThumbnailTrace(_))
|
||||||
|
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
||||||
|
EXPECT_CALL(*mock.get(), AppClientConnectedTrace(_))
|
||||||
|
.WillRepeatedly(DoAll(Return(CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION))));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -243,4 +243,32 @@ StatusCode AppMonitorTrace::UploadFileTrace(AppUploadFile ¶m)
|
||||||
{
|
{
|
||||||
LogInfo("AppMonitorTrace::UploadFileTrace\n");
|
LogInfo("AppMonitorTrace::UploadFileTrace\n");
|
||||||
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
|
}
|
||||||
|
StatusCode AppMonitorTest::GetThumbnail(AppGetThumbnail ¶m)
|
||||||
|
{
|
||||||
|
LogInfo("AppMonitorTest::GetThumbnail\n");
|
||||||
|
StatusCode code = GetThumbnailTrace(param);
|
||||||
|
if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) {
|
||||||
|
return VAppMonitor::GetThumbnail(param);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
StatusCode AppMonitorTrace::GetThumbnailTrace(AppGetThumbnail ¶m)
|
||||||
|
{
|
||||||
|
LogInfo("AppMonitorTrace::UploadFileTrace\n");
|
||||||
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
|
}
|
||||||
|
StatusCode AppMonitorTest::AppClientConnected(std::shared_ptr<VAppClient> &client)
|
||||||
|
{
|
||||||
|
LogInfo("AppMonitorTest::AppClientConnected\n");
|
||||||
|
StatusCode code = AppClientConnectedTrace(client);
|
||||||
|
if (StatusCodeEqual(code, "STATUS_CODE_VIRTUAL_FUNCTION")) {
|
||||||
|
return VAppMonitor::AppClientConnected(client);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
StatusCode AppMonitorTrace::AppClientConnectedTrace(std::shared_ptr<VAppClient> &client)
|
||||||
|
{
|
||||||
|
LogInfo("AppMonitorTrace::AppClientConnected\n");
|
||||||
|
return CreateStatusCode(STATUS_CODE_VIRTUAL_FUNCTION);
|
||||||
}
|
}
|
|
@ -39,6 +39,8 @@ protected:
|
||||||
virtual StatusCode EnterRecorderTrace(void);
|
virtual StatusCode EnterRecorderTrace(void);
|
||||||
virtual StatusCode AppPlaybackTrace(const PlayBackEvent &event);
|
virtual StatusCode AppPlaybackTrace(const PlayBackEvent &event);
|
||||||
virtual StatusCode UploadFileTrace(AppUploadFile ¶m);
|
virtual StatusCode UploadFileTrace(AppUploadFile ¶m);
|
||||||
|
virtual StatusCode GetThumbnailTrace(AppGetThumbnail ¶m);
|
||||||
|
virtual StatusCode AppClientConnectedTrace(std::shared_ptr<VAppClient> &client);
|
||||||
};
|
};
|
||||||
class AppMonitorTest : public VAppMonitor, virtual public AppMonitorTrace
|
class AppMonitorTest : public VAppMonitor, virtual public AppMonitorTrace
|
||||||
{
|
{
|
||||||
|
@ -61,6 +63,8 @@ public:
|
||||||
StatusCode EnterRecorder(void) override;
|
StatusCode EnterRecorder(void) override;
|
||||||
StatusCode AppPlayback(const PlayBackEvent &event) override;
|
StatusCode AppPlayback(const PlayBackEvent &event) override;
|
||||||
StatusCode UploadFile(AppUploadFile ¶m) override;
|
StatusCode UploadFile(AppUploadFile ¶m) override;
|
||||||
|
StatusCode GetThumbnail(AppGetThumbnail ¶m) override;
|
||||||
|
StatusCode AppClientConnected(std::shared_ptr<VAppClient> &client) override;
|
||||||
};
|
};
|
||||||
class AppMonitorMock : virtual public AppMonitorTrace
|
class AppMonitorMock : virtual public AppMonitorTrace
|
||||||
{
|
{
|
||||||
|
@ -83,5 +87,7 @@ public:
|
||||||
MOCK_METHOD0(EnterRecorderTrace, StatusCode(void));
|
MOCK_METHOD0(EnterRecorderTrace, StatusCode(void));
|
||||||
MOCK_METHOD1(AppPlaybackTrace, StatusCode(const PlayBackEvent &));
|
MOCK_METHOD1(AppPlaybackTrace, StatusCode(const PlayBackEvent &));
|
||||||
MOCK_METHOD1(UploadFileTrace, StatusCode(AppUploadFile &));
|
MOCK_METHOD1(UploadFileTrace, StatusCode(AppUploadFile &));
|
||||||
|
MOCK_METHOD1(GetThumbnailTrace, StatusCode(AppGetThumbnail &));
|
||||||
|
MOCK_METHOD1(AppClientConnectedTrace, StatusCode(std::shared_ptr<VAppClient> &));
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
|
@ -49,7 +49,7 @@ std::shared_ptr<ServersMock> &ServersMock::GetInstance(std::shared_ptr<ServersMo
|
||||||
ServersMock::ServersMock()
|
ServersMock::ServersMock()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
mServerUrl = APP_MANAGER_HTTP_SERVER_IP ":" + std::to_string(APP_MANAGER_HTTP_SERVER_PORT);
|
mServerUrl = APP_MANAGER_DEVICE_IP ":" + std::to_string(APP_MANAGER_HTTP_SERVER_PORT);
|
||||||
}
|
}
|
||||||
void ServersMock::Init(void)
|
void ServersMock::Init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,7 +44,6 @@ typedef struct tcp_parm
|
||||||
} TcpClientParam;
|
} TcpClientParam;
|
||||||
void *CreateTcpServer(const TcpServerParam param);
|
void *CreateTcpServer(const TcpServerParam param);
|
||||||
void FreeTcpServer(void *object);
|
void FreeTcpServer(void *object);
|
||||||
// void AcceptClientSetParam(void *object, const ClientAcceptParam param);
|
|
||||||
ssize_t AcceptClientWrite(void *object, const void *buf, const size_t bufLenght);
|
ssize_t AcceptClientWrite(void *object, const void *buf, const size_t bufLenght);
|
||||||
void AcceptClientClose(void *object);
|
void AcceptClientClose(void *object);
|
||||||
void *CreateTcpClient(const TcpClientParam param);
|
void *CreateTcpClient(const TcpClientParam param);
|
||||||
|
|
|
@ -81,6 +81,7 @@ void TcpClientImpl::Readed(const void *data, size_t length)
|
||||||
}
|
}
|
||||||
ssize_t TcpClientImpl::Write(const void *buf, const size_t bufLenght)
|
ssize_t TcpClientImpl::Write(const void *buf, const size_t bufLenght)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> locker(mMutex);
|
||||||
if (nullptr == mIo) {
|
if (nullptr == mIo) {
|
||||||
LogError("mIo is nullptr.\n");
|
LogError("mIo is nullptr.\n");
|
||||||
return TCP_MODULE_WRITE_ERROR;
|
return TCP_MODULE_WRITE_ERROR;
|
||||||
|
@ -89,6 +90,8 @@ ssize_t TcpClientImpl::Write(const void *buf, const size_t bufLenght)
|
||||||
}
|
}
|
||||||
void TcpClientImpl::Closed(void)
|
void TcpClientImpl::Closed(void)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> locker(mMutex);
|
||||||
|
mIo = nullptr;
|
||||||
if (nullptr != mParam.mClosedFunc) {
|
if (nullptr != mParam.mClosedFunc) {
|
||||||
mParam.mClosedFunc(mObjectThis);
|
mParam.mClosedFunc(mObjectThis);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "hsocket.h"
|
#include "hsocket.h"
|
||||||
#include "hssl.h"
|
#include "hssl.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
class TcpClientImpl : public ITcpClient, public std::enable_shared_from_this<TcpClientImpl>
|
class TcpClientImpl : public ITcpClient, public std::enable_shared_from_this<TcpClientImpl>
|
||||||
{
|
{
|
||||||
|
@ -34,6 +35,7 @@ public:
|
||||||
void Loop(void);
|
void Loop(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::mutex mMutex;
|
||||||
hloop_t *mLoop;
|
hloop_t *mLoop;
|
||||||
hio_t *mIo;
|
hio_t *mIo;
|
||||||
const TcpClientParam mParam;
|
const TcpClientParam mParam;
|
||||||
|
|
|
@ -58,12 +58,6 @@ void FreeTcpServer(void *object)
|
||||||
free(((char *)object) - sizeof(ITcpServerHeader)); // TODO: bug?
|
free(((char *)object) - sizeof(ITcpServerHeader)); // TODO: bug?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// void AcceptClientSetParam(void *object, const ClientAcceptParam param)
|
|
||||||
// {
|
|
||||||
// if (TcpClientAcceptObjectCheck(object) == true) {
|
|
||||||
// (*(std::shared_ptr<ITcpClientAccept> *)object)->SetParam(param);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
ssize_t AcceptClientWrite(void *object, const void *buf, const size_t bufLenght)
|
ssize_t AcceptClientWrite(void *object, const void *buf, const size_t bufLenght)
|
||||||
{
|
{
|
||||||
if (TcpClientAcceptObjectCheck(object) == true) {
|
if (TcpClientAcceptObjectCheck(object) == true) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user