170612ac450ac055992ee96555806c08d82f79a5
Stefan Schuermans 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) #ifndef BLINKER_OPSPLITTER_H
7) #define BLINKER_OPSPLITTER_H
8) 
9) #include <map>
10) #include <string>
11) 
12) #include "Directory.h"
13) #include "File.h"
14) #include "ListTracker.h"
15) #include "Mgrs.h"
16) #include "Module.h"
17) #include "NameFile.h"
18) #include "OpConn.h"
19) #include "OpConnIf.h"
20) #include "OpReqIf.h"
21) #include "SettingFile.h"
22) #include "Time.h"
23) #include "TimeCallee.h"
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

24) #include "UIntFile.h"
Stefan Schuermans implemnted operator connect...

Stefan Schuermans authored 12 years ago

25) 
26) namespace Blinker {
27) 
28) /// operator connection splitter
29) class OpSplitter: public Module, public OpReqIf, public TimeCallee
30) {
31) protected:
32)   /// extension to be called
33)   class Extension;
34) 
35)   /// extension list tracker
36)   typedef ListTracker<OpSplitter, Extension, Directory> ExtListTracker;
37) 
38)   /// map of extensions to call (extension name -> module name)
39)   typedef std::map<std::string, std::string> ExtMap;
40) 
41)   /// type for locally handles connection
42)   struct Local {
43)     std::string m_number;   ///< extension number dialed so far
44)     bool        m_sendPlay; ///< if to send a play request
45)   };
46) 
47)   /**
48)    * @brief map of local connections,
49)    *        contains all incoming connections as key for which no
50)    *        outgoing connection is available
51)    */
52)   typedef std::map<OpConn *, Local> MapLocal;
53) 
54)   /**
55)    * @brief map from incoming to outgoing connections,
56)    *        contains all incoming connectes as key for which a corresponding
57)    *        outgoing connection is available
58)    */
59)   typedef std::map<OpConn *, OpConn *> MapInOut;
60) 
61)   /// map from outgoing to incoming connections
62)   typedef std::map<OpConn *, OpConn *> MapOutIn;
63) 
64) public:
65)   /**
66)    * @brief constructor
67)    * @param[in] name module name
68)    * @param[in] mgrs managers
69)    * @param[in] dirBase base directory
70)    */
71)   OpSplitter(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
72) 
73)   /// virtual destructor
74)   virtual ~OpSplitter();
75) 
76) private:
77)   /// copy constructor disabled
78)   OpSplitter(const OpSplitter &that);
79) 
80)   /// assignment operator disabled
81)   const OpSplitter & operator=(const OpSplitter &that);
82) 
83) public:
84)   /// check for update of configuration
85)   virtual void updateConfig();
86) 
87)   /// callback when requested time reached
88)   virtual void timeCall();
89) 
90)   /**
91)    * @brief check if accepting new operator connction is possible
92)    * @param[in] name operator interface name
93)    * @return if accepting new connection is possible
94)    */
95)   virtual bool acceptNewOpConn(const std::string &name);
96) 
97)   /**
98)    * @brief new operator connection
99)    * @param[in] name operator interface name
100)    * @param[in] pConn operator connection object
101)    *
102)    * The new connection may not yet be used for sending inside this callback.
103)    */
104)   virtual void newOpConn(const std::string &name, OpConn *pConn);
105) 
106)   /**
107)    * @brief key command received on operator connection
108)    * @param[in] pConn operator connection object
109)    * @param[in] key key that was pressed
110)    */
111)   virtual void opConnRecvKey(OpConn *pConn, char key);
112) 
113)   /**
114)    * @brief play command received on operator connection
115)    * @param[in] pConn operator connection object
116)    * @param[in] sound name of sound to play
117)    */
118)   virtual void opConnRecvPlay(OpConn *pConn, const std::string &sound);
119) 
120)   /**
121)    * @brief operator connection is closed
122)    * @param[in] pConn operator connection object
123)    *
124)    * The connection may not be used for sending any more in this callback.
125)    */
126)   virtual void opConnClose(OpConn *pConn);
127) 
128) protected:
129)   /**
130)    * @brief create new local connection
131)    * @param[in] pConn connection to make local
132)    */
133)   void newLocal(OpConn *pConn);
134) 
135)   /**
136)    * @brief a key has been pressed for a local connection
137)    * @param[in] itLocal local connection
138)    * @param[in] key the key pressed
139)    */
140)   void localKey(MapLocal::iterator itLocal, char key);
141) 
142)   /**
143)    * @brief close local connection
144)    * @param[in] itLocal local connection
145)    */
146)   void localClose(MapLocal::iterator itLocal);
147) 
148)   /**
149)    * @brief call extension dialed over local connection
150)    * @param[in] itLocal local connection
151)    */
152)   void callExtension(MapLocal::iterator itLocal);
153) 
154) protected:
155)   NameFile       m_fileSound;      ///< file containing sound name
Stefan Schuermans limit number of connections...

Stefan Schuermans authored 12 years ago

156)   UIntFile       m_fileMaxConn;    ///< file containing max. number of conn.