forest-net
an overlay networks for large-scale virtual worlds
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
ComtreeRegister.h
Go to the documentation of this file.
1 
9 #ifndef CLIENTREGISTER_H
10 #define CLIENTREGISTER_H
11 
12 #include <map>
13 #include "Forest.h"
14 #include "RateSpec.h"
15 #include "UiClist.h"
16 #include "UiSetPair.h"
17 #include "IdMap.h"
18 
19 namespace forest {
20 
31 public:
32  ComtreeRegister(int,int);
34  bool init();
35 
36  bool validComtree(int) const;
37 
38  // iteration methods
39  int firstComtree();
40  int nextComtree(int);
41 
42  // access routines for comtree info
43  bool isLocked(int) const;
44  int getComtIndex(comt_t);
45  void releaseComtree(int);
46  comt_t getComtree(int);
47  const string& getOwner(int) const;
48  fAdr_t getSuper(int) const;
49  Forest::ConfigMode getConfigMode(int) const;
51  int getRepInterval(int) const;
52  time_t getStartTime(int) const;
53 
54  // add/remove/modify table entries
55  int addComtree(comt_t, string&);
56  void removeComtree(int);
57 
58  void setOwner(int, const string&);
59  void setSuper(int, fAdr_t);
60  void setConfigMode(int, Forest::ConfigMode);
61  void setAccessMethod(int, Forest::ConfigMode);
62  void setRepInterval(int, int);
63  void setStartTime(int, time_t);
64 
65  // input/output of table contents
66  bool readEntry(istream&, int=0);
67  bool read(istream&);
68  string& toString(string&);
69  string& comtree2string(int, string&) const;
70  void write(ostream&);
71 
72  // locking/unlocking the internal maps
73  // (client name-to-index, client address-to-session)
74  void lockMap();
75  void unlockMap();
76 private:
77  int maxComt;
78  int maxCtx;
79 
80  struct Comtree {
82  string owner;
83  string password;
86  Forest::ConfigMode cfgMode;
89  time_t start;
90  bool busyBit;
91  pthread_cond_t busyCond;
92  };
93 
95 
96  IdMap *comtMap;
97 
98  pthread_mutex_t mapLock;
99 
102  uint64_t key(comt_t) const;
103  bool readEntry(istream&);
104  int fileSize();
105 
106 };
107 
108 inline bool ComtreeRegister::validComtIndex(int ctx) const {
109  return comtMap->validId(ctx);
110 }
111 
112 inline int ComtreeRegister::getNumComtrees() const {
113  return comtMap->size();
114 }
115 
116 inline int ComtreeRegister::getMaxComtrees() const { return maxComt; }
117 
118 inline int ComtreeRegister::getMaxClx() const { return maxClx; }
119 
124 inline comt_t ComtreeRegister::getComtree(int ctx) const {
125  return cvec[ctx].comtree;
126 }
127 
132 inline const string& ComtreeRegister::getOwner(int ctx) const {
133  return cvec[ctx].owner;
134 }
135 
140 inline const string& ComtreeRegister::getPassword(int ctx) const {
141  return cvec[ctx].password;
142 }
143 
148 inline fAdr_t ComtreeRegister::getSuper(int ctx) const {
149  return cvec[ctx].supervisor;
150 }
151 
156 inline Forest::ConfigMode ComtreeRegister::getConfigMode(int ctx) const {
157  return cvec[ctx].configMode;
158 }
159 
165  return cvec[ctx].accessMethod;
166 }
167 
172 inline int ComtreeRegister::getRepInterval(int ctx) const {
173  return cvec[ctx].repInterval;
174 }
175 
180 inline time_t ComtreeRegister::getStartTime(int ctx) const {
181  return cvec[ctx].repInterval;
182 }
183 
184 inline bool ComtreeRegister::isLocked(int ctx) const {
185  return cvec[ctx].busyBit;
186 }
187 
192 inline void ComtreeRegister::setOwner(int ctx, const string& owner) const {
193  return cvec[ctx].owner = owner;
194 }
195 
200 inline void ComtreeRegister::setPassword(int ctx, const string& pwd) const {
201  return cvec[ctx].password = pwd;
202 }
203 
208 inline void ComtreeRegister::setSuper(int ctx, fAdr_t super) const {
209  return cvec[ctx].supervisor = super;
210 }
211 
216 inline void ComtreeRegister::setConfigMode(int ctx, Forest::ConfigMode cfg) const {
217  return cvec[ctx].configMode = cfg;
218 }
219 
224 inline void ComtreeRegister::setConfigMode(int ctx, Forest::AccessMethod axs) {
225  return cvec[ctx].accessMethod = axs;
226 }
227 
232 inline void ComtreeRegister::setRepInterval(int ctx, int interval) {
233  return cvec[ctx].repInterval = interval;
234 }
235 
240 inline void ComtreeRegister::setStartTime(int ctx, time_t t) {
241  return cvec[ctx].repInterval = t;
242 }
243 
248 inline uint64_t ComtreeRegister::key(comt_t comt) const {
249  return (uint64_t(comt) << 32) | comt;
250 }
251 
258 inline void ComtreeRegister::lockMap() { pthread_mutex_lock(&mapLock); }
259 
262 inline void ComtreeRegister::unlockMap() { pthread_mutex_unlock(&mapLock); }
263 
264 } // ends namespace
265 
266 #endif