Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
ctransactions.h
1 /*
2  * ctransactions.h
3  *
4  * Created on: 04.01.2014
5  * Author: andi
6  */
7 
8 #ifndef CTRANSACTIONS_H_
9 #define CTRANSACTIONS_H_
10 
11 #include <inttypes.h>
12 #include <map>
13 
14 #include "rofl/common/thread_helper.h"
15 #include "rofl/common/ciosrv.h"
16 #include "rofl/common/ctransaction.h"
17 #include "rofl/common/crandom.h"
18 #include "rofl/common/ctimerid.h"
19 
20 namespace rofl {
21 
22 class eTransactionBase : public RoflException {};
24 
25 class ctransactions;
26 
28 public:
29  virtual ~ctransactions_env() {};
30 protected:
31  friend class ctransactions;
32  virtual void ta_expired(ctransactions& tas, ctransaction& ta) = 0;
33 };
34 
36  public std::list<ctransaction>,
37  public rofl::ciosrv
38 {
39  ctransactions_env *env;
40  uint32_t nxid; // next xid
41  unsigned int work_interval; // time interval for checking work-queue
42  PthreadRwLock queuelock; // rwlock for work-queue
43  ctimerid ta_queue_timer_id;
44 
45  enum ctransactions_timer_t {
46  TIMER_WORK_ON_TA_QUEUE = 1, // lookup all expired TAs in list
47  };
48 
49 public:
50 
55 
59  virtual
60  ~ctransactions();
61 
62 public:
63 
67  void
68  clear();
69 
73  uint32_t
74  add_ta(
75  cclock const& delta = cclock(0, 0), uint8_t msg_type = 0, uint16_t msg_subtype = 0);
76 
80  void
81  drop_ta(
82  uint32_t xid);
83 
87  uint32_t
88  get_async_xid() { return ++nxid; };
89 
90 private:
91 
96  ctransactions const& tas) : env(0), nxid(0), work_interval(0) {};
97 
101  ctransactions& operator= (ctransactions const& tas) { return *this; };
102 
103 private:
104 
108  virtual void
109  handle_timeout(
110  int opaque, void *data = (void*)0);
111 
115  void
116  get_next_ta(ctransaction& ta);
117 
121  void
122  work_on_ta_queue();
123 
124 public:
125 
126  friend std::ostream&
127  operator<< (std::ostream& os, ctransactions const& tas) {
128  os << indent(0) << "<transactions #ta:" << tas.size() << " >" << std::endl;
129  indent i(2);
130  for (std::list<ctransaction>::const_iterator
131  it = tas.begin(); it != tas.end(); ++it) {
132  os << (*it);
133  }
134  return os;
135  };
136 };
137 
138 }; // namespace rofl
139 
140 
141 
142 #endif /* CTRANSACTIONS_H_ */
Definition: cclock.h:25
Definition: ctransactions.h:22
Timer handle used by class rofl::cioloop.
Definition: ctimerid.h:21
Definition: thread_helper.h:25
Definition: ctransaction.h:17
Definition: ctransactions.h:23
Base class for IO services.
Definition: ciosrv.h:491
Definition: logging.h:76
Definition: ctransactions.h:27
Definition: ctransactions.h:35
Definition: croflexception.h:27