SATExecutor.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #ifndef __SAT_EXECUTOR__
  2. #define __SAT_EXECUTOR__
  3. #pragma once
  4. #include "CritSection.h"
  5. #include "SATDevices.h"
  6. // 用例xml;
  7. typedef struct __ST_CASEITEM__
  8. {
  9. bool result;
  10. std::string name;
  11. std::string data;
  12. std::vector<std::string> imgs;
  13. std::string log;
  14. std::string remark;
  15. }STCaseItem, *pSTCaseItem;
  16. class CSATExecutor
  17. {
  18. CSATExecutor(void);
  19. public:
  20. // 单例对象模式;
  21. static CSATExecutor* GetInstance()
  22. {
  23. static CSATExecutor* pInstance = NULL;
  24. if ( pInstance == NULL )
  25. {
  26. pInstance = new CSATExecutor;
  27. }
  28. return pInstance;
  29. }
  30. ~CSATExecutor(void);
  31. protected:
  32. // 线程控制句柄;
  33. HANDLE m_hEventHearbeat;
  34. // 心跳线程句柄;
  35. HANDLE m_hThreadHearbeat;
  36. // 线程控制句柄;
  37. HANDLE m_hEventExcuteScript;
  38. // 执行线程句柄;
  39. HANDLE m_hThreadExcuteScript;
  40. // 是否登录成功;
  41. BOOL m_bLogin;
  42. // 是否结束TV串口监听;
  43. BOOL m_bStopWathTV;
  44. ThreadSection m_csTask;
  45. std::list<SATHTTP::STTask> m_vtTask;
  46. std::vector<SATHTTP::STDevice> m_vtDevice;
  47. SATHTTP::STLoginReq m_stLoginReq;
  48. SATHTTP::STLoginResp m_stLoginResp;
  49. // 执行器名称;
  50. std::string m_strActuatorName;
  51. // 任务是否存在;
  52. bool IsTaskExist(SATHTTP::STTask &task);
  53. // 是否有任务在执行;
  54. SATHTTP::STTask* IsThereATaskInProcess();
  55. // 提取未执行的任务;
  56. SATHTTP::STTask* GetFreeTask();
  57. // 移除已完成的任务;
  58. void DelFinishedTask();
  59. // 是否有用例脚本在执行;
  60. SATHTTP::STCase* IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases);
  61. // 提取未执行的用例;
  62. SATHTTP::STCase* GetFreeCaseScript(std::vector<SATHTTP::STCase> &vtCases);
  63. // 执行空闲新用例;
  64. SATHTTP::STCase* ExecuteFreeCaseScript(SATHTTP::STTask* pTask);
  65. public:
  66. // 添加设备;
  67. void AddDevices(const SATDEV::STDevice &stDevice);
  68. // 删除设备;
  69. void DelDevices(const SATDEV::STDevice &stDevice);
  70. // 设置设备为状态;
  71. void SetDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
  72. // 设备是否存在;
  73. bool IsDeviceExist(std::string strDevName);
  74. public:
  75. // 登录;
  76. bool Login(std::string user, std::string password, std::string actuator, bool bLogin = true);
  77. // 登出;
  78. bool Logout(std::string user, std::string password);
  79. const SATHTTP::STLoginResp *GetLoginResp() const{ return &m_stLoginResp;};
  80. // 设置执行器名称;
  81. void SetActuatorName(const char *pszActuator){ if (pszActuator) m_strActuatorName = pszActuator;};
  82. // 更新设备信息;
  83. bool UpdateDevice();
  84. // 通知SAT任务开始;
  85. bool NotifyTaskStart(SATHTTP::STTask* pTask);
  86. // 上传用例图片;
  87. bool UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string img);
  88. // 上传用例结果;
  89. bool UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  90. // 上报用例测试项完成;
  91. bool ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, STCaseItem &caseItem);
  92. // 上报用例完成;
  93. bool ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string strRunnedActionNameList);
  94. // 上报用例结果;
  95. bool ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  96. // 上传任务结果;
  97. bool UploadTaskLog(SATHTTP::STTask* pTask);
  98. // 上报任务开始;
  99. bool ReportTaskStart(SATHTTP::STTask* pTask);
  100. // 上报任务完成;
  101. bool ReportTaskFinish(SATHTTP::STTask* pTask);
  102. // 获取用例xml结果;
  103. bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
  104. // 将任务列表附加到缓存中;
  105. int AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS]);
  106. // 其他接口;
  107. public:
  108. // 工作开始函数;
  109. void StartWork();
  110. // 工作结束函数;
  111. void EndofWork();
  112. // 从db中加载任务;
  113. void LoadTaskInfo();
  114. // 心跳线程;
  115. static DWORD WINAPI HearbeatThread(LPVOID lpVoid);
  116. // 执行线程;
  117. static DWORD WINAPI ExecuteScriptThread(LPVOID lpVoid);
  118. // 监听异常关机重启;
  119. static DWORD WINAPI WathTVPortThread(LPVOID lpVoid);
  120. };
  121. #endif //__SAT_EXECUTOR__