SPAServer.h 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef SPASERVER_H
  2. #define SPASERVER_H
  3. #include <QTcpServer>
  4. #include "FromSuperBrain.h"
  5. #include "FromRedis.h"
  6. #include "FromWebAPI.h"
  7. class FuncBase;
  8. class FuncThreadInfo;
  9. /**
  10. * 安播辅助提示系统服务类
  11. * 写入EQM数据库的报警逻辑
  12. *
  13. */
  14. class SPAServer : public QObject
  15. {
  16. Q_OBJECT
  17. public:
  18. SPAServer();
  19. ~SPAServer();
  20. /* 启动服务 */
  21. void startServer();
  22. private slots:
  23. /* 接收到新的TCP连接 */
  24. void do_newConnection();
  25. private:
  26. /*--------------------------------------------------------------------------------
  27. * 从基础平台获取算法信息和设备信息功能线程和所需要的函数,这里更新维护EQM数据库的tAction、
  28. * tCameraInfo、tActionCamera等表格
  29. * 注:tAction不需要在服务里维护,在外部手动维护
  30. *-------------------------------------------------------------------------------*/
  31. /* 从基础平台获取算法信息和设备信息的线程函数 */
  32. void threadFromSuperBrain();
  33. /* 替换算法ID为全ID */
  34. // void checkAlgorithmID(std::vector<DeviceInfo>& vecDevInfo);
  35. /* 处理算法信息,返回值为true,说明有改变,需要重新读取(不需要在服务里维护,手动配置) */
  36. bool processAlgorithmInfo(std::vector<AlgorithmInfo> vecNewAlgInfo);
  37. /* 处理设备信息,传入新获取到的值,返回true需要更新本地数据缓存 */
  38. bool processDeviceInfo(std::vector<DeviceInfo>& vecNewDevInfo);
  39. /* 对比算法信息现有的数据和新获取到的数据,取出要删除和添加的数据 */
  40. void compareAlgorithmInfo(const std::vector<AlgorithmInfo>& vecNewInfo, std::vector<AlgorithmInfo>& vecAlgUpdate, std::vector<AlgorithmInfo>& vecAlgDelete);
  41. /* 对比设备和算法关联表是否需要更新 */
  42. void compareDeviceAlgorithmInfo(const std::vector<DeviceInfo>& vecNewInfo, std::vector<DeviceInfo>& vecDevUpdate);
  43. /*--------------------------------------------------------------------------------
  44. * 分派任务的线程,这里是根据房间和摄像机的关联信息,给任务创建不同的功能线程
  45. *-------------------------------------------------------------------------------*/
  46. /* 分派任务的线程 */
  47. void threadDistribution();
  48. /* 创建任务实例的函数 */
  49. FuncBase* createFuncInstance(FuncThreadInfo& info);
  50. /* 清理没有在运行的线程实例 */
  51. void clearNoneFuncThreadInfo();
  52. private:
  53. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  54. std::atomic_bool m_threadRunning = true; /* 线程正在运行 */
  55. QTcpServer m_tcpServer; /* TCP Server,主要是为了k8s监测服务是否还活着 */
  56. FromSuperBrain m_fromSuperBrain;
  57. FromWebAPI m_fromWebAPIUseSB; /* 用于SuperBrain的WebAPI */
  58. /* 算法信息,这个就是tAction在内存中的数据,方便后续对比,程序启动的时候会先获取一份 */
  59. std::vector<AlgorithmInfo> m_vecEqmAlgInfo;
  60. /* 设备信息,这个是tActionCamer的信息 */
  61. std::vector<DeviceInfo> m_vecEqmDevInfo;
  62. /* 算法信息列表,每个算法所在的频率、房间、摄像机 */
  63. std::mutex m_mutexActionInfo;
  64. ListActionInfo m_listActionInfo;
  65. /* 设备和算法关联信息,这里存储着已经删除的设备对应的算法信息,将在这一轮循环中删除 */
  66. std::list<int> m_listDevIDDelete;
  67. /* 线程功能类实例列表 */
  68. std::list<FuncBase*> m_listFuncBase;
  69. };
  70. #endif /* SPASERVER_H */