/************************************************************************* 【文件名】 TapiControl.h 【功能模块和目的】 TAPI控制类头文件 【开发者及日期】 郑石诺 2016/03/24 【版本】 V1.0.0 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ #pragma once #include class CTapiLine; class CTrunkBase; /************************************************************************* 【类名】 CTapiControl 【功能】 【接口说明】 TAPI控制类 【开发者及日期】 郑石诺 2016/03/24 【版本】 V1.0.0 【版权信息】 Copyright (C)2016 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ class CTapiControl { SINGLETON_DECLARE(CTapiControl) public: ~CTapiControl(void); // 设备操作 bool init(void); void release(void); // 线路查询函数 CTapiLine* getLine(DWORD DevID); // 根据设备编号查找线路 CTapiLine* getLine(LPCTSTR ExtID); // 根据分机号查找线路 CTapiLine* getLineByCallId(int DevLinkCallId); // 根据DevLink CallId 查找线路 CTapiLine* getIvrLineByAssoTrunk(UINT TrunkId); // 根据中继ID查找其当前关联的IVR分机 CTapiLine* getFaxLineByAssoTrunk(UINT TrunkId); // 根据中继ID查找其当前关联的传真分机 CTapiLine* getFreeIvrLine(void); // 查找一条空闲的IVR线路 CTapiLine* getFreeFaxLine(void); // 查找一条空闲的FAX线路 CTapiLine* getFreeFaxLineOnly(void); // 仅查找空闲的Fax线路不包含IVR线路 CTapiLine* getErrorIvrLine(void); // 获取正在执行任务,并且未关联外线成功的线路 UINT getTrunkAssoIvrId(UINT TrunkId); UINT getTrunkAssoFaxId(UINT TrunkId); // DevLink设备事件响应入口 void onDevLinkEventS(DevLinkInfoS* pInfoS); // S事件 void onDevLinkEventA(int DevLinkCallId); // A事件 void onDevLinkEventD(int DevLinkCallId); // D事件 private: CTapiControl(void); // 设备控制主回调函数 static void CALLBACK __tapiLineCallback(DWORD dwDevice, DWORD nMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3); // 设备初始化相关函数 UINT __openValidLines(int DevCounts); // 打开所有可用线路 HLINE __openDev(CString& ExtID, DWORD DevID, DWORD ApiVersion, DWORD ExtVersion, LINEDEVCAPS* pDevCaps); // 打开TAPI线路并返回设备句柄 // TAPI设备操作子函数 HRESULT __loopLineGetDevCaps(DWORD DevID, DWORD ApiVersion, DWORD ExtVersion, LINEDEVCAPS* &pDevCaps); // 得到设备功能 HRESULT __loopLineGetAddressCaps(DWORD DevID, DWORD AddressID, DWORD ApiVersion, LINEADDRESSCAPS*& pAddressCaps); // 得到线路能力 // TAPI通用字符解析函数(从TAPI数据结构中得到相关信息) CString __getTapiString(void *pInfo, DWORD Size, DWORD Offset); private: const static DWORD TAPI_LO_VERSION = 0x00020000; // TAPI v2.0 const static DWORD TAPI_HI_VERSION = TAPI_CURRENT_VERSION; // TAPI当前最高版本号 // 系统成员 HLINEAPP m_hLineApp; // TAPI应用主控句柄 CMap m_MapLineByDevID; // 以DevID为索引的LineMap CMap m_MapLineByExtID; // 以ExtID为索引的LineMap };