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