otsdaq  v1_01_02
 All Classes Namespaces Functions
WorkLoopManager.h
1 #ifndef _ots_WorkLoopManager_h
2 #define _ots_WorkLoopManager_h
3 
4 #include <toolbox/task/WorkLoop.h>
5 #include <xgi/Method.h>
6 #include <xoap/MessageReference.h>
7 
8 #include <string>
9 #include <map>
10 #include <ctime>
11 
12 
13 namespace ots
14 {
15 
16 class HttpXmlDocument;
17 class SOAPCommand;
18 
20 {
21 public:
22  typedef unsigned long long RequestNumber;
23 
24  WorkLoopManager (toolbox::task::ActionSignature* job);
25  ~WorkLoopManager(void);
26 
27  //All requests that can change the request map like
28  //forceDeleteAllRequests, deleteAllInactiveRequests, deleteAllTimedOutRequests
29  //forceThisRequest -> even if there are already maxWorkLoops this request must be accepted!!
30  // and more...
31  //MUST BE HANDLED LIKE ALL THE OTHER REQUESTS!!!!!! THROUGH THE processRequest Method!
32  HttpXmlDocument processRequest (cgicc::Cgicc& cgi);
33  HttpXmlDocument processRequest (const xoap::MessageReference& message);
34  bool report (toolbox::task::WorkLoop* workLoop, std::string result, float progress, bool status);
35  bool removeProcessedRequests(void);
36  std::string getWorkLoopRequest (toolbox::task::WorkLoop* workLoop);
37  void translateWorkLoopName (toolbox::task::WorkLoop* workLoop, SOAPCommand& soapCommand);
38 
39  //Getters
40  bool getRequestResult(cgicc::Cgicc &cgi, HttpXmlDocument& xmldoc);
41  xoap::MessageReference getMessage(toolbox::task::WorkLoop* workLoop);
42 
43 private:
44  const std::string cWorkLoopType_;
45  enum{maxWorkLoops = 5};
46  enum{timeOutInSeconds = 20};
47  struct WorkLoopStruct
48  {
49  toolbox::task::WorkLoop* workLoop;
50  std::string workLoopName;
51  std::string request;
52  std::string result;
53  bool done;
54  float progress;
55  time_t requestStartTime;
56  time_t requestLastTimeChecked;
57  xoap::MessageReference message;
58  };
59  HttpXmlDocument processRequest (std::string workLoopName, const xoap::MessageReference* message=0);
60  bool removeWorkLoop (toolbox::task::WorkLoop* workLoop);
61  bool removeWorkLoop (RequestNumber requestNumber);
62  bool removeTimedOutRequests (void);
63  std::string composeWorkLoopName (RequestNumber requestNumber, cgicc::Cgicc &cgi);
64  std::string composeWorkLoopName (RequestNumber requestNumber, const xoap::MessageReference& message);
65  RequestNumber getWorkLoopRequestNumber(toolbox::task::WorkLoop* workLoop);
66  RequestNumber getWorkLoopRequestNumber(std::string workLoopName);//This can only be used by the class because it is careful to use the right format
67  std::string getWorkLoopRequest (std::string workLoopName);//This can only be used by the class because it is careful to use the right format
68 
69  std::map<RequestNumber, WorkLoopStruct> workLoops_;
70  toolbox::task::ActionSignature* job_;
71  unsigned long long requestNumber_;
72  std::string requestName_;
73 };
74 
75 }
76 
77 #endif