$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef _ots_WorkLoopManager_h 00002 #define _ots_WorkLoopManager_h 00003 00004 #include <toolbox/task/WorkLoop.h> 00005 #include <xgi/Method.h> 00006 #include <xoap/MessageReference.h> 00007 00008 #include <ctime> 00009 #include <map> 00010 #include <string> 00011 00012 namespace ots 00013 { 00014 class HttpXmlDocument; 00015 class SOAPCommand; 00016 00017 class WorkLoopManager 00018 { 00019 public: 00020 typedef unsigned long long RequestNumber; 00021 00022 WorkLoopManager(toolbox::task::ActionSignature* job); 00023 ~WorkLoopManager(void); 00024 00025 // All requests that can change the request map like 00026 // forceDeleteAllRequests, deleteAllInactiveRequests, deleteAllTimedOutRequests 00027 // forceThisRequest -> even if there are already maxWorkLoops this request must be 00028 // accepted!! 00029 // and more... 00030 // MUST BE HANDLED LIKE ALL THE OTHER REQUESTS!!!!!! THROUGH THE processRequest 00031 // Method! 00032 HttpXmlDocument processRequest(cgicc::Cgicc& cgi); 00033 HttpXmlDocument processRequest(const xoap::MessageReference& message); 00034 bool report(toolbox::task::WorkLoop* workLoop, 00035 std::string result, 00036 float progress, 00037 bool status); 00038 bool removeProcessedRequests(void); 00039 std::string getWorkLoopRequest(toolbox::task::WorkLoop* workLoop); 00040 void translateWorkLoopName(toolbox::task::WorkLoop* workLoop, 00041 SOAPCommand& soapCommand); 00042 00043 // Getters 00044 bool getRequestResult(cgicc::Cgicc& cgi, HttpXmlDocument& xmldoc); 00045 xoap::MessageReference getMessage(toolbox::task::WorkLoop* workLoop); 00046 00047 private: 00048 const std::string cWorkLoopType_; 00049 enum 00050 { 00051 maxWorkLoops = 5 00052 }; 00053 enum 00054 { 00055 timeOutInSeconds = 20 00056 }; 00057 struct WorkLoopStruct 00058 { 00059 toolbox::task::WorkLoop* workLoop; 00060 std::string workLoopName; 00061 std::string request; 00062 std::string result; 00063 bool done; 00064 float progress; 00065 time_t requestStartTime; 00066 time_t requestLastTimeChecked; 00067 xoap::MessageReference message; 00068 }; 00069 HttpXmlDocument processRequest(std::string workLoopName, 00070 const xoap::MessageReference* message = 0); 00071 bool removeWorkLoop(toolbox::task::WorkLoop* workLoop); 00072 bool removeWorkLoop(RequestNumber requestNumber); 00073 bool removeTimedOutRequests(void); 00074 std::string composeWorkLoopName(RequestNumber requestNumber, cgicc::Cgicc& cgi); 00075 std::string composeWorkLoopName(RequestNumber requestNumber, 00076 const xoap::MessageReference& message); 00077 RequestNumber getWorkLoopRequestNumber(toolbox::task::WorkLoop* workLoop); 00078 RequestNumber getWorkLoopRequestNumber( 00079 std::string workLoopName); // This can only be 00080 // used by the class 00081 // because it is 00082 // careful to use 00083 // the right format 00084 std::string getWorkLoopRequest(std::string workLoopName); // This can only be used by 00085 // the class because it is 00086 // careful to use the right 00087 // format 00088 00089 std::map<RequestNumber, WorkLoopStruct> workLoops_; 00090 toolbox::task::ActionSignature* job_; 00091 unsigned long long requestNumber_; 00092 std::string requestName_; 00093 }; 00094 00095 } // namespace ots 00096 00097 #endif