| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #include "stdafx.h"
- #include "Task.h"
- #include "SessionHolder.h"
- #include "CallSession.h"
- #include "LineHolder.h"
- #include "LogicLine.h"
- #include "TaskMgr.h"
- CTask::CTask(EventDevOperation &DevOpInfo)
- {
- m_CurrDevOp = DevOpInfo;
- m_TaskCallId = 0;
- _bindLogicLine(DevOpInfo.nLineId);
- }
- CTask::CTask(CPduEntity &PduEntity)
- {
- m_pCurrLine = NULL;
- m_CurrCmd = PduEntity;
- memset(&m_CurrDevOp, 0, sizeof(m_CurrDevOp));
- }
- CTask::~CTask( void )
- {
- _freeLogicLine();
- }
- /*****************************************************************
- **【函数名称】 ProcLineOpProcess
- **【函数功能】 处理设备操作进展
- **【参数】 EvtType 消息事件类型;lpContent 消息内容
- **【返回值】 void
- ****************************************************************/
- void CTask::OnDevOpProcess(EventOpProcess &EvtInfo)
- {
- // 会话处理
- _PrcoCallNode(EvtInfo.nHostLine, EvtInfo.nAssoLine);
- }
- /*****************************************************************
- **【函数名称】 OnDevOpResult
- **【函数功能】 设备操作结果返回
- **【参数】
- **【返回值】 void
- ****************************************************************/
- BOOL CTask::OnDevOpResult(EventOpResult &EvtInfo)
- {
- // 命令返回
- _ProcCmdReturn(EvtInfo.bIsSucceed);
- return TRUE;
- }
- /*****************************************************************
- **【函数名称】 OnCmdOperation
- **【函数功能】 对Task的附加命令(取消操作、排队等待成功),排队等待要重写给函数
- **【参数】 成功还是失败
- **【返回值】 void
- ****************************************************************/
- BOOL CTask::OnCmdOperation(CPduEntity &PduEntity)
- {
- PduEntity.SetToExecReturn();
- PduEntity.SetDataBool(0, false);
- CInterfaceWindow::getIocpCommInstance()->Send(&PduEntity, PduEntity.GetLocalDevType(), PduEntity.GetLocalDevId());
- return FALSE;
- }
- /*****************************************************************
- **【函数名称】 GetAssoLineId
- **【函数功能】 获取Task关联线路Id
- **【参数】
- **【返回值】 void
- ****************************************************************/
- int CTask::GetAssoLineId()
- {
- if(m_pCurrLine == NULL) return -1;
- return m_pCurrLine->lineId();
- }
- /*****************************************************************
- **【函数名称】 _bindLogicLine
- **【函数功能】 绑定逻辑线路
- **【参数】
- **【返回值】 void
- ****************************************************************/
- bool CTask::_bindLogicLine( UINT LineId )
- {
- if(LineId == LINE_ID_INVALID)
- return false;
- m_pCurrLine = CLineHolder::GetInstance().getLogicLine(LineId);
- ASSERT(m_pCurrLine != NULL);
- if(m_pCurrLine == NULL)
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 绑定线路[%d]时获取线路失败"), LineId);
- return false;
- }
- LONG TaskId = m_pCurrLine->taskIdBinded();
- if(TaskId == TASK_ID_INVALID)
- {
- m_pCurrLine->taskIdBinded() = reinterpret_cast<LONG>(this);
- return true;
- }
- else
- {
- CTask* pTask = CTaskMgr::GetInstance().findTask(TaskId);
- ASSERT(pTask != NULL);
- if(pTask != NULL)
- {
- m_pCurrLine = NULL;
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Task}: 绑定线路[%d]失败, 线路正在执行[%s]任务"), LineId, pTask->Name());
- return false;
- }
- else
- {
- m_pCurrLine->taskIdBinded() = reinterpret_cast<LONG>(this);
- return true;
- }
- }
- }
- /*****************************************************************
- **【函数名称】 _freeLogicLine
- **【函数功能】 释放逻辑线路
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CTask::_freeLogicLine( void )
- {
- if(m_pCurrLine != NULL)
- {
- m_pCurrLine->taskIdBinded() = TASK_ID_INVALID;
- m_pCurrLine = NULL;
- }
- }
- /*****************************************************************
- **【函数名称】 _PrcoCallNode
- **【函数功能】 处理添加会话
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CTask::_PrcoCallNode(UINT HostLine, UINT AssoLine,bool isTransfer/* =false */)
- {
- // 找到线路类
- CLogicLine* pHostLine = CLineHolder::GetInstance().getLogicLine(HostLine);
- CLogicLine* pAssoLine = CLineHolder::GetInstance().getLogicLine(AssoLine);
- if(pHostLine == NULL || pAssoLine == NULL) return;
- if (isTransfer)
- {
- pHostLine->SetActionID();
- pAssoLine->SetActionID(pHostLine->GetActionID());
- }
- // 将关联线路加入会话中
- CCallSession* pSession = CSessionHolder::GetInstance().findSession(pHostLine->callId());
- if(pSession == NULL)
- pSession = CSessionHolder::GetInstance().createSession(pHostLine);
- if(pAssoLine != NULL)
- pSession->addLine(pAssoLine);
- // 设置当前Task的CallId(为了业务统计等)
- m_TaskCallId = pSession->callId();
- }
- /*****************************************************************
- **【函数名称】 _ProcCmdReturn
- **【函数功能】 处理命令返回
- **【参数】
- **【返回值】
- ****************************************************************/
- void CTask::_ProcCmdReturn(BOOL Result, bool FreeRes/* = false*/ )
- {
- if(m_CurrCmd.GetIsExecReturn())
- return;
- // 显示日志
- ILogger::getInstance().log(LOG_CLASS_SOCKET, Result ? LOG_LEVEL_NORMAL : LOG_LEVEL_WARNING, _T("CTI->%s,TaskCMD = return[%d], Line = %d, IsSuccess = %d"),
- m_CurrCmd.GetLocalDevType() == PDU_DEV_TYPE_ACD ? _T("ACD") : _T("IVR"),
- m_CurrCmd.GetCmdType(),
- m_pCurrLine == NULL ? 0 : m_pCurrLine->lineId(),
- Result);
- if(m_pCurrLine != NULL)
- {
- m_pCurrLine->opResult() = Result; // 设置当前操作结果
- if(FreeRes)
- _freeLogicLine();
- }
- m_CurrCmd.SetToExecReturn();
- m_CurrCmd.SetDataBool(0, Result ? true : false);
- bool t_rnt = CInterfaceWindow::getIocpCommInstance()->Send(&m_CurrCmd, m_CurrCmd.GetLocalDevType(), m_CurrCmd.GetLocalDevId());
- ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_NORMAL, _T("CTI->,CMD Line = %d, IsSuccess = %d "), m_pCurrLine == NULL ? 0 : m_pCurrLine->lineId(), t_rnt);
- }
|