69ac12fcb8ee5ac55fadc04d3a96a3a7c2d0038a
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
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

52)    * @param[in] name module name
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

53)    * @param[in] mgrs managers
54)    * @param[in] dirBase base directory
55)    */
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

56)   Phone(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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