| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- #include "StdAfx.h"
- #include "TapiOpMakeCall.h"
- #include "DevControl.h"
- #include "LineOpExec.h"
- #include "TapiLine.h"
- CTapiOpMakeCall::CTapiOpMakeCall(LONG Instance) : CTapiOpBase(Instance), m_WaitingCall(NULL)
- {
- ZeroMemory(&m_TmpInfoS, sizeof(DevLinkInfoS));
- }
- CTapiOpMakeCall::~CTapiOpMakeCall(void)
- {
- }
- /*****************************************************************
- **【函数名称】 start
- **【函数功能】 操作启动(命令方式)
- **【参数】 pParam 操作启动参数
- **【返回值】
- ****************************************************************/
- bool CTapiOpMakeCall::start( LineOpParam* pParam )
- {
- // 校验状态
- if((m_pHostLine->status() & INNER_STATE_FREE) == 0x00 &&
- (m_pHostLine->status() & INNER_STATE_INIT) == 0x00)
- {
- return false;
- } // end if
- // 保存被叫号码
- m_CalleeNum.Format(_T("%s"), pParam->szParam2);
- // 通知启动日志
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]执行外呼, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
- // 调用线路外呼操作
- return m_pHostLine->lineMakeCall(m_CalleeNum, m_WaitingCall);
- }
- /*****************************************************************
- **【函数名称】 start
- **【函数功能】 操作启动(手动方式)
- **【参数】 pInfo 操作启动参数
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::start( DevLinkInfoS* pInfo )
- {
- // 通知设备外呼启动事件
- UINT ExtId = 0;
- sscanf_s(m_pHostLine->extenID(), _T("%lu"), &ExtId);
- CDevControl::GetInstance().onEventDevOperation(ExtId, DEV_OP_CALL_OUT, pInfo->szCallerNum, pInfo->szCalleeNum);
- }
- /*****************************************************************
- **【函数名称】 cancel
- **【函数功能】 操作取消(命令方式)
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CTapiOpMakeCall::cancel( LONG InstanceCancel )
- {
- // 保存取消操作调用标识
- m_InstanceCancel = InstanceCancel;
- // 通知启动日志
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]外呼取消,CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
- // 调用线路挂机操作
- HCALL hDropCall = m_pHostLine->activeCall();
- return m_pHostLine->lineDropCall(hDropCall);
- }
- /*****************************************************************
- **【函数名称】 end
- **【函数功能】 操作完成
- **【参数】 IsSucceed 操作是否成功
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::end( bool IsSucceed )
- {
- // 系统日志
- if(IsSucceed)
- {
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]外呼成功, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
- }
- else
- {
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_WARNING, _T("{OP_Call}: Exten[%s]外呼失败, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
- } // end if
- // 返回执行结果
- if(m_InstanceCancel != CONST_TAPI_OP_INSTANCE_INVALID)
- {
- CDevControl::GetInstance().onEventOpResult(m_InstanceCancel, !IsSucceed);
- } // end if
- CLineOpExec::GetInstance().onTapiOpResult(m_Instance, this, IsSucceed);
- }
- /*****************************************************************
- **【函数名称】 setAssoInfo
- **【函数功能】 设置关联信息
- **【参数】 Info 信息内容
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::setAssoInfo( LONG Info )
- {
- // 保存调用标识
- m_Instance = Info;
- if(m_TmpInfoS.nDevLinkCallId != 0)
- {
- // 通知设备进展
- _notifyOpProcess(&m_TmpInfoS);
- }
- }
- /*****************************************************************
- **【函数名称】 OnReply
- **【函数功能】 线路操作异步响应事件
- **【参数】 pEventLine 触发事件的线路
- nRequestID
- hResult
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::onReply( CTapiLine* pEventLine, LONG RequestID, HRESULT Result )
- {
- if(Result != S_OK)
- end(false);
- }
- /*****************************************************************
- **【函数名称】 onCallState
- **【函数功能】 呼叫状态事件
- **【参数】 pEventLine 触发事件的线路
- CallId 触发事件的呼叫句柄
- CallState 呼叫基本状态
- CallStateDetail 呼叫明细状态
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::onCallState( CTapiLine* pEventLine, HCALL CallId, DWORD CallState, DWORD CallStateDetail )
- {
- if(CallId != m_WaitingCall) return;
- if(CallState & LINECALLSTATE_DISCONNECTED) // 呼叫失败
- {
- end(false);
- }
- else if(CallState & LINECALLSTATE_BUSY) // 被叫忙
- {
- // 主叫线路释放
- m_pHostLine->lineDropCall(m_WaitingCall);
- end(false);
- }
- }
- /*****************************************************************
- **【函数名称】 onDevLinkEventS
- **【函数功能】 DevLink中S事件响应
- **【参数】 pEventLine 触发事件的线路
- pInfoS DevLink S事件内容
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::onDevLinkEventS( CTapiLine* pEventLine, DevLinkInfoS* pInfoS )
- {
- // 呼出振铃
- switch(pInfoS->nResStatus)
- {
- case INNER_STATE_RING_BACK: // 呼出振铃
- {
- // 保存呼叫信息
- m_CalleeNum = pInfoS->szCalleeNum;
- // 获取呼叫句柄
- m_WaitingCall = m_pHostLine->activeCall();
- // 通知启动日志
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Call}: Exten[%s]执行话机直呼, CalleeNum = %s"), m_pHostLine->extenID(), m_CalleeNum);
- if(m_Instance != CONST_TAPI_OP_INSTANCE_INVALID)
- {
- // 通知设备进展
- _notifyOpProcess(pInfoS);
- }
- else
- {
- memcpy(&m_TmpInfoS, pInfoS, sizeof(DevLinkInfoS));
- }
- }
- break;
- case INNER_STATE_TALKING: // 通话中
- {
- end(true);
- return;
- }
- break;
- } // end switch
- }
- /*****************************************************************
- **【函数名称】 onDevLinkEventD
- **【函数功能】 DevLink中D事件响应
- **【参数】 pEventLine 触发事件的线路
- DevLinkCallId DevLink事件CallId
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::onDevLinkEventD( CTapiLine* pEventLine, int DevLinkCallId )
- {
- if(pEventLine == m_pHostLine)
- end(false);
- }
- /*****************************************************************
- **【函数名称】 onDevLineEventA
- **【函数功能】 DevLink中A事件响应
- **【参数】 pEventLine 触发事件的线路
- DevLinkCallId DevLink事件CallId
- **【返回值】
- ****************************************************************/
- void CTapiOpMakeCall::onDevLinkEventA( CTapiLine* pEventLine, int DevLinkCallId )
- {
- }
|