dd3837f23962c8a7a328f96af116dfdb9c45a1bf
Stefan Schuermans begin of phone connector

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_PHONE_H
7) #define BLINKER_PHONE_H
8) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

9) #include <map>
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

10) #include <string>
11) 
12) #include "Directory.h"
13) #include "File.h"
14) #include "IoCallee.h"
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

15) #include "ListTracker.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

16) #include "Mgrs.h"
17) #include "Module.h"
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

18) #include "OpConn.h"
19) #include "OpConnIf.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

20) #include "SettingFile.h"
21) #include "Time.h"
22) #include "TimeCallee.h"
23) 
24) namespace Blinker {
25) 
26) /// phone connector (using EBIP)
27) template<typename ADDR, typename SOCK>
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

28) class Phone: public IoCallee, public Module, public OpConnIf, public TimeCallee
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

29) {
30) protected:
31)   /// type for address setting file
32)   typedef SettingFile<ADDR> AddrFile;
33) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

34)   /// extension to be called
35)   class Extension;
36) 
37)   /// extension list tracker
38)   typedef ListTracker<Phone, Extension, Directory> ExtListTracker;
39) 
40)   /// map of extensions to call (extension name  -> module name)
41)   typedef std::map<std::string, std::string> ExtMap;
42) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

43)   /// map from line number to connection
44)   typedef std::map<unsigned int, OpConn *> LineConnMap;
45) 
46)   /// map from connection to line number
47)   typedef std::map<OpConn *, unsigned int> ConnLineMap;
48) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

49) public:
50)   /**
51)    * @brief constructor
52)    * @param[in] mgrs managers
53)    * @param[in] dirBase base directory
54)    */
55)   Phone(Mgrs &mgrs, const Directory &dirBase);
56) 
57)   /// virtual destructor
58)   virtual ~Phone();
59) 
60) private:
61)   /// copy constructor disabled
62)   Phone(const Phone &that);
63) 
64)   /// assignment operator disabled
65)   const Phone & operator=(const Phone &that);
66) 
67) public:
68)   /// check for update of configuration
69)   virtual void updateConfig();
70) 
71)   /// callback when requested time reached
72)   virtual void timeCall();
73) 
74)   /**
75)    * @brief callback when I/O object is readable
76)    * @param[in] io I/O object that is readable
77)    */
78)   virtual void ioReadCall(Io *io);
79) 
80)   /**
81)    * @brief callback when I/O object is writable
82)    * @param[in] io I/O object that is writable
83)    */
84)   virtual void ioWriteCall(Io *io);
85) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

86)   /**
87)    * @brief operator connection is closed
88)    * @param[in] pConn operator connection object
89)    */
90)   virtual void opConnClose(OpConn *pConn);
91) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

92) protected:
93)   /// (re-)read server address
94)   void readServer();
95) 
96)   /// create socket and bind it
97)   void createSock();
98) 
99)   /// destroy socket
100)   void destroySock();
101) 
102)   /// register with server
103)   void sendRegister();
104) 
105)   /// send heartbeat to server
106)   void sendHeartbeat();
107) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

108)   /**
109)    * @brief send hangup message
110)    * @param[in] line number of line to hangup
111)    */
112)   void sendHangup(unsigned int line);
113) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

114)   /**
115)    * @brief send message to server
116)    * @param[in] msg message to send
117)    */
118)   void send(const std::string &msg);
119) 
120)   /// receive data from socket
121)   void receiveFromSock();
122) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

123)   /**
124)    * @brief process message from server
125)    * @param[in] msg message from server
126)    */
127)   void serverMsg(const std::string &msg);
128) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

129)   /**
130)    * @brief process incoming call
131)    * @param[in] line number of phone line
132)    * @param[in] extension extenstion called (i.e. phone number)
133)    */
134)   void incomingCall(unsigned int line, const std::string &extension);
135) 
136)   /**
137)    * @brief hangup on phone line
138)    * @param[in] line number of phone line
139)    */
140)   void hangup(unsigned int line);
141) 
142)   /**
143)    * @brief key pressed on phone line
144)    * @param[in] line number of phone line
145)    * @param[in] key key that has been pressed
146)    */
147)   void keyPressed(unsigned int line, char key);
148) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

149)   /// update time callback
150)   void updateTimeCallback();
151) 
152) protected:
153)   static const Time m_serverTimeout;
154)   static const Time m_heartbeatInterval;
155) 
156) protected:
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

157)   AddrFile       m_fileBind;       ///< bind address file
158)   AddrFile       m_fileServer;     ///< server address file
159)   ExtListTracker m_extListTracker; ///< extension tracker
160)   SOCK           *m_pSock;         ///< socket to use for sending messages
161)   Time           m_timeRegister;   ///< time to re-register
162)   Time           m_timeHeartbeat;  ///< time to send next heartbeat
163)   ExtMap         m_extMap;         ///< map of extensions to call
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

164)   LineConnMap    m_lineConnMap;    ///< map from line number to connection
165)   ConnLineMap    m_connLineMap;    ///< map from connection to line number