implemnted operator connect...
Stefan Schuermans authored 12 years ago
|
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 "Directory.h"
10) #include "File.h"
11) #include "ListTracker.h"
12) #include "ListTracker_impl.h"
13) #include "Mgrs.h"
14) #include "Module.h"
15) #include "NameFile.h"
16) #include "OpConn.h"
17) #include "OpConnIf.h"
18) #include "OpMgr.h"
19) #include "OpSplitter.h"
20) #include "OpSplitterExtension.h"
21) #include "SettingFile.h"
22) #include "Time.h"
23) #include "TimeCallee.h"
|
limit number of connections...
Stefan Schuermans authored 12 years ago
|
24) #include "UIntFile.h"
|
implemnted operator connect...
Stefan Schuermans authored 12 years ago
|
25)
26) namespace Blinker {
27)
28) /**
29) * @brief constructor
30) * @param[in] name module name
31) * @param[in] mgrs managers
32) * @param[in] dirBase base directory
33) */
34) OpSplitter::OpSplitter(const std::string &name, Mgrs &mgrs,
35) const Directory &dirBase):
36) Module(name, mgrs, dirBase),
37) m_fileSound(dirBase.getFile("sound")),
|
limit number of connections...
Stefan Schuermans authored 12 years ago
|
38) m_fileMaxConn(dirBase.getFile("maxconn")),
|
implemnted operator connect...
Stefan Schuermans authored 12 years ago
|
39) m_extListTracker(*this, dirBase.getSubdir("extensions"))
40) {
41) // load extensions
42) m_extListTracker.init();
43)
44) // open operator connection interface
45) m_mgrs.m_opMgr.open(m_name, this);
46) }
47)
48) /// virtual destructor
49) OpSplitter::~OpSplitter()
50) {
51) // close operator connection interface
52) m_mgrs.m_opMgr.close(m_name);
53)
54) // close all connections
55) while (!m_mapLocal.empty()) {
56) MapLocal::iterator it = m_mapLocal.begin();
57) it->first->close();
58) m_mapLocal.erase(it);
59) }
60) while (!m_mapInOut.empty()) {
61) MapInOut::iterator it = m_mapInOut.begin();
62) it->first->close();
63) m_mapInOut.erase(it);
64) }
65) while (!m_mapOutIn.empty()) {
66) MapOutIn::iterator it = m_mapOutIn.begin();
67) it->first->close();
68) m_mapOutIn.erase(it);
69) }
70)
71) // unload extensions
72) m_extListTracker.clear();
73)
74) // cancel time callback
75) m_mgrs.m_callMgr.cancelTimeCall(this);
76) }
77)
78) /// check for update of configuration
79) void OpSplitter::updateConfig()
80) {
81) // sound name file was modified -> re-read sound name
82) if (m_fileSound.checkModified())
83) m_fileSound.update();
84)
|
limit number of connections...
Stefan Schuermans authored 12 years ago
|
85) // max. number of conn. file was modified -> re-read max. number of conn.
86) if (m_fileMaxConn.checkModified())
87) m_fileMaxConn.update();
88)
|
implemnted operator connect...
Stefan Schuermans authored 12 years ago
|
89) // extensions update
90) m_extListTracker.updateConfig();
91) }
92)
93) /// callback when requested time reached
94) void OpSplitter::timeCall()
95) {
96) // send sound play request on marked local operator connection
97) for (MapLocal::iterator it = m_mapLocal.begin();
98) it != m_mapLocal.end(); ++it) {
99) if (it->second.m_sendPlay) {
100) it->second.m_sendPlay = false;
101) if (m_fileSound.m_valid)
102) it->first->sendPlay(m_fileSound.m_obj.m_str);
103) }
104) }
105) }
106)
107) /**
108) * @brief check if accepting new operator connction is possible
109) * @param[in] name operator interface name
110) * @return if accepting new connection is possible
111) */
112) bool OpSplitter::acceptNewOpConn(const std::string &name)
113) {
|
limit number of connections...
Stefan Schuermans authored 12 years ago
|
114) // if maximum number of connections if limited, check it
115) if (m_fileMaxConn.m_valid &&
116) m_mapLocal.size() + m_mapInOut.size() >= m_fileMaxConn.m_obj.m_uint)
117) return false; // too many connection
118) return true;
|