Stefan Schuermans commited on 2011-12-22 12:48:03
Showing 9 changed files, with 396 additions and 0 deletions.
... | ... |
@@ -7,6 +7,7 @@ |
7 | 7 |
#define BLINKER_MGRS_H |
8 | 8 |
|
9 | 9 |
#include "CallMgr.h" |
10 |
+#include "OpMgr.h" |
|
10 | 11 |
#include "StreamMgr.h" |
11 | 12 |
|
12 | 13 |
namespace Blinker { |
... | ... |
@@ -15,6 +16,7 @@ namespace Blinker { |
15 | 16 |
struct Mgrs |
16 | 17 |
{ |
17 | 18 |
CallMgr m_callMgr; ///< call manager |
19 |
+ OpMgr m_opMgr; ///< operator connection manager |
|
18 | 20 |
StreamMgr m_streamMgr; ///< stream manager |
19 | 21 |
}; // struct Mgrs |
20 | 22 |
|
... | ... |
@@ -0,0 +1,53 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <string> |
|
7 |
+ |
|
8 |
+#include "OpConn.h" |
|
9 |
+#include "OpConnIf.h" |
|
10 |
+ |
|
11 |
+namespace Blinker { |
|
12 |
+ |
|
13 |
+/** |
|
14 |
+ * @brief constructor |
|
15 |
+ * @param[in] pConnIf connection interface of this side |
|
16 |
+ */ |
|
17 |
+OpConn::OpConn(OpConnIf *pConnIf): |
|
18 |
+ m_pConnIf(pConnIf), |
|
19 |
+ m_pRemote(NULL) |
|
20 |
+{ |
|
21 |
+} |
|
22 |
+ |
|
23 |
+/// destructor |
|
24 |
+OpConn::~OpConn() |
|
25 |
+{ |
|
26 |
+ // think twice before putting something here |
|
27 |
+ // might be explicitly deconstructed by remote side |
|
28 |
+} |
|
29 |
+ |
|
30 |
+/// close connection |
|
31 |
+void OpConn::close() |
|
32 |
+{ |
|
33 |
+ // inform remote side |
|
34 |
+ if (m_pRemote) |
|
35 |
+ m_pRemote->m_pConnIf->opConnClose(m_pRemote); |
|
36 |
+ |
|
37 |
+ // destroy local and remote connection objects |
|
38 |
+ if (m_pRemote) |
|
39 |
+ delete m_pRemote; |
|
40 |
+ delete this; |
|
41 |
+} |
|
42 |
+ |
|
43 |
+/** |
|
44 |
+ * @brief set remote side of connection |
|
45 |
+ * @param[in] pRemote remote side connection object |
|
46 |
+ */ |
|
47 |
+void OpConn::setRemote(OpConn *pRemote) |
|
48 |
+{ |
|
49 |
+ m_pRemote = pRemote; |
|
50 |
+} |
|
51 |
+ |
|
52 |
+} // namespace Blinker |
|
53 |
+ |
... | ... |
@@ -0,0 +1,57 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef BLINKER_OPCONN_H |
|
7 |
+#define BLINKER_OPCONN_H |
|
8 |
+ |
|
9 |
+#include <string> |
|
10 |
+ |
|
11 |
+#include "OpConnIf.h" |
|
12 |
+ |
|
13 |
+namespace Blinker { |
|
14 |
+ |
|
15 |
+/// operator connection |
|
16 |
+class OpConn |
|
17 |
+{ |
|
18 |
+protected: |
|
19 |
+ /** |
|
20 |
+ * @brief constructor |
|
21 |
+ * @param[in] pConnIf connection interface of this side |
|
22 |
+ */ |
|
23 |
+ OpConn(OpConnIf *pConnIf); |
|
24 |
+ |
|
25 |
+public: |
|
26 |
+ /// destructor |
|
27 |
+ ~OpConn(); |
|
28 |
+ |
|
29 |
+private: |
|
30 |
+ /// copy constructor disabled |
|
31 |
+ OpConn(const OpConn &that); |
|
32 |
+ |
|
33 |
+ /// assignment operator disabled |
|
34 |
+ const OpConn & operator=(const OpConn &that); |
|
35 |
+ |
|
36 |
+public: |
|
37 |
+ /// close connection |
|
38 |
+ void close(); |
|
39 |
+ |
|
40 |
+protected: |
|
41 |
+ /** |
|
42 |
+ * @brief set remote side of connection |
|
43 |
+ * @param[in] pRemote remote side connection object |
|
44 |
+ */ |
|
45 |
+ void setRemote(OpConn *pRemote); |
|
46 |
+ |
|
47 |
+protected: |
|
48 |
+ OpConnIf *m_pConnIf; ///< connection interface of this side |
|
49 |
+ OpConn *m_pRemote; ///< remote side connection object |
|
50 |
+ |
|
51 |
+ friend class OpMgr; |
|
52 |
+}; // class OpConn |
|
53 |
+ |
|
54 |
+} // namespace Blinker |
|
55 |
+ |
|
56 |
+#endif // #ifndef BLINKER_OPCONN_H |
|
57 |
+ |
... | ... |
@@ -0,0 +1,23 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <string> |
|
7 |
+ |
|
8 |
+#include "OpConn.h" |
|
9 |
+ |
|
10 |
+namespace Blinker { |
|
11 |
+ |
|
12 |
+/// constructor |
|
13 |
+OpConnIf::OpConnIf() |
|
14 |
+{ |
|
15 |
+} |
|
16 |
+ |
|
17 |
+/// virtual destructor |
|
18 |
+OpConnIf::~OpConnIf() |
|
19 |
+{ |
|
20 |
+} |
|
21 |
+ |
|
22 |
+} // namespace Blinker |
|
23 |
+ |
... | ... |
@@ -0,0 +1,36 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef BLINKER_OPCONNIF_H |
|
7 |
+#define BLINKER_OPCONNIF_H |
|
8 |
+ |
|
9 |
+#include <string> |
|
10 |
+ |
|
11 |
+namespace Blinker { |
|
12 |
+ |
|
13 |
+class OpConn; |
|
14 |
+ |
|
15 |
+/// operator connection interface |
|
16 |
+class OpConnIf |
|
17 |
+{ |
|
18 |
+public: |
|
19 |
+ /// constructor |
|
20 |
+ OpConnIf(); |
|
21 |
+ |
|
22 |
+ /// virtual destructor |
|
23 |
+ virtual ~OpConnIf(); |
|
24 |
+ |
|
25 |
+public: |
|
26 |
+ /** |
|
27 |
+ * @brief operator connection is closed |
|
28 |
+ * @param[in] pConn operator connection object |
|
29 |
+ */ |
|
30 |
+ virtual void opConnClose(OpConn *pConn) = 0; |
|
31 |
+}; // class OpConnIf |
|
32 |
+ |
|
33 |
+} // namespace Blinker |
|
34 |
+ |
|
35 |
+#endif // #ifndef BLINKER_OPCONNIF_H |
|
36 |
+ |
... | ... |
@@ -0,0 +1,83 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <map> |
|
7 |
+#include <string> |
|
8 |
+ |
|
9 |
+#include "OpConn.h" |
|
10 |
+#include "OpConnIf.h" |
|
11 |
+#include "OpMgr.h" |
|
12 |
+#include "OpReqIf.h" |
|
13 |
+ |
|
14 |
+namespace Blinker { |
|
15 |
+ |
|
16 |
+/// constructor |
|
17 |
+OpMgr::OpMgr() |
|
18 |
+{ |
|
19 |
+} |
|
20 |
+ |
|
21 |
+/// destructor |
|
22 |
+OpMgr::~OpMgr() |
|
23 |
+{ |
|
24 |
+} |
|
25 |
+ |
|
26 |
+/** |
|
27 |
+ * @brief open operator interface |
|
28 |
+ * @param[in] name operator interface name |
|
29 |
+ * @param[in] pOpReqIf interface to call on incoming operator request |
|
30 |
+ * @return if operator interface could be opened |
|
31 |
+ */ |
|
32 |
+bool OpMgr::open(const std::string &name, OpReqIf *pOpReqIf) |
|
33 |
+{ |
|
34 |
+ if (m_reqIfs.find(name) != m_reqIfs.end()) |
|
35 |
+ return false; // already open |
|
36 |
+ m_reqIfs[name] = pOpReqIf; |
|
37 |
+ return true; |
|
38 |
+} |
|
39 |
+ |
|
40 |
+/** |
|
41 |
+ * @brief close operator interface |
|
42 |
+ * @param[in] name operator interface name |
|
43 |
+ * @return if interface name was open before |
|
44 |
+ */ |
|
45 |
+bool OpMgr::close(const std::string &name) |
|
46 |
+{ |
|
47 |
+ ReqIfMap::iterator itReqIf = m_reqIfs.find(name); |
|
48 |
+ if (itReqIf == m_reqIfs.end()) |
|
49 |
+ return false; // was not open |
|
50 |
+ m_reqIfs.erase(itReqIf); |
|
51 |
+ return true; |
|
52 |
+} |
|
53 |
+ |
|
54 |
+/** |
|
55 |
+ * @brief connect to operator interface |
|
56 |
+ * @param[in] name operator interface to connect to |
|
57 |
+ * @param[in] pOpConnIf interface to call on connection events |
|
58 |
+ * @return operator connection object (or NULL on error) |
|
59 |
+ */ |
|
60 |
+OpConn * OpMgr::connect(const std::string &name, OpConnIf *pOpConnIf) |
|
61 |
+{ |
|
62 |
+ // find requested interface |
|
63 |
+ ReqIfMap::iterator itReqIf = m_reqIfs.find(name); |
|
64 |
+ if (itReqIf == m_reqIfs.end()) |
|
65 |
+ return NULL; // not open |
|
66 |
+ |
|
67 |
+ // check with server side if new connection is accepted |
|
68 |
+ if (!itReqIf->second->acceptNewOpConn(name)) |
|
69 |
+ return NULL; // not accepted |
|
70 |
+ |
|
71 |
+ // create new connection |
|
72 |
+ OpConn *pConnCli = new OpConn(pOpConnIf); |
|
73 |
+ OpConn *pConnSrv = new OpConn(itReqIf->second); |
|
74 |
+ pConnCli->setRemote(pConnSrv); |
|
75 |
+ pConnSrv->setRemote(pConnCli); |
|
76 |
+ |
|
77 |
+ // deliver new connection |
|
78 |
+ itReqIf->second->newOpConn(name, pConnSrv); |
|
79 |
+ return pConnCli; |
|
80 |
+} |
|
81 |
+ |
|
82 |
+} // namespace Blinker |
|
83 |
+ |
... | ... |
@@ -0,0 +1,71 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef BLINKER_OPMGR_H |
|
7 |
+#define BLINKER_OPMGR_H |
|
8 |
+ |
|
9 |
+#include <map> |
|
10 |
+#include <string> |
|
11 |
+ |
|
12 |
+#include "OpConn.h" |
|
13 |
+#include "OpConnIf.h" |
|
14 |
+#include "OpReqIf.h" |
|
15 |
+ |
|
16 |
+namespace Blinker { |
|
17 |
+ |
|
18 |
+/// operator connection manager |
|
19 |
+class OpMgr |
|
20 |
+{ |
|
21 |
+protected: |
|
22 |
+ /// map of open operator interfaces |
|
23 |
+ typedef std::map<std::string, OpReqIf *> ReqIfMap; |
|
24 |
+ |
|
25 |
+public: |
|
26 |
+ /// constructor |
|
27 |
+ OpMgr(); |
|
28 |
+ |
|
29 |
+ /// destructor |
|
30 |
+ ~OpMgr(); |
|
31 |
+ |
|
32 |
+private: |
|
33 |
+ /// copy constructor disabled |
|
34 |
+ OpMgr(const OpMgr &that); |
|
35 |
+ |
|
36 |
+ /// assignment operator disabled |
|
37 |
+ const OpMgr & operator=(const OpMgr &that); |
|
38 |
+ |
|
39 |
+public: |
|
40 |
+ /** |
|
41 |
+ * @brief open operator interface |
|
42 |
+ * @param[in] name operator interface name |
|
43 |
+ * @param[in] pOpReqIf interface to call on incoming operator request |
|
44 |
+ * @return if operator interface could be opened |
|
45 |
+ */ |
|
46 |
+ bool open(const std::string &name, OpReqIf *pOpReqIf); |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @brief close operator interface |
|
50 |
+ * @param[in] name operator interface name |
|
51 |
+ * @return if interface name was open before |
|
52 |
+ */ |
|
53 |
+ bool close(const std::string &name); |
|
54 |
+ |
|
55 |
+ /** |
|
56 |
+ * @brief connect to operator interface |
|
57 |
+ * @param[in] name operator interface to connect to |
|
58 |
+ * @param[in] pOpConnIf interface to call on connection events |
|
59 |
+ * @return operator connection object (or NULL on error) |
|
60 |
+ */ |
|
61 |
+ OpConn * connect(const std::string &name, OpConnIf *pOpConnIf); |
|
62 |
+ |
|
63 |
+protected: |
|
64 |
+ /// map of open operator interfaces |
|
65 |
+ ReqIfMap m_reqIfs; |
|
66 |
+}; // class OpMgr |
|
67 |
+ |
|
68 |
+} // namespace Blinker |
|
69 |
+ |
|
70 |
+#endif // #ifndef BLINKER_OPMGR_H |
|
71 |
+ |
... | ... |
@@ -0,0 +1,25 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <string> |
|
7 |
+ |
|
8 |
+#include "OpConn.h" |
|
9 |
+#include "OpConnIf.h" |
|
10 |
+#include "OpReqIf.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// constructor |
|
15 |
+OpReqIf::OpReqIf() |
|
16 |
+{ |
|
17 |
+} |
|
18 |
+ |
|
19 |
+/// virtual destructor |
|
20 |
+OpReqIf::~OpReqIf() |
|
21 |
+{ |
|
22 |
+} |
|
23 |
+ |
|
24 |
+} // namespace Blinker |
|
25 |
+ |
... | ... |
@@ -0,0 +1,46 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef BLINKER_OPREQIF_H |
|
7 |
+#define BLINKER_OPREQIF_H |
|
8 |
+ |
|
9 |
+#include <string> |
|
10 |
+ |
|
11 |
+#include "OpConnIf.h" |
|
12 |
+ |
|
13 |
+namespace Blinker { |
|
14 |
+ |
|
15 |
+class OpConn; |
|
16 |
+ |
|
17 |
+/// operator connection request interface |
|
18 |
+class OpReqIf: public OpConnIf |
|
19 |
+{ |
|
20 |
+public: |
|
21 |
+ /// constructor |
|
22 |
+ OpReqIf(); |
|
23 |
+ |
|
24 |
+ /// virtual destructor |
|
25 |
+ virtual ~OpReqIf(); |
|
26 |
+ |
|
27 |
+public: |
|
28 |
+ /** |
|
29 |
+ * @brief check if accepting new operator connction is possible |
|
30 |
+ * @param[in] name operator interface name |
|
31 |
+ * @return if accepting new connection is possible |
|
32 |
+ */ |
|
33 |
+ virtual bool acceptNewOpConn(const std::string &name) = 0; |
|
34 |
+ |
|
35 |
+ /** |
|
36 |
+ * @brief new operator connection |
|
37 |
+ * @param[in] name operator interface name |
|
38 |
+ * @param[in] pConn operator connection object |
|
39 |
+ */ |
|
40 |
+ virtual void newOpConn(const std::string &name, OpConn *pConn) = 0; |
|
41 |
+}; // class OpReqIf |
|
42 |
+ |
|
43 |
+} // namespace Blinker |
|
44 |
+ |
|
45 |
+#endif // #ifndef BLINKER_OPREQIF_H |
|
46 |
+ |
|
0 | 47 |