Adjust Session class and include close state in it.
[metaproxy-moved-to-github.git] / src / session.hpp
1
2 #ifndef SESSION_HPP
3 #define SESSION_HPP
4
5 //#include <stdexcept>
6
7 #include <boost/thread/mutex.hpp>
8
9 namespace yp2 {
10
11     class Session
12     {
13         //typedef unsigned long type;
14     public:
15
16        /// create new session with new unique id
17        Session() {
18             boost::mutex::scoped_lock scoped_lock(m_mutex);
19             ++m_global_id;
20             m_id =  m_global_id;
21             m_close = false;
22         };
23
24       /// copy session including old id
25       Session(const Session &s) : m_id(s.m_id), m_close(s.m_close) {};
26
27         //Session& operator=(const Session &);
28         
29         unsigned long id() const {
30             return m_id;
31         };
32         
33         bool is_closed() const {
34             return m_close;
35         };
36
37         /// mark session closed, can not be unset
38         void close() {
39             m_close = true;
40         };
41
42      private:
43
44         unsigned long int m_id;
45         bool m_close;
46
47         /// static mutex to lock static m_id
48         static boost::mutex m_mutex;
49         
50         /// static m_id to make sure that there is only one id counter
51         static unsigned long int m_global_id;
52         
53     };
54     
55 }
56
57 // defining and initializing static members
58 boost::mutex yp2::Session::m_mutex;
59 unsigned long int yp2::Session::m_global_id = 0;
60
61
62 #endif
63 /*
64  * Local variables:
65  * c-basic-offset: 4
66  * indent-tabs-mode: nil
67  * End:
68  * vim: shiftwidth=4 tabstop=8 expandtab
69  */