/* @file DownloadTimetable.h @brief 时间表下载操作类 @author 曹顶法 */ #pragma once #include "pub_sysinfo_api/SysInfoApi.h" #include "TimetableCommon.h" #include "TimetableCtrlParamTable.h" #include "TimetableRtdbTableOperate.h" #include "TimetableMsgBusMng.h" #include "BasicOperation.h" namespace kbd_app { class CDownloadTimetable { public: CDownloadTimetable(const iot_public::SRunAppInfo &stRunAppInfo, const CParamMngPtr &ptrParamMng, const CTimetableMsgBusMngPtr &ptrMsgMng, const CBasicOperationPtr &ptrBasicOpt); virtual ~CDownloadTimetable(); /* @brief 处理下载命令 @param STimetableCmd & stCmd 下载命令 */ void handleDownloadCmd(STimetableCmd &stCmd); private: /* @brief 检查DCF、URF、RRF标识 @param STimetableCmd & stCmd 当前下载命令 @param const ETimetableCmdState eSuccessState 成功设置的状态 @param const ETimetableCmdState eFailState 失败设置的状态 @return 无 */ void checkFlag(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 等待关系库中的配置同步到内存库 @param STimetableCmd & stCmd 当前命令 @param const ETimetableCmdState eSuccessState 成功设置的状态 @param const ETimetableCmdState eFailState 失败设置的状态 @return 无 */ void waitSyncTimetableInfo(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 发送下载命令消息 @param STimetableCmd & stCmd 当前命令 @param const EDownloadState eSuccessState 成功设置的状态 @param const EDownloadState eFailState 失败设置的状态 */ void sendDownloadCmd(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 检查下载命令反馈结果 @param STimetableCmd & stCmd 当前命令 @param const EDownloadState eSuccessState 成功设置的状态 @param const EDownloadState eFailState 失败设置的状态 */ void waitDownloadResponse(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 设置下载完成标识DCF @param STimetableCmd & stCmd 当前命令 @param const ETimetableCmdState eSuccessState 成功设置的状态 @param const ETimetableCmdState eFailState 失败设置的状态 @return 无 */ void setDownloadFlag(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 等待设置下载完成标识DCF的命令反馈 @param STimetableCmd & stCmd 当前命令 @param const ETimetableCmdState eSuccessState 成功设置的状态 @param const ETimetableCmdState eFailState 失败设置的状态 @return 无 */ void waitDownloadFlagRep(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 校验时间表ID和版本号 @param STimetableCmd & stCmd 当前命令 @param const ETimetableCmdState eSuccessState 成功设置的状态 @param const ETimetableCmdState eFailState 失败设置的状态 @return 无 */ void verifyVersion(STimetableCmd &stCmd, const ETimetableCmdState eSuccessState, const ETimetableCmdState eFailState); /* @brief 下载命令完成后的处理 @param STimetableCmd & stCmd 当前命令 */ void downloadCompleted(STimetableCmd &stCmd); /* @brief 生成下载命令报文 @param const STimetableCmd & stCmd 当前命令 @param std::string & strMsg 返回的命令报文 @return 成功返回true,失败返回false */ bool makeDownloadMsg(const STimetableCmd &stCmd, std::string &strMsg); private: iot_public::SRunAppInfo m_stRunAppInfo; //< 本应用相关运行参数 CParamMngPtr m_ptrParamMng; //< 参数信息管理类 CTimetableMsgBusMngPtr m_ptrMsgMng; //< 消息管理类 CBasicOperationPtr m_ptrBasicOpt; //< 基础操作类 }; typedef boost::shared_ptr CCDownloadTimetablePtr; }