| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- #include "StdAfx.h"
- #include "DevControl.h"
- #include "OperationReactor.h"
- #include "FsProxy.h"
- SINGLETON_IMPLEMENT(CDevControl)
- IDeviceLink& IDeviceLink::getInstance( void )
- {
- return CDevControl::GetInstance();
- }
- CDevControl::CDevControl(void) : m_pOperator(NULL)
- {
- }
- CDevControl::~CDevControl(void)
- {
- }
- /*****************************************************************
- **【函数名称】 __openTts
- **【函数功能】 打开TTS
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::__openTts( void )
- {
- TTS_TYPE TtsType = CConfig::ttsType();
- if(TtsType != TTS_NONE)
- {
- CHAR szErrCode[BUFFER_LENGTH];
- if(ITtsInterface::getInstance().init(TtsType, CConfig::ttsPath(), szErrCode))
- onEventLog(LOG_LEVEL_NORMAL, _T("{DevCtrl}: TTS打开成功"));
- else
- onEventLog(LOG_LEVEL_WARNING, _T("{DevCtrl}: TTS打开失败, Reason = %s"), szErrCode);
- }
- }
- /*****************************************************************
- **【函数名称】 __closeTts
- **【函数功能】 关闭TTS
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::__closeTts( void )
- {
- if(CConfig::ttsType() != TTS_NONE)
- ITtsInterface::getInstance().close();
- }
- /*****************************************************************
- **【函数名称】 open
- **【函数功能】 设备打开
- **【参数】 a_pOperator:设备操作者对象
- **【返回值】 成功true,失败false
- ****************************************************************/
- bool CDevControl::open( IDeviceOperator* a_pOperator )
- {
- ASSERT(a_pOperator != NULL);
- if(m_pOperator != NULL)
- return false;
- m_pOperator = a_pOperator;
- onEventLog(LOG_LEVEL_NORMAL, _T("{DevCtrl}: 设备链路建立..."));
- do
- {
- if(!CConfig::load())
- {
- onEventLog(LOG_LEVEL_ERROR, _T("{DevCtrl}: 加载配置信息失败"));
- m_pOperator = NULL;
- return false;
- }
- __openTts();
- onEventResType();
- // 连接设备
- if(!CFsProxy::GetInstance().init(&COperationReactor::GetInstance()))
- {
- m_pOperator = NULL;
- return false;
- }
- onEventDevUp();
- onEventLog(LOG_LEVEL_NORMAL, _T("{DevCtrl}: 设备链路建立完成"));
- return true;
- } while (false);
- onEventLog(LOG_LEVEL_ERROR, _T("{DevCtrl}: 设备链路建立失败"));
- m_pOperator = NULL;
- return false;
- }
- /*****************************************************************
- **【函数名称】 close
- **【函数功能】 设备关闭
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::close( void )
- {
- if(m_pOperator != NULL)
- {
- onEventLog(LOG_LEVEL_NORMAL, _T("{DevCtrl}: 设备链路关闭"));
- // 关闭设备
- CFsProxy::GetInstance().release();
- __closeTts();
- m_pOperator = NULL;
- }
- }
- /*****************************************************************
- **【函数名称】 operate
- **【函数功能】 线路控制
- **【参数】 nInstance 调用标识
- nOpType 操作类型
- nResID 线路ID
- pLineOpParam 操作参数
- **【返回值】 成功true,失败false
- ****************************************************************/
- bool CDevControl::operate( LONG Instance, LINE_OP OpType, ULONG ResID, LineOpParam* pLineOpParam )
- {
- return COperationReactor::GetInstance().procOperation(Instance, OpType, ResID, pLineOpParam);
- }
- /*****************************************************************
- **【函数名称】 onEventResType
- **【函数功能】 通知可控的资源类型
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventResType( void )
- {
- EventResType node;
- ASSERT(m_pOperator != NULL);
- // 内线分机
- node.nResType = DEV_RES_TYPE_EXT;
- m_pOperator->onDeviceEvent(DEV_EVENT_RES_TYPE, &node);
- // TRUNK
- node.nResType = DEV_RES_TYPE_TRUNK;
- m_pOperator->onDeviceEvent(DEV_EVENT_RES_TYPE, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventResDetail
- **【函数功能】 通知可控的资源明细信息
- **【参数】 Type 资源类型
- ResID 资源ID
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventResDetail( UINT Type, UINT ResID )
- {
- EventResDetail node;
- memset(&node, 0, sizeof(EventResDetail));
- node.nResType = Type;
- node.nResID = ResID;
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_RES_DETAIL, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventResState
- **【函数功能】 通知资源状态信息
- **【参数】 Type 资源类型
- ResID 资源ID
- State 资源状态
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventResState( UINT Type, UINT ResID, UINT State, LPCTSTR CallerNum /*= NULL*/, LPCTSTR CalleeNum /*= NULL*/ )
- {
- EventResStatus node;
- memset(&node, 0, sizeof(EventResStatus));
- node.nResType = Type;
- node.nResID = ResID;
- node.nState = State;
- if(CallerNum != NULL)
- lstrcpy(node.szCallerNum, CallerNum);
- if(CalleeNum != NULL)
- lstrcpy(node.szCalleeNum, CalleeNum);
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_RES_STATUS, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventLog
- **【函数功能】 通知显示日志
- **【参数】 Level 日志级别
- lpszFormat 日志内容
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventLog( UINT Level, CHAR* lpszFormat, ... )
- {
- EventLog node;
- memset(&node, 0, sizeof(EventLog));
- node.nLevel = Level;
- // 得到消息内容
- va_list ap;
- va_start(ap, lpszFormat);
- vsprintf_s(node.szContent, lpszFormat, ap);
- // 通知日志显示
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_LOG, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventDevUp
- **【函数功能】 设备初始化结束
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventDevUp( void )
- {
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_INIT_END, NULL);
- }
- /*****************************************************************
- **【函数名称】 onEventDevDown
- **【函数功能】 设备不可用
- **【参数】
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventDevDown( void )
- {
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_DEV_CLOSED, NULL);
- }
- /*****************************************************************
- **【函数名称】 onEventOpResult
- **【函数功能】 设备操作执行结果
- **【参数】 Instance 调用标识
- IsSucceed 是否成功
- strData 执行结果返回的随路数据
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventOpResult( long Instance, bool IsSucceed, LPCTSTR lpData )
- {
- // 生成执行结果内容
- EventOpResult node;
- memset(&node, 0, sizeof(EventOpResult));
- node.nInstance = Instance;
- node.bIsSucceed = IsSucceed;
- if(lpData != NULL)
- lstrcpy(node.szData, lpData);
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_LINE_OP_RESULT, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventReqProcess
- **【函数功能】 操作进展返回
- **【参数】 Instance 调用标识
- HostLine 主控线路ID
- AssoLine 关联线路ID
- AssoLineType 关联线路类型
- CallerNum 主叫号码
- CalleeNum 被叫号码
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventOpProcess( long Instance, UINT HostLine, UINT AssoLine, DEV_RES_TYPE AssoLineType, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
- {
- // 生成执行进展内容
- EventOpProcess node;
- memset(&node, 0, sizeof(EventOpProcess));
- node.nInstance = Instance;
- node.nHostLine = HostLine;
- node.nAssoLine = AssoLine;
- node.nAssoLineType = AssoLineType;
- if(lpCallerNum != NULL)
- lstrcpy(node.szCallerNum, lpCallerNum);
- if(lpCalleeNum != NULL)
- lstrcpy(node.szCalleeNum, lpCalleeNum);
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_LINE_OP_PROCESS, &node);
- }
- /*****************************************************************
- **【函数名称】 onEventDevOperation
- **【函数功能】 设备主动操作事件
- **【参数】 LineID 线路ID
- OpType 操作类型
- lpCallerNum 主叫号码
- lpCalleeNum 被叫号码
- **【返回值】
- ****************************************************************/
- void CDevControl::onEventDevOperation( UINT LineID, DEV_OP OpType, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
- {
- // 生成执行事件内容
- EventDevOperation node;
- memset(&node, 0, sizeof(EventDevOperation));
- node.nLineId = LineID;
- node.nOpType = OpType;
- if(lpCallerNum != NULL)
- lstrcpy(node.szCallerNum, lpCallerNum);
- if(lpCalleeNum != NULL)
- lstrcpy(node.szCalleeNum, lpCalleeNum);
- ASSERT(m_pOperator != NULL);
- m_pOperator->onDeviceEvent(DEV_EVENT_DEV_OPERATOR, &node);
- }
|