新聞中心

EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > TAPI軟電話通信系統(tǒng)的模塊化設(shè)計(jì)

TAPI軟電話通信系統(tǒng)的模塊化設(shè)計(jì)

作者: 時(shí)間:2015-04-18 來(lái)源:網(wǎng)絡(luò) 收藏

  3. 1 應(yīng)用控制類(lèi)設(shè)計(jì)

本文引用地址:http://butianyuan.cn/article/272752.htm

  TapiA pplicat ion是對(duì)的管理,它處于調(diào)用結(jié)構(gòu)的頂層,通過(guò)下層的服務(wù)為上層應(yīng)用程序提供透明、規(guī)格化的信息服務(wù)。在通過(guò)進(jìn)行遠(yuǎn)程程序設(shè)計(jì)時(shí),必不可少的是要調(diào)用lineIn itia lizeEx( )函數(shù)以初始化TAPI,以及調(diào)用lineOpen( )函數(shù)以打開(kāi)線路,然后才能使用TAPI進(jìn)行監(jiān)控和代理呼叫等功能。除此之外,為了編寫(xiě)可靠的遠(yuǎn)程程序,還應(yīng)調(diào)用有關(guān)檢測(cè)線路設(shè)備能力的函數(shù)lineGetDevC aps( ),檢測(cè)TAPI版本兼容性函數(shù)lineN egotiateAPIV ersion( ),檢測(cè)線路當(dāng)前使用狀態(tài)的函數(shù)lineSetStatusM essages( )等以適應(yīng)各種情況。最后調(diào)用lineC lose( )函數(shù)來(lái)關(guān)閉線路,調(diào)用lineShutdow n( )函數(shù)將應(yīng)用程序與TAPI斷開(kāi)。

  為了使TAPI便于操縱,適應(yīng)不同的應(yīng)用開(kāi)發(fā)環(huán)境,本文設(shè)計(jì)了In itia liseTAPI( )這個(gè)不要參數(shù)的初始化函數(shù),把初始化和協(xié)商TAPI版本所需要的參數(shù)通過(guò)內(nèi)聯(lián)機(jī)制進(jìn)行整合,避免了過(guò)多的參數(shù)傳遞。初始化成功后表明應(yīng)用程序已經(jīng)獲得TAPI的數(shù)據(jù)結(jié)構(gòu)和應(yīng)用句柄。為了便于對(duì)設(shè)備的控制,需要和通信設(shè)備取得聯(lián)系并打開(kāi)通信線路。本文設(shè)計(jì)了OpenValidL ines( )這個(gè)不加參數(shù)的函數(shù),只要成功返回后就可以對(duì)通信線路、通信設(shè)備進(jìn)行控制了,其函數(shù)聲明如下:

  class T apiApplicat ion

  {

  pub lic:

  Tap iApp lication( CTap isamp leD lg lg) ;

  ~ T apiApplicat ion( );

  / / TAPI helper funct ions

  BOOL InitialiseTAPI( ) ; / / Initialize TAPI

  void ShutdownTAPI( ); / /C lose TAPI

  void OpenV alidL ines ( ) ; / /Open the lines o fTAPI

  / / Variab les

  CTapisamp leD lg lg;

  HLINEAPP m_hLineApp; / / App lication handle

  DWORD m_NumDevs; / / Number of dev ices

  DWORD * m _ ApiV ersions; / / API versions

  PTAPILINE* m_pL ines; / / Device variables

  LONG m _Curren tL ine; / / currently se lected

  ADDRARRAY m_AddressA rray;

  };

  TAPI初始化工作和有效線路的打開(kāi)這些復(fù)雜的功能,通過(guò)函數(shù)內(nèi)置或全局變量傳遞,整合成一個(gè)不要參數(shù)并且返回值為布爾類(lèi)型的API函數(shù)。應(yīng)用程序只要調(diào)用這兩個(gè)函數(shù)就可以實(shí)現(xiàn)對(duì)TAPI設(shè)備的監(jiān)控和操作。

  3. 2 TAPI線路控制類(lèi)設(shè)計(jì)

  Tap iLine是對(duì)TAPI線路的管理,為了使程序的結(jié)構(gòu)更為清晰和易于升級(jí)以及為了使TAPI能夠更方便的移植到別的應(yīng)用程序中,把TAPI函數(shù)中用于實(shí)現(xiàn)功能的一部分函數(shù)和數(shù)據(jù)結(jié)構(gòu)封裝成一個(gè)類(lèi)來(lái)使用。下面就是通過(guò)V ISUALC + +編程實(shí)現(xiàn)對(duì)TAPI線路控制函數(shù)封裝類(lèi)的頭文件。

  class T apiL ine {

  private:

  TapiA pplicat ion ainA pp; / / paren t object

  DWORD m _LineID; / / My index

  HLINE m _ hL ine; / / M y line hand le typedef

  CL ist

  ExtensionLis;t m_extensionLis;t

  / / the list of call channe l

  public:

  TapiL ine( TapiApp licat ion

  ~ Tap iLine( ) ;

  vo id OnEvent ( DWORD Device, DWORD Msg,

  DWORD Param1, DWORD Param2, DWORD Param3);

  HRESULT Open ( DWORD L ineID, DWORD

  Ca llPr iv ilege, DWORD Med iaModes);

  TapiChanne*l getChannel( DW dwAddressID);

  TapiChanne*l getChanne lCall(HCALL hcall) ;

  / / Functions to support te lephony commands

  BOOL M akeCa ll ( DWORD dwAddressID, LPCT??

  STR pszA ddress) ;

  vo id D ropCall( DWORD dwA ddressID) ;

  vo idHo ldCall( DWORD dwA ddressID) ;

  vo id UnholdC all( DWORD dwAddressID) ;

  vo id B lindT ransferCa ll ( DWORD dwAddressID,

  LPCTSTR pszAddress) ;

  vo id R edirect ( DWORD dwAddressID, LPCTSTR

  pszAddress) ;

  vo id Ca llStatus( DWORD dwAddressID );

  vo id Ca llInfo( DWORD dwA ddressID) ;

  vo id Addressstatus( ) ;

  };

  TapiL ine通過(guò)復(fù)雜的參數(shù)傳遞機(jī)制,封裝了大量的內(nèi)部變量,通過(guò)API接口以統(tǒng)一短消息的形式接收用戶指令同時(shí)返回線路的具體狀態(tài)。最終應(yīng)用程序通過(guò)調(diào)用Tap iL ine的具體函數(shù)對(duì)整個(gè)線路進(jìn)行操作、控制。

  3. 3 TAPI通話控制類(lèi)設(shè)計(jì)

  TapiChanne l是對(duì)具體通話進(jìn)行控制,呼叫是TAPI開(kāi)發(fā)最常用的一個(gè)功能。調(diào)用Tap iL ine的M akeC all ( DWORD dwAddressID,LPCTSTR pszAddress),傳遞當(dāng)前號(hào)碼和目標(biāo)地址就可以進(jìn)行撥打電話,把撥打電話的其他細(xì)節(jié)進(jìn)行內(nèi)部傳遞。當(dāng)以上函數(shù)調(diào)用成功后,TSP就會(huì)控制通訊設(shè)備外呼指定的電話,該函數(shù)調(diào)用后會(huì)立刻返回到應(yīng)用程序,但該電話是否成功撥通,則是依靠消息來(lái)判斷,包括TAPI的其他功能也是這樣的處理方式。其他常用的電話功能如接聽(tīng)、掛斷、轉(zhuǎn)移、三方等都有對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)。

  TAPI初始化成功后,應(yīng)用程序就和TSP設(shè)備建立了聯(lián)系。應(yīng)用程序就可以通過(guò)TAPI函數(shù)控制電話線路、監(jiān)控線路狀態(tài)。函數(shù)lineOpen調(diào)用成功后進(jìn)入消息循環(huán),新生成的呼叫處于IDLE狀態(tài),隨后根據(jù)狀態(tài)指令執(zhí)行不同的操作。當(dāng)調(diào)用lineM akeC all( )后,線路狀態(tài)進(jìn)入D IAL ING、PROCEDING,當(dāng)收到異步響應(yīng)或者應(yīng)答后進(jìn)入呼叫狀態(tài)循環(huán)并依次進(jìn)入CONNECTED和DISCONNECTED,最后回到初始化狀態(tài)。當(dāng)有一路電話呼入時(shí),線路狀態(tài)進(jìn)入OFFER ING、自動(dòng)調(diào)用lineAnsw er( )后進(jìn)入ACCEPTED、PROCED ING,當(dāng)收到異步響應(yīng)或者應(yīng)答后進(jìn)入呼叫狀態(tài)循環(huán)并依次進(jìn)入CONNECTED和D ISCONNECTED,最后回到初始化狀態(tài),整個(gè)TAPI狀態(tài)圖如圖4所示。

  

 

  圖4 TAPI狀態(tài)機(jī)。

c++相關(guān)文章:c++教程


數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理


交換機(jī)相關(guān)文章:交換機(jī)工作原理




關(guān)鍵詞: TAPI 通信

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉