f857cc5b5586b1563e9681eac068534df6341b53
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp   1) /* Blinker
Stefan Schuermans update copyright header

Stefan Schuermans authored 5 years ago

src/common/OpSplitter.cpp   2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp   3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
src/noarch/OpSplitter.cpp   4)    a blinkenarea.org project */
src/noarch/OpSplitter.cpp   5) 
src/noarch/OpSplitter.cpp   6) #include <map>
src/noarch/OpSplitter.cpp   7) #include <string>
src/noarch/OpSplitter.cpp   8) 
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp   9) #include "BoolFile.h"
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  10) #include "Directory.h"
src/noarch/OpSplitter.cpp  11) #include "File.h"
src/noarch/OpSplitter.cpp  12) #include "ListTracker.h"
src/noarch/OpSplitter.cpp  13) #include "ListTracker_impl.h"
src/noarch/OpSplitter.cpp  14) #include "Mgrs.h"
src/noarch/OpSplitter.cpp  15) #include "Module.h"
src/noarch/OpSplitter.cpp  16) #include "NameFile.h"
src/noarch/OpSplitter.cpp  17) #include "OpConn.h"
src/noarch/OpSplitter.cpp  18) #include "OpConnIf.h"
src/noarch/OpSplitter.cpp  19) #include "OpMgr.h"
src/noarch/OpSplitter.cpp  20) #include "OpSplitter.h"
src/noarch/OpSplitter.cpp  21) #include "OpSplitterExtension.h"
src/noarch/OpSplitter.cpp  22) #include "SettingFile.h"
src/noarch/OpSplitter.cpp  23) #include "Time.h"
src/noarch/OpSplitter.cpp  24) #include "TimeCallee.h"
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  25) #include "UIntFile.h"
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  26) 
src/noarch/OpSplitter.cpp  27) namespace Blinker {
src/noarch/OpSplitter.cpp  28) 
src/noarch/OpSplitter.cpp  29) /**
src/noarch/OpSplitter.cpp  30)  * @brief constructor
src/noarch/OpSplitter.cpp  31)  * @param[in] name module name
src/noarch/OpSplitter.cpp  32)  * @param[in] mgrs managers
src/noarch/OpSplitter.cpp  33)  * @param[in] dirBase base directory
src/noarch/OpSplitter.cpp  34)  */
src/noarch/OpSplitter.cpp  35) OpSplitter::OpSplitter(const std::string &name, Mgrs &mgrs,
src/noarch/OpSplitter.cpp  36)                          const Directory &dirBase):
src/noarch/OpSplitter.cpp  37)   Module(name, mgrs, dirBase),
src/noarch/OpSplitter.cpp  38)   m_fileSound(dirBase.getFile("sound")),
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  39)   m_fileMaxConn(dirBase.getFile("maxconn")),
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  40)   m_fileSingle(dirBase.getFile("single")),
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  41)   m_extListTracker(*this, dirBase.getSubdir("extensions"))
src/noarch/OpSplitter.cpp  42) {
src/noarch/OpSplitter.cpp  43)   // load extensions
src/noarch/OpSplitter.cpp  44)   m_extListTracker.init();
src/noarch/OpSplitter.cpp  45) 
src/noarch/OpSplitter.cpp  46)   // open operator connection interface
src/noarch/OpSplitter.cpp  47)   m_mgrs.m_opMgr.open(m_name, this);
src/noarch/OpSplitter.cpp  48) }
src/noarch/OpSplitter.cpp  49) 
src/noarch/OpSplitter.cpp  50) /// virtual destructor
src/noarch/OpSplitter.cpp  51) OpSplitter::~OpSplitter()
src/noarch/OpSplitter.cpp  52) {
src/noarch/OpSplitter.cpp  53)   // close operator connection interface
src/noarch/OpSplitter.cpp  54)   m_mgrs.m_opMgr.close(m_name);
src/noarch/OpSplitter.cpp  55) 
src/noarch/OpSplitter.cpp  56)   // close all connections
src/noarch/OpSplitter.cpp  57)   while (!m_mapLocal.empty()) {
src/noarch/OpSplitter.cpp  58)     MapLocal::iterator it = m_mapLocal.begin();
src/noarch/OpSplitter.cpp  59)     it->first->close();
src/noarch/OpSplitter.cpp  60)     m_mapLocal.erase(it);
src/noarch/OpSplitter.cpp  61)   }
src/noarch/OpSplitter.cpp  62)   while (!m_mapInOut.empty()) {
src/noarch/OpSplitter.cpp  63)     MapInOut::iterator it = m_mapInOut.begin();
src/noarch/OpSplitter.cpp  64)     it->first->close();
src/noarch/OpSplitter.cpp  65)     m_mapInOut.erase(it);
src/noarch/OpSplitter.cpp  66)   }
src/noarch/OpSplitter.cpp  67)   while (!m_mapOutIn.empty()) {
src/noarch/OpSplitter.cpp  68)     MapOutIn::iterator it = m_mapOutIn.begin();
src/noarch/OpSplitter.cpp  69)     it->first->close();
src/noarch/OpSplitter.cpp  70)     m_mapOutIn.erase(it);
src/noarch/OpSplitter.cpp  71)   }
src/noarch/OpSplitter.cpp  72) 
src/noarch/OpSplitter.cpp  73)   // unload extensions
src/noarch/OpSplitter.cpp  74)   m_extListTracker.clear();
src/noarch/OpSplitter.cpp  75) 
src/noarch/OpSplitter.cpp  76)   // cancel time callback
src/noarch/OpSplitter.cpp  77)   m_mgrs.m_callMgr.cancelTimeCall(this);
src/noarch/OpSplitter.cpp  78) }
src/noarch/OpSplitter.cpp  79) 
src/noarch/OpSplitter.cpp  80) /// check for update of configuration
src/noarch/OpSplitter.cpp  81) void OpSplitter::updateConfig()
src/noarch/OpSplitter.cpp  82) {
src/noarch/OpSplitter.cpp  83)   // sound name file was modified -> re-read sound name
src/noarch/OpSplitter.cpp  84)   if (m_fileSound.checkModified())
src/noarch/OpSplitter.cpp  85)     m_fileSound.update();
src/noarch/OpSplitter.cpp  86) 
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  87)   // max. number of conn. file was modified -> re-read max. number of conn.
src/noarch/OpSplitter.cpp  88)   if (m_fileMaxConn.checkModified())
src/noarch/OpSplitter.cpp  89)     m_fileMaxConn.update();
src/noarch/OpSplitter.cpp  90) 
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  91)   // single mode config file was modified -> re-read single mode config
src/noarch/OpSplitter.cpp  92)   if (m_fileSingle.checkModified())
src/noarch/OpSplitter.cpp  93)     m_fileSingle.update();
src/noarch/OpSplitter.cpp  94) 
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp  95)   // extensions update
src/noarch/OpSplitter.cpp  96)   m_extListTracker.updateConfig();
src/noarch/OpSplitter.cpp  97) }
src/noarch/OpSplitter.cpp  98) 
src/noarch/OpSplitter.cpp  99) /// callback when requested time reached
src/noarch/OpSplitter.cpp 100) void OpSplitter::timeCall()
src/noarch/OpSplitter.cpp 101) {
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 102)   // process pending actions for local connections
src/noarch/OpSplitter.cpp 103)   MapLocal::iterator it = m_mapLocal.begin();
src/noarch/OpSplitter.cpp 104)   while (it != m_mapLocal.end()) {
src/noarch/OpSplitter.cpp 105)     // close connection
src/noarch/OpSplitter.cpp 106)     if (it->second.m_close) {
src/noarch/OpSplitter.cpp 107)       MapLocal::iterator itDel = it;
src/noarch/OpSplitter.cpp 108)       ++it; // we have to increment ourself to make erasing in loop work
src/noarch/OpSplitter.cpp 109)       itDel->first->close();
src/noarch/OpSplitter.cpp 110)       m_mapLocal.erase(itDel);
src/noarch/OpSplitter.cpp 111)       continue; // it already incremented -> skip rest of loop
src/noarch/OpSplitter.cpp 112)     }
src/noarch/OpSplitter.cpp 113)     // send sound play request on marked local operator connection
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 114)     if (it->second.m_sendPlay) {
src/noarch/OpSplitter.cpp 115)       it->second.m_sendPlay = false;
src/noarch/OpSplitter.cpp 116)       if (m_fileSound.m_valid)
src/noarch/OpSplitter.cpp 117)         it->first->sendPlay(m_fileSound.m_obj.m_str);
src/noarch/OpSplitter.cpp 118)     }
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 119)     ++it;
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 120)   }
src/noarch/OpSplitter.cpp 121) }
src/noarch/OpSplitter.cpp 122) 
src/noarch/OpSplitter.cpp 123) /**
Stefan Schuermans fix comment typo

Stefan Schuermans authored 5 years ago

src/common/OpSplitter.cpp 124)  * @brief check if accepting new operator connection is possible
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 125)  * @param[in] name operator interface name
src/noarch/OpSplitter.cpp 126)  * @return if accepting new connection is possible
src/noarch/OpSplitter.cpp 127)  */
src/noarch/OpSplitter.cpp 128) bool OpSplitter::acceptNewOpConn(const std::string &name)
src/noarch/OpSplitter.cpp 129) {
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 130)   // if maximum number of connections if limited, check it
src/noarch/OpSplitter.cpp 131)   if (m_fileMaxConn.m_valid &&
src/noarch/OpSplitter.cpp 132)       m_mapLocal.size() + m_mapInOut.size() >= m_fileMaxConn.m_obj.m_uint)
src/noarch/OpSplitter.cpp 133)     return false; // too many connection
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 134) 
src/noarch/OpSplitter.cpp 135)   // single mode
src/noarch/OpSplitter.cpp 136)   if (m_fileSingle.m_valid && m_fileSingle.m_obj.m_bool) {
src/noarch/OpSplitter.cpp 137) 
src/noarch/OpSplitter.cpp 138)     // accept first connection
src/noarch/OpSplitter.cpp 139)     if (m_mapLocal.empty() && m_mapInOut.empty())
src/noarch/OpSplitter.cpp 140)       return true;
src/noarch/OpSplitter.cpp 141) 
src/noarch/OpSplitter.cpp 142)     // no operator interface selected yet
src/noarch/OpSplitter.cpp 143)     if (m_singleOp.empty())
src/noarch/OpSplitter.cpp 144)       return false;
src/noarch/OpSplitter.cpp 145) 
src/noarch/OpSplitter.cpp 146)     // additional connections: ask selected operator interface
src/noarch/OpSplitter.cpp 147)     return m_mgrs.m_opMgr.canConnect(m_singleOp);
src/noarch/OpSplitter.cpp 148) 
src/noarch/OpSplitter.cpp 149)   } // if m_fileSingle
src/noarch/OpSplitter.cpp 150) 
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 151)   return true;
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 152) 
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 153)   (void)name; // unused
src/noarch/OpSplitter.cpp 154) }
src/noarch/OpSplitter.cpp 155) 
src/noarch/OpSplitter.cpp 156) /**
src/noarch/OpSplitter.cpp 157)  * @brief new operator connection
src/noarch/OpSplitter.cpp 158)  * @param[in] name operator interface name
src/noarch/OpSplitter.cpp 159)  * @param[in] pConn operator connection object
src/noarch/OpSplitter.cpp 160)  *
src/noarch/OpSplitter.cpp 161)  * The new connection may not yet be used for sending inside this callback.
src/noarch/OpSplitter.cpp 162)  */
src/noarch/OpSplitter.cpp 163) void OpSplitter::newOpConn(const std::string &name, OpConn *pConn)
src/noarch/OpSplitter.cpp 164) {
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 165)   // this is a new incoming connection
src/noarch/OpSplitter.cpp 166) 
src/noarch/OpSplitter.cpp 167)   // single mode and not first connection
src/noarch/OpSplitter.cpp 168)   if (m_fileSingle.m_valid && m_fileSingle.m_obj.m_bool) {
src/noarch/OpSplitter.cpp 169)     if (!m_mapLocal.empty() || !m_mapInOut.empty()) {
src/noarch/OpSplitter.cpp 170) 
src/noarch/OpSplitter.cpp 171)       // try to open outgoiong operator connection to selected operator intf.
src/noarch/OpSplitter.cpp 172)       OpConn *pOutConn = m_mgrs.m_opMgr.connect(m_singleOp, this);
src/noarch/OpSplitter.cpp 173)       if (!pOutConn) {
src/noarch/OpSplitter.cpp 174)         // module is not ready for connection
src/noarch/OpSplitter.cpp 175)         newLocal(pConn, true); // make conn. a local conn. to be closed soon
src/noarch/OpSplitter.cpp 176)         return;
src/noarch/OpSplitter.cpp 177)       }
src/noarch/OpSplitter.cpp 178) 
src/noarch/OpSplitter.cpp 179)       // establish connection forwarding
src/noarch/OpSplitter.cpp 180)       m_mapInOut[pConn] = pOutConn;
src/noarch/OpSplitter.cpp 181)       m_mapOutIn[pOutConn] = pConn;
src/noarch/OpSplitter.cpp 182) 
src/noarch/OpSplitter.cpp 183)       return;
src/noarch/OpSplitter.cpp 184)     } // if !m_mapLocal.empty() ...
src/noarch/OpSplitter.cpp 185)   } // if m_fileSingle ...
src/noarch/OpSplitter.cpp 186) 
src/noarch/OpSplitter.cpp 187)   // make connection a local connection
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 188)   newLocal(pConn);
src/noarch/OpSplitter.cpp 189) 
src/noarch/OpSplitter.cpp 190)   (void)name; // unused
src/noarch/OpSplitter.cpp 191) }
src/noarch/OpSplitter.cpp 192) 
src/noarch/OpSplitter.cpp 193) /**
src/noarch/OpSplitter.cpp 194)  * @brief key command received on operator connection
src/noarch/OpSplitter.cpp 195)  * @param[in] pConn operator connection object
src/noarch/OpSplitter.cpp 196)  * @param[in] key key that was pressed
src/noarch/OpSplitter.cpp 197)  */
src/noarch/OpSplitter.cpp 198) void OpSplitter::opConnRecvKey(OpConn *pConn, char key)
src/noarch/OpSplitter.cpp 199) {
src/noarch/OpSplitter.cpp 200)   // local connection -> process
src/noarch/OpSplitter.cpp 201)   MapLocal::iterator itLocal = m_mapLocal.find(pConn);
src/noarch/OpSplitter.cpp 202)   if (itLocal != m_mapLocal.end()) {
src/noarch/OpSplitter.cpp 203)     localKey(itLocal, key);
src/noarch/OpSplitter.cpp 204)     return;
src/noarch/OpSplitter.cpp 205)   }
src/noarch/OpSplitter.cpp 206) 
src/noarch/OpSplitter.cpp 207)   // incoming to outgoing connection -> forward
src/noarch/OpSplitter.cpp 208)   MapInOut::iterator itInOut = m_mapInOut.find(pConn);
src/noarch/OpSplitter.cpp 209)   if (itInOut != m_mapInOut.end()) {
src/noarch/OpSplitter.cpp 210)     itInOut->second->sendKey(key);
src/noarch/OpSplitter.cpp 211)     return;
src/noarch/OpSplitter.cpp 212)   }
src/noarch/OpSplitter.cpp 213) 
src/noarch/OpSplitter.cpp 214)   // outgoing to incoming connection -> forward
src/noarch/OpSplitter.cpp 215)   MapOutIn::iterator itOutIn = m_mapOutIn.find(pConn);
src/noarch/OpSplitter.cpp 216)   if (itOutIn != m_mapOutIn.end()) {
src/noarch/OpSplitter.cpp 217)     itOutIn->second->sendKey(key);
src/noarch/OpSplitter.cpp 218)     return;
src/noarch/OpSplitter.cpp 219)   }
src/noarch/OpSplitter.cpp 220) }
src/noarch/OpSplitter.cpp 221) 
src/noarch/OpSplitter.cpp 222) /**
src/noarch/OpSplitter.cpp 223)  * @brief play command received on operator connection
src/noarch/OpSplitter.cpp 224)  * @param[in] pConn operator connection object
src/noarch/OpSplitter.cpp 225)  * @param[in] sound name of sound to play
src/noarch/OpSplitter.cpp 226)  */
src/noarch/OpSplitter.cpp 227) void OpSplitter::opConnRecvPlay(OpConn *pConn, const std::string &sound)
src/noarch/OpSplitter.cpp 228) {
src/noarch/OpSplitter.cpp 229)   // play command does not make sense for local connections -> ignore
src/noarch/OpSplitter.cpp 230) 
src/noarch/OpSplitter.cpp 231)   // incoming to outgoing connection -> forward
src/noarch/OpSplitter.cpp 232)   MapInOut::iterator itInOut = m_mapInOut.find(pConn);
src/noarch/OpSplitter.cpp 233)   if (itInOut != m_mapInOut.end()) {
src/noarch/OpSplitter.cpp 234)     itInOut->second->sendPlay(sound);
src/noarch/OpSplitter.cpp 235)     return;
src/noarch/OpSplitter.cpp 236)   }
src/noarch/OpSplitter.cpp 237) 
src/noarch/OpSplitter.cpp 238)   // outgoing to incoming connection -> forward
src/noarch/OpSplitter.cpp 239)   MapOutIn::iterator itOutIn = m_mapOutIn.find(pConn);
src/noarch/OpSplitter.cpp 240)   if (itOutIn != m_mapOutIn.end()) {
src/noarch/OpSplitter.cpp 241)     itOutIn->second->sendPlay(sound);
src/noarch/OpSplitter.cpp 242)     return;
src/noarch/OpSplitter.cpp 243)   }
src/noarch/OpSplitter.cpp 244) }
src/noarch/OpSplitter.cpp 245) 
src/noarch/OpSplitter.cpp 246) /**
src/noarch/OpSplitter.cpp 247)  * @brief operator connection is closed
src/noarch/OpSplitter.cpp 248)  * @param[in] pConn operator connection object
src/noarch/OpSplitter.cpp 249)  *
src/noarch/OpSplitter.cpp 250)  * The connection may not be used for sending any more in this callback.
src/noarch/OpSplitter.cpp 251)  */
src/noarch/OpSplitter.cpp 252) void OpSplitter::opConnClose(OpConn *pConn)
src/noarch/OpSplitter.cpp 253) {
src/noarch/OpSplitter.cpp 254)   // local connection -> forget this connection
src/noarch/OpSplitter.cpp 255)   MapLocal::iterator itLocal = m_mapLocal.find(pConn);
src/noarch/OpSplitter.cpp 256)   if (itLocal != m_mapLocal.end()) {
src/noarch/OpSplitter.cpp 257)     m_mapLocal.erase(itLocal);
src/noarch/OpSplitter.cpp 258)     return;
src/noarch/OpSplitter.cpp 259)   }
src/noarch/OpSplitter.cpp 260) 
src/noarch/OpSplitter.cpp 261)   // incoming to outgoing connection -> close outgoing connection as well
src/noarch/OpSplitter.cpp 262)   MapInOut::iterator itInOut = m_mapInOut.find(pConn);
src/noarch/OpSplitter.cpp 263)   if (itInOut != m_mapInOut.end()) {
src/noarch/OpSplitter.cpp 264)     itInOut->second->close();
src/noarch/OpSplitter.cpp 265)     m_mapOutIn.erase(itInOut->second);
src/noarch/OpSplitter.cpp 266)     m_mapInOut.erase(itInOut);
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 267)     if (m_mapInOut.empty()) // last connection closed -> no operator intf. sel.
src/noarch/OpSplitter.cpp 268)       m_singleOp.clear();
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 269)     return;
src/noarch/OpSplitter.cpp 270)   }
src/noarch/OpSplitter.cpp 271) 
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 272)   // outgoing to incoming connection
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 273)   MapOutIn::iterator itOutIn = m_mapOutIn.find(pConn);
src/noarch/OpSplitter.cpp 274)   if (itOutIn != m_mapOutIn.end()) {
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 275)     OpConn * pInConn = itOutIn->second;
src/noarch/OpSplitter.cpp 276)     m_mapInOut.erase(pInConn);
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 277)     m_mapOutIn.erase(itOutIn);
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 278)     if (m_mapInOut.empty()) // last connection closed -> no operator intf. sel.
src/noarch/OpSplitter.cpp 279)       m_singleOp.clear();
src/noarch/OpSplitter.cpp 280)     // single mode and not last connection
src/noarch/OpSplitter.cpp 281)     if (m_fileSingle.m_valid && m_fileSingle.m_obj.m_bool) {
src/noarch/OpSplitter.cpp 282)       if (!m_mapLocal.empty() || !m_mapInOut.empty()) {
src/noarch/OpSplitter.cpp 283)         // close incoming connection as well
src/noarch/OpSplitter.cpp 284)         pInConn->close();
src/noarch/OpSplitter.cpp 285)         return;
src/noarch/OpSplitter.cpp 286)       }
src/noarch/OpSplitter.cpp 287)     }
src/noarch/OpSplitter.cpp 288)     // make incoming connection local
src/noarch/OpSplitter.cpp 289)     newLocal(pInConn);
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 290)     return;
src/noarch/OpSplitter.cpp 291)   }
src/noarch/OpSplitter.cpp 292) }
src/noarch/OpSplitter.cpp 293) 
src/noarch/OpSplitter.cpp 294) /**
src/noarch/OpSplitter.cpp 295)  * @brief create new local connection
src/noarch/OpSplitter.cpp 296)  * @param[in] pConn connection to make local
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 297)  * @param[in] close if to close connection as soon as possible
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 298)  */
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 299) void OpSplitter::newLocal(OpConn *pConn, bool close /* = false */)
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 300) {
src/noarch/OpSplitter.cpp 301)   // add connection to local connection map
src/noarch/OpSplitter.cpp 302)   Local &local = m_mapLocal[pConn];
src/noarch/OpSplitter.cpp 303)   local.m_number.clear(); // no extension dialed so far
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 304)   local.m_sendPlay = !close; // send play command if close not requested
src/noarch/OpSplitter.cpp 305)   local.m_close = close;
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 306)   m_mgrs.m_callMgr.requestTimeCall(this, Time::now());
src/noarch/OpSplitter.cpp 307) }
src/noarch/OpSplitter.cpp 308) 
src/noarch/OpSplitter.cpp 309) /**
src/noarch/OpSplitter.cpp 310)  * @brief a key has been pressed for a local connection
src/noarch/OpSplitter.cpp 311)  * @param[in] itLocal local connection
src/noarch/OpSplitter.cpp 312)  * @param[in] key the key pressed
src/noarch/OpSplitter.cpp 313)  */
src/noarch/OpSplitter.cpp 314) void OpSplitter::localKey(MapLocal::iterator itLocal, char key)
src/noarch/OpSplitter.cpp 315) {
src/noarch/OpSplitter.cpp 316)   switch (key) {
src/noarch/OpSplitter.cpp 317)     // begin new extension number
src/noarch/OpSplitter.cpp 318)     case '*':
src/noarch/OpSplitter.cpp 319)       itLocal->second.m_number.clear();
src/noarch/OpSplitter.cpp 320)       break;
src/noarch/OpSplitter.cpp 321)     // add digit to extension number
src/noarch/OpSplitter.cpp 322)     case '0':
src/noarch/OpSplitter.cpp 323)     case '1':
src/noarch/OpSplitter.cpp 324)     case '2':
src/noarch/OpSplitter.cpp 325)     case '3':
src/noarch/OpSplitter.cpp 326)     case '4':
src/noarch/OpSplitter.cpp 327)     case '5':
src/noarch/OpSplitter.cpp 328)     case '6':
src/noarch/OpSplitter.cpp 329)     case '7':
src/noarch/OpSplitter.cpp 330)     case '8':
src/noarch/OpSplitter.cpp 331)     case '9':
src/noarch/OpSplitter.cpp 332)       itLocal->second.m_number += key;
src/noarch/OpSplitter.cpp 333)       break;
src/noarch/OpSplitter.cpp 334)     // close local connection / call extension
src/noarch/OpSplitter.cpp 335)     case '#':
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 336)       if (itLocal->second.m_number.empty()) {
src/noarch/OpSplitter.cpp 337)         itLocal->first->close();
src/noarch/OpSplitter.cpp 338)         m_mapLocal.erase(itLocal);
src/noarch/OpSplitter.cpp 339)       } else {
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 340)         callExtension(itLocal);
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 341)       }
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 342)       break;
src/noarch/OpSplitter.cpp 343)   }
src/noarch/OpSplitter.cpp 344) }
src/noarch/OpSplitter.cpp 345) 
src/noarch/OpSplitter.cpp 346) /**
src/noarch/OpSplitter.cpp 347)  * @brief call extension dialed over local connection
src/noarch/OpSplitter.cpp 348)  * @param[in] itLocal local connection
src/noarch/OpSplitter.cpp 349)  */
src/noarch/OpSplitter.cpp 350) void OpSplitter::callExtension(MapLocal::iterator itLocal)
src/noarch/OpSplitter.cpp 351) {
src/noarch/OpSplitter.cpp 352)   // lookup extension
src/noarch/OpSplitter.cpp 353)   ExtMap::iterator itExt = m_extMap.find(itLocal->second.m_number);
src/noarch/OpSplitter.cpp 354)   if (itExt == m_extMap.end()) {
src/noarch/OpSplitter.cpp 355)     // unknown extension -> ignore
src/noarch/OpSplitter.cpp 356)     itLocal->second.m_number.clear(); // begin new extension number
src/noarch/OpSplitter.cpp 357)     return;
src/noarch/OpSplitter.cpp 358)   }
src/noarch/OpSplitter.cpp 359) 
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 360)   // save selected operator interface for single mode
src/noarch/OpSplitter.cpp 361)   m_singleOp = itExt->second;
src/noarch/OpSplitter.cpp 362) 
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 363)   // try to open outgoiong operator connection to module
src/noarch/OpSplitter.cpp 364)   OpConn *pOutConn = m_mgrs.m_opMgr.connect(itExt->second, this);
Stefan Schuermans implemented single mode for...

Stefan Schuermans authored 12 years ago

src/noarch/OpSplitter.cpp 365)   if (!pOutConn) {