12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #ifndef SPASERVER_H
- #define SPASERVER_H
- #include "FromSuperBrain.h"
- #include "FromRedis.h"
- #include "FromWebAPI.h"
- class FuncBase;
- class FuncThreadInfo;
- /**
- * 安播辅助提示系统服务类
- * 写入EQM数据库的报警逻辑
- *
- */
- class SPAServer
- {
- public:
- SPAServer();
- ~SPAServer();
- /* 启动服务 */
- void startServer();
- private:
- /*--------------------------------------------------------------------------------
- * 从基础平台获取算法信息和设备信息功能线程和所需要的函数,这里更新维护EQM数据库的tAction、
- * tCameraInfo、tActionCamera等表格
- * 注:tAction不需要在服务里维护,在外部手动维护
- *-------------------------------------------------------------------------------*/
- /* 从基础平台获取算法信息和设备信息的线程函数 */
- void threadFromSuperBrain();
- /* 替换算法ID为全ID */
- void checkAlgorithmID(std::vector<DeviceInfo>& vecDevInfo);
- /* 处理算法信息,返回值为true,说明有改变,需要重新读取(不需要在服务里维护,手动配置) */
- bool processAlgorithmInfo(std::vector<AlgorithmInfo> vecNewAlgInfo);
- /* 处理设备信息,传入新获取到的值,返回true需要更新本地数据缓存 */
- bool processDeviceInfo(std::vector<DeviceInfo> vecNewDevInfo);
- /* 对比算法信息现有的数据和新获取到的数据,取出要删除和添加的数据 */
- void compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInfo, std::vector<AlgorithmInfo>& vecAlgUpdate, std::vector<AlgorithmInfo>& vecAlgDelete);
- /* 对比设备和算法关联表是否需要更新 */
- void compareDeviceAlgorithmInfo(const std::vector<DeviceInfo>& vecNewInfo, std::vector<DeviceInfo>& vecDevUpdate);
- /*--------------------------------------------------------------------------------
- * 分派任务的线程,这里是根据房间和摄像机的关联信息,给任务创建不同的功能线程
- *-------------------------------------------------------------------------------*/
- /* 分派任务的线程 */
- void threadDistribution();
- /* 创建任务实例的函数 */
- FuncBase* createFuncInstance(FuncThreadInfo& info);
- /* 清理没有在运行的线程实例 */
- void clearNoneFuncThreadInfo();
- private:
- std::shared_ptr<spdlog::logger> m_logger = nullptr;
- std::atomic_bool m_threadRunning = true; /* 线程正在运行 */
- FromSuperBrain m_fromSuperBrain;
- FromWebAPI m_fromWebAPIUseSB; /* 用于SuperBrain的WebAPI */
- /* 算法信息,这个就是tAction在内存中的数据,方便后续对比,程序启动的时候会先获取一份 */
- std::vector<AlgorithmInfo> m_vecEqmAlgInfo;
- /* 设备信息,这个是tActionCamer的信息 */
- std::vector<DeviceInfo> m_vecEqmDevInfo;
- /* 算法信息列表,每个算法所在的频率、房间、摄像机 */
- std::mutex m_mutexActionInfo;
- ListActionInfo m_listActionInfo;
- /* 设备和算法关联信息,这里存储着已经删除的设备对应的算法信息,将在这一轮循环中删除 */
- std::list<int> m_listDevIDDelete;
- /* 线程功能类实例列表 */
- std::list<FuncBase*> m_listFuncBase;
- };
- #endif /* SPASERVER_H */
|