2025-03-12 14:17:53 +08:00

96 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
@file TimetableThread.h
@brief 时间表处理线程
@author 曹顶法
*/
#pragma once
#include "pub_utility_api/TimerThreadBase.h"
#include "pub_sysinfo_api/SysInfoApi.h"
#include "net_msg_bus_api/CMbCommunicator.h"
#include "rdb_api/CRdbAccessEx.h"
#include "TimetableMsgBusMng.h"
#include "BasicOperation.h"
#include "DownloadTimetable.h"
#include "ReadTimetable.h"
namespace kbd_app
{
class CTimetableThread : public iot_public::CTimerThreadBase
{
public:
CTimetableThread(const iot_public::SRunAppInfo &stRunAppInfo,
const iot_public::CSysInfoInterfacePtr &ptrSysInfo);
virtual ~CTimetableThread();
/*
@brief 业务处理函数,必须继承实现自己的业务逻辑
*/
virtual void execute();
/*
@brief 初始化
@return 成功返回kbdSuccess失败返回错误码
*/
int initialize();
/*
@brief 设置为主
@return 成功返回kbdSuccess,失败返回错误码
*/
int setMaster();
/*
@brief 设置为备
@return 成功返回kbdSuccess,失败返回错误码
*/
int setSlave();
private:
/* @brief 处理命令 */
void handleCmd();
/*
@brief 判断当前定时任务是否需要下载
@param const STableTimetableSchedule &stSchedule 当前命令
@return 成功返回true,失败返回false
*/
bool needDownload(const STableTimetableSchedule &stSchedule);
/*
@brief 添加定时任务到命令缓冲区
@param const STableTimetableSchedule &stSchedule 当前命令
@return 成功返回true,失败返回false
*/
bool addScheduleCmd(const STableTimetableSchedule &stSchedule);
/*
@brief 添加命令反馈到缓冲区
@param const iot_net::CMbMessage & objMsg 反馈消息
@return 成功返回true失败返回false
*/
bool dispatchResponse(const iot_net::CMbMessage &objMsg);
bool addCustomResponse(const iot_net::CMbMessage &objMsg);
bool addPntResponse(const iot_net::CMbMessage &objMsg);
/*
@brief 添加人工操作命令到命令缓冲区
@param const iot_net::CMbMessage & objMsg
@return 成功返回true失败返回false
*/
bool addManualCmd(const iot_net::CMbMessage &objMsg);
private:
iot_public::CSysInfoInterfacePtr m_ptrSysInfo; //< 系统信息访问库智能指针
iot_public::SRunAppInfo m_stRunAppInfo; //< 本应用相关运行参数
boost::gregorian::date m_readCfgDate; //< 最后一次读取配置文件的日期
boost::posix_time::ptime m_curTime; //< 当前时间,单位秒(线程每次循环获取一次)
boost::posix_time::ptime m_masterTime; //< 本进程升主的时间,单位秒
std::vector<STableTimetableSchedule> m_vecScheduleTimetable; //< 当日需要定时下载的时间表列表,每天读取一次
CParamMngPtr m_ptrParamMng; //< 参数管理类
CTimetableMsgBusMngPtr m_ptrMsgbusMng; //< 消息总线管理类
CBasicOperationPtr m_ptrBasicOpt; //< 基础操作类
CCDownloadTimetablePtr m_ptrDownloadCmd; //< 时间表下载处理类
CReadTimetablePtr m_ptrReadCmd; //< 读取时间表处理类
};
typedef boost::shared_ptr<CTimetableThread> CTimetableThreadPtr;
}