#include "StdAfx.h" #include "CellCancelQueue.h" #include "NetworkIvr.h" #include "IvrFlow.h" #include "FlowDataProvider.h" IMPLEMENT_CELL_AUTOCREATE(CCellCancelQueue, CELL_NAME_CANCEL_QUEUE) CCellCancelQueue::CCellCancelQueue(void) : m_NextPos(0), m_Reason("") { } CCellCancelQueue::CCellCancelQueue( CCellCancelQueue & cellCancelQueue ) : CCellBase(cellCancelQueue), m_NextPos(cellCancelQueue.m_NextPos), m_Reason(cellCancelQueue.m_Reason) { } CCellCancelQueue::~CCellCancelQueue(void) { } /***************************************************************** **【函数名称】 Operate **【函数功能】 节点执行函数 **【参数】 **【返回值】 下一个节点编号 ****************************************************************/ int CCellCancelQueue::operate( void ) { if(m_pIvrFlow == NULL) return CELL_OP_ERROR; CString Info; _getCellInfo(Info); ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info); CPduEntity CmdCancelQueue(PDU_CMD_IVR_QUEUE_CANCEL); CmdCancelQueue.SetDataInt(1,m_pIvrFlow->id()); if( !CNetworkIvr::GetInstance().send(CmdCancelQueue)) { ILogger::getInstance().log(LOG_CLASS_SOCKET, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 向CTI发送消息失败"), Info); return CELL_OP_SEND_ERROR; } ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, 放弃排队原因: %s"), Info, m_Reason); return m_NextPos; } /***************************************************************** **【函数名称】 copy **【函数功能】 拷贝自身 **【参数】 **【返回值】 拷贝副本 ****************************************************************/ CCellBase * CCellCancelQueue::copy( void ) { CCellBase *pCellBase = new CCellCancelQueue(*this); return pCellBase; } /***************************************************************** **【函数名称】 fillData **【函数功能】 节点解析,填充数据 **【参数】 Provider:数据提供器 **【返回值】 成功true,失败false ****************************************************************/ bool CCellCancelQueue::fillData( IFlowDataProvider& Provider ) { CString Data; do { if(!Provider.getData(CELL_ATTRIBUTE_POS, Data)) { Data = _T("节点号"); break; } else { sscanf_s(Data, _T("%d"), &m_Pos); if(m_Pos < 1) { Data = _T("节点号"); break; } } Provider.getData(CELL_ATTRIBUTE_REASON, m_Reason); if(!Provider.getData(CELL_ATTRIBUTE_NEXT, Data)) { Data = _T("下一节点号"); break; } else { sscanf_s(Data, _T("%d"), &m_NextPos); if(m_NextPos < 1) { Data = _T("下一节点号"); break; } } Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note); return true; } while (false); ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_CANCEL_QUEUE, Data); return false; }