| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- #include "StdAfx.h"
- #include "TapiOpInstead.h"
- #include "LineOpExec.h"
- #include "TapiLine.h"
- #include "DevControl.h"
- CTapiOpInstead::CTapiOpInstead(LONG Instance) : CTapiOpBase(Instance), m_PendingCall(NULL), m_Step(0)
- {
- }
- CTapiOpInstead::~CTapiOpInstead(void)
- {
- }
- /*****************************************************************
- **【函数名称】 start
- **【函数功能】 操作启动(命令方式)
- **【参数】 pParam 操作启动参数
- **【返回值】
- ****************************************************************/
- bool CTapiOpInstead::start( LineOpParam* pParam )
- {
- // 校验状态
- if((m_pAssistLine->status() & INNER_STATE_ALERTING) == 0)
- return false;
- // 通知启动日志
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Instead}: Exten[%s]执行代接, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
- // 如果主控线路为摘机拨号状态
- m_PendingCall = m_pAssistLine->activeCall();
- HCALL hCall = m_pHostLine->activeCall();
- if(hCall != NULL)
- {
- m_Step = 1;
- m_pHostLine->lineDropCall(hCall);
- }
- else
- {
- m_Step = 2;
- return m_pAssistLine->lineRedirectCall(m_PendingCall, m_pHostLine->extenID());
- } // end if
- return true;
- }
- /*****************************************************************
- **【函数名称】 cancel
- **【函数功能】 操作取消(命令方式)
- **【参数】
- **【返回值】
- ****************************************************************/
- bool CTapiOpInstead::cancel( LONG InstanceCancel )
- {
- return false;
- }
- /*****************************************************************
- **【函数名称】 end
- **【函数功能】 操作完成
- **【参数】 IsSucceed 操作是否成功
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::end( bool IsSucceed )
- {
- if(IsSucceed)
- {
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_NORMAL, _T("{OP_Instead}: Exten[%s]代接成功, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
- }
- else
- {
- CDevControl::GetInstance().onEventLog(LOG_LEVEL_WARNING, _T("{OP_Instead}: Exten[%s]代接失败, DestNum = %s"), m_pHostLine->extenID(), m_pAssistLine->extenID());
- } // end if
- // 返回执行结果
- CLineOpExec::GetInstance().onTapiOpResult(m_Instance, this, IsSucceed);
- }
- /*****************************************************************
- **【函数名称】 onReply
- **【函数功能】 线路操作异步响应事件
- **【参数】 pEventLine 触发事件的线路
- RequestID
- Result
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::onReply( CTapiLine* pEventLine, LONG RequestID, HRESULT Result )
- {
- switch(m_Step)
- {
- case 1: // 正在挂断主控线路呼叫
- if(pEventLine == m_pHostLine && Result != S_OK)
- {
- end(false);
- } // end if
- break;
- case 2: // 正在执行呼叫重定向
- if(pEventLine == m_pAssistLine && Result != S_OK)
- {
- end(false);
- } // end if
- break;
- } // end switch
- }
- /*****************************************************************
- **【函数名称】 onCallState
- **【函数功能】 呼叫状态事件
- **【参数】 pEventLine 触发事件的线路
- CallId 触发事件的呼叫句柄
- CallState 呼叫基本状态
- CallStateDetail 呼叫明细状态
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::onCallState( CTapiLine* pEventLine, HCALL CallId, DWORD CallState, DWORD CallStateDetail )
- {
- // 关联线路状态修正
- if(pEventLine == m_pAssistLine && (CallState & LINECALLSTATE_DISCONNECTED))
- {
- m_pAssistLine->redoCallStatus(CallId, CallState, CallStateDetail);
- } // end if
- // 操作步骤处理
- switch(m_Step)
- {
- case 1: // 正在挂断主控线路上摘机呼叫
- {
- if((CallState & LINECALLSTATE_IDLE) && pEventLine == m_pHostLine)
- {
- m_Step = 2;
- if(!m_pAssistLine->lineRedirectCall(m_PendingCall, m_pHostLine->extenID()))
- end(false);
- } // end if
- }
- break;
- case 2: // 正在等待摘机
- {
- if((CallState & LINECALLSTATE_OFFERING) && pEventLine == m_pHostLine)
- {
- m_Step = 3;
- m_pHostLine->lineAnswerCall(CallId); // 默认执行一次应答呼叫操作
- } // end if
- }
- break;
- case 3:
- {
- if((CallState & LINECALLSTATE_CONNECTED) && pEventLine == m_pHostLine)
- {
- end(true);
- return;
- } // end if
- }
- break;
- } // end switch
- // 在任意步骤下如果原始呼叫释放
- if(pEventLine == m_pHostLine && CallId == m_PendingCall && (CallState & LINECALLSTATE_DISCONNECTED))
- {
- end(false);
- } // end if
- }
- /*****************************************************************
- **【函数名称】 onDevLinkEventS
- **【函数功能】 DevLink中S事件响应
- **【参数】 pEventLine 触发事件的线路
- pInfoS DevLink S事件内容
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::onDevLinkEventS( CTapiLine* pEventLine, DevLinkInfoS* pInfoS )
- {
- }
- /*****************************************************************
- **【函数名称】 onDevLineEventD
- **【函数功能】 DevLink中D事件响应
- **【参数】 pEventLine 触发事件的线路
- nDevLinkCallId DevLink事件CallId
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::onDevLinkEventD( CTapiLine* pEventLine, int DevLinkCallId )
- {
- }
- /*****************************************************************
- **【函数名称】 onDevLineEventA
- **【函数功能】 DevLink中A事件响应
- **【参数】 pEventLine 触发事件的线路
- nDevLinkCallId DevLink事件CallId
- **【返回值】
- ****************************************************************/
- void CTapiOpInstead::onDevLinkEventA( CTapiLine* pEventLine, int DevLinkCallId )
- {
- }
|