| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723 |
- #include "StdAfx.h"
- #include "AgentMsgProc.h"
- #include "NetCtrlInterface.h"
- #include "PduEntity.h"
- #include "AgentClient.h"
- #include "AgentEventManager.h"
- #include "AgentLog.h"
- #include "TFBCtrl.h"
- #include "AgentOp.h"
- #include "PduDataFormat.h"
- #include "TFBTimer.h"
- CAgentMsgProc::CAgentMsgProc(CAgentClient* pClient)
- {
- m_pAgentClient = pClient;
- // 注册PDU命令到达事件处理
- CInterfaceWindow::getCommInstance()->RegistPduCommProc(this, TRUE);
- }
- CAgentMsgProc::~CAgentMsgProc(void)
- {
- // PDU命令到达事件反注册
- CInterfaceWindow::getCommInstance()->RegistPduCommProc(this, FALSE);
- }
- /*****************************************************************
- **【函数名称】 OnRecvCommand
- **【函数功能】 PDU命令到达事件处理
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::OnRecvCommand(CPduEntity* a_pPduEntity)
- {
- if(a_pPduEntity->GetIsExecReturn())
- {
- __ProcCmdReturn(a_pPduEntity); // 处理ACD的返回命令
- }
- else
- {
- __ProcCmdAcd(a_pPduEntity); // 处理ACD主动发来的命令
- }
- }
- /*****************************************************************
- **【函数名称】 __ProcCmdReturn
- **【函数功能】 PDU返回命令处理
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__ProcCmdReturn(CPduEntity* a_pPduEntity)
- {
- switch(a_pPduEntity->GetCmdType())
- {
- case PDU_CMD_AGENT_LOGIN: // 签入
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- // 签入成功
- m_pAgentClient->GetEventManager()->Fire_Evt_LogIn( true, 0 );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_LOGIN 成功" );
- }
- else
- {
- int nErrCode = (int)a_pPduEntity->GetDataUInt(6);
- m_pAgentClient->SetErrorCode(nErrCode);
- m_pAgentClient->GetEventManager()->Fire_Evt_LogIn( false, nErrCode);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_LOGIN 失败" );
- // 关闭Socket连接
- if(!m_pAgentClient->CloseClient())
- {
- m_pAgentClient->SetErrorCode( ERR_CLOSE_SOCKET );
- m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_CLOSE_SOCKET );
- return;
- }
-
- // 设置连接状态
- m_pAgentClient->m_nAgentLinkState = PDU_LINK_STATE_DISCONNECTED;
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentLinkStateChanged(PDU_LINK_STATE_DISCONNECTED);
- }
- }
- break;
- case PDU_CMD_AGENT_SETSTATE: // 设置坐席状态
- {
- if(a_pPduEntity->GetDataUInt(3) == AGENT_STATE_FREE)
- {
- // 示闲成功
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_SayFree( true, 0 );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_SETSTATE->AGENT_STATE_FREE 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_SAY_FREE );
- m_pAgentClient->GetEventManager()->Fire_Evt_SayFree( false, ERR_SAY_FREE );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_SETSTATE->AGENT_STATE_FREE 失败" );
- }
- }
- else if(a_pPduEntity->GetDataUInt(3) == AGENT_STATE_REPOSE)
- {
- // 示忙成功
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_SayBusy( true, 0 );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_SETSTATE->AGENT_STATE_FREE 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_SAY_BUSY );
- m_pAgentClient->GetEventManager()->Fire_Evt_SayBusy( false, ERR_SAY_BUSY );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_SETSTATE->Fire_Evt_SayBusy 失败" );
- }
- }
- }
- break;
- case PDU_CMD_AGENT_RESET: // 重置
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_ResetAgent( true, 0 );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_RESET 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_RESET_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_ResetAgent( false, ERR_RESET_AGENT );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_RESET 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_MAKECALL: // 外呼
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_MakeCall( true,
- a_pPduEntity->GetDataUInt(6),
- m_pAgentClient->m_sOuterNumber,
- m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MAKECALL 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_MAKE_CALL );
- m_pAgentClient->GetEventManager()->Fire_Evt_MakeCall( false,
- a_pPduEntity->GetDataUInt(6),
- m_pAgentClient->m_sOuterNumber,
- m_pAgentClient->m_nCallID,
- ERR_MAKE_CALL);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MAKECALL 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_ANSWER: // 应答
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_AnswerCall( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_ANSWER 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_ANSWER_CALL );
- m_pAgentClient->GetEventManager()->Fire_Evt_AnswerCall( false, m_pAgentClient->m_nCallID, ERR_ANSWER_CALL);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_ANSWER 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_HANGUP: // 挂机
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_DropCall( true, 1, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_HANGUP 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_DROP_CALL );
- m_pAgentClient->GetEventManager()->Fire_Evt_DropCall( false, 1, m_pAgentClient->m_nCallID, ERR_DROP_CALL);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_HANGUP 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_CANCEL: // 取消操作
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Cancel( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_CANCEL 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_CANCEL );
- m_pAgentClient->GetEventManager()->Fire_Evt_Cancel( false, m_pAgentClient->m_nCallID, ERR_DROP_CALL);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_CANCEL 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_HOLD: // 保持
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Hold( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_HOLD 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_HOLD );
- m_pAgentClient->GetEventManager()->Fire_Evt_Hold( false, m_pAgentClient->m_nCallID, ERR_HOLD);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_HOLD 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_TAKEBACK: // 接回
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_UnHold( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_TAKEBACK 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_UN_HOLD );
- m_pAgentClient->GetEventManager()->Fire_Evt_UnHold( false, m_pAgentClient->m_nCallID, ERR_UN_HOLD);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_TAKEBACK 失败" );
- }
- }
- break;
-
- case PDU_CMD_AGENT_TRANSTALK: // 转移
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Transfer( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_TRANSTALK 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_TRANSFER );
- m_pAgentClient->GetEventManager()->Fire_Evt_Transfer( false, m_pAgentClient->m_nCallID, ERR_TRANSFER);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_TRANSTALK 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_THREETALK: // 三方
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_ThreeTalk( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_THREETALK 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_THREE_TALK );
- m_pAgentClient->GetEventManager()->Fire_Evt_ThreeTalk( false, m_pAgentClient->m_nCallID, ERR_THREE_TALK);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_THREETALK 失败" );
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_REPLACE: // 代接返回
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Instead( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_INSTEAD );
- m_pAgentClient->GetEventManager()->Fire_Evt_Instead( false, m_pAgentClient->m_nCallID, ERR_INSTEAD);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_LISTEN: // 监听座席
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_ListenAgent( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_LISTEN_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_ListenAgent( false, m_pAgentClient->m_nCallID, ERR_LISTEN_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_INSERT: // 强插座席
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_InsertAgent( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_INSERT_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_InsertAgent( false, m_pAgentClient->m_nCallID, ERR_INSERT_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_INTERCEPT: // 强截座席
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_InterceptAgent( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_INTERCEPT_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_InterceptAgent( false, m_pAgentClient->m_nCallID, ERR_INTERCEPT_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_CUT: // 强拆座席
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_CutAgent( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_CUT_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_CutAgent( false, m_pAgentClient->m_nCallID, ERR_CUT_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_FAX: // 传真
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- if(a_pPduEntity->GetDataUInt(4) == 0)
- m_pAgentClient->GetEventManager()->Fire_Evt_SendFax( true, m_pAgentClient->m_nCallID, 0);
- else
- m_pAgentClient->GetEventManager()->Fire_Evt_RecvFax( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- if(a_pPduEntity->GetDataUInt(4) == 0)
- {
- m_pAgentClient->SetErrorCode( ERR_SEND_FAX );
- m_pAgentClient->GetEventManager()->Fire_Evt_SendFax( false, m_pAgentClient->m_nCallID, ERR_SEND_FAX);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_RECV_FAX );
- m_pAgentClient->GetEventManager()->Fire_Evt_RecvFax( false, m_pAgentClient->m_nCallID, ERR_RECV_FAX);
- }
-
- }
- }
- break;
- case PDU_CMD_AGENT_TURN_TO_IVR: // 转IVR
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_TransferToIvr( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_TRANSFER_TO_IVR );
- m_pAgentClient->GetEventManager()->Fire_Evt_TransferToIvr( false, m_pAgentClient->m_nCallID, ERR_TRANSFER_TO_IVR);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_FORCE_LOGOUT: // 强制签出
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_ForceLogOut( true, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_FORCE_LOGOUT_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_ForceLogOut( false, ERR_FORCE_CONTROL_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_MONI_FORCE_STATE: // 被强制签出事件
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_ForceControlAgent( true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_FORCE_CONTROL_AGENT );
- m_pAgentClient->GetEventManager()->Fire_Evt_ForceControlAgent( false, m_pAgentClient->m_nCallID, ERR_FORCE_CONTROL_AGENT);
- }
- }
- break;
- case PDU_CMD_AGENT_CONSULTATION_CALL: // 协商呼叫结果
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Consult(true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode(ERR_CONSULTATION_CALL);
- m_pAgentClient->GetEventManager()->Fire_Evt_Consult(false, m_pAgentClient->m_nCallID, ERR_CONSULTATION_CALL);
- }
- }
- break;
- case PDU_CMD_AGENT_CONFIRM_TRANSFER: // 确认转移结果
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Confirm(true, m_pAgentClient->m_nCallID, 0);
- }
- else
- {
- m_pAgentClient->SetErrorCode(ERR_CONFIRM_TRANSFER);
- m_pAgentClient->GetEventManager()->Fire_Evt_Confirm(false, m_pAgentClient->m_nCallID, ERR_CONFIRM_TRANSFER);
- }
- }
- break;
- case PDU_CMD_AGENT_MUTE: // 静音
- {
- if(a_pPduEntity->GetDataUInt(3) == 0) // 开始静音
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_BeginMute( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MUTE 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_HOLD );
- m_pAgentClient->GetEventManager()->Fire_Evt_BeginMute( false, m_pAgentClient->m_nCallID, ERR_BEGIN_MUTE);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MUTE 失败" );
- }
- }
- else
- {
- if(a_pPduEntity->GetDataBool(0))
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_EndMute( true, m_pAgentClient->m_nCallID, 0);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MUTE 成功" );
- }
- else
- {
- m_pAgentClient->SetErrorCode( ERR_HOLD );
- m_pAgentClient->GetEventManager()->Fire_Evt_EndMute( false, m_pAgentClient->m_nCallID, ERR_END_MUTE);
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:PDU_CMD_AGENT_MUTE 失败" );
- }
- }
-
- }
- break;
- default:
- break;
- }
- }
- /*****************************************************************
- **【函数名称】 __ProcCmdAcd
- **【函数功能】 ACD主动发送命令处理
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__ProcCmdAcd(CPduEntity* a_pPduEntity)
- {
- ASSERT(a_pPduEntity != NULL);
- switch(a_pPduEntity->GetCmdType())
- {
- case PDU_CMD_ACD_AGENT_STATE: // 坐席状态
- {
- __ProcAgentStateChanged(a_pPduEntity);
- }
- break;
- case PDU_CMD_CTI_LINE_STATE: // 线路状态
- {
- __ProcLineStateChanged(a_pPduEntity);
- }
- break;
- case PDU_CMD_CTI_DEV_CALL: // 分机物理外呼
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_MakeCall(a_pPduEntity->GetDataBool(0),
- a_pPduEntity->GetDataUInt(5),
- a_pPduEntity->GetDataString(4),
- a_pPduEntity->GetDataULong(3),
- 0);
- }
- break;
- case PDU_CMD_ACD_CALL_NUM: // 来电数量
- {
- // 触发来电数量事件
- m_pAgentClient->GetEventManager()->Fire_Evt_CallInQueue_Changed(a_pPduEntity->GetDataUInt(0));
- }
- break;
- case PDU_CMD_CTI_RECORD: // 录音信息
- {
- // 设置坐席的录音文件路径
- m_pAgentClient->m_sRecordFilePath = a_pPduEntity->GetDataString(2);
- // 触发开始录音事件
- m_pAgentClient->GetEventManager()->Fire_Evt_RecordInform(a_pPduEntity->GetDataString(2),
- m_pAgentClient->m_nCallID);
- }
- break;
- case PDU_CMD_ACD_SUBMIT_DATA: // 订阅事件变化通知
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_SubDataChanged(a_pPduEntity->GetDataUInt(2),
- a_pPduEntity->GetDataUInt(0),
- a_pPduEntity->GetDataUInt(1),
- a_pPduEntity->GetDataString(3));
- }
- break;
- case PDU_CMD_AGENT_MONI_FORCE_LOGOUT: // 被强制签出
- {
- __ProcForceLogOut();
- m_pAgentClient->GetEventManager()->Fire_Evt_LogOutByForce(a_pPduEntity->GetDataUInt(2),
- a_pPduEntity->GetDataString(5));
- }
- break;
- default:
- break;
- }
- }
- /*****************************************************************
- **【函数名称】 __ProcForceLogOut
- **【函数功能】 处理坐席被强制签出
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__ProcForceLogOut()
- {
- // 关闭Socket连接
- if(!m_pAgentClient->CloseClient())
- {
- m_pAgentClient->SetErrorCode( ERR_CLOSE_SOCKET );
- m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_CLOSE_SOCKET );
- m_pAgentClient->GetEventManager()->Fire_Evt_LogOut(false, ERR_CLOSE_SOCKET);
- return;
- }
- // 签出成功
- m_pAgentClient->GetEventManager()->Fire_Evt_LogOut( true, 0 );
- m_pAgentClient->GetAgentLog()->Log( "ACD返回执行结果:Cmd_Agent_Acd_LogOut 成功" );
- // 坐席信息反初始化
- m_pAgentClient->m_nAgentState = AGENT_STATE_LOGOUT;
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentStateChanged( m_pAgentClient->m_nAgentState );
- m_pAgentClient->m_nAgentLineState = INNER_STATE_DISABLED;
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentLineStateChanged( m_pAgentClient->m_nAgentLineState );
-
- // 触发连接断开事件
- m_pAgentClient->m_nAgentLinkState = PDU_LINK_STATE_DISCONNECTED;
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentLinkStateChanged(PDU_LINK_STATE_DISCONNECTED);
- }
-
- /*****************************************************************
- **【函数名称】 __ProcAgentStateChanged
- **【函数功能】 处理坐席状态变化
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__ProcAgentStateChanged(CPduEntity* a_pPduEntity)
- {
- // 判断是否是当前坐席
- if( a_pPduEntity->GetDataUInt(1) == m_pAgentClient->m_nAgentNumber )
- {
- // 分析坐席状态
- __AnalyzeAgentState(a_pPduEntity);
- // 保存信息
- m_pAgentClient->m_nAgentState = a_pPduEntity->GetDataUInt(2);
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentStateChanged( m_pAgentClient->m_nAgentState );
- }
- }
- /*****************************************************************
- **【函数名称】 __ProcLineStateChanged
- **【函数功能】 处理线路状态变化
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__ProcLineStateChanged(CPduEntity* a_pPduEntity)
- {
- // 判断是否是当前坐席
- if(a_pPduEntity->GetDataUInt(0) == m_pAgentClient->m_nAgentExtension )
- {
- // 分析线路状态
- __AnalyzeLineState(a_pPduEntity);
-
- // 保存信息
- m_pAgentClient->m_nCallID = a_pPduEntity->GetDataULong(2); // 设置坐席CallID
- m_pAgentClient->m_nAgentLineState = a_pPduEntity->GetDataUInt(1); // 保存线路状态
-
-
- // 触发线路状态变化事件
- m_pAgentClient->GetEventManager()->Fire_Evt_AgentLineStateChanged(a_pPduEntity->GetDataUInt(1));
- }
- }
- /*****************************************************************
- **【函数名称】 __AnalyzeAgentState
- **【函数功能】 分析坐席状态
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__AnalyzeAgentState(CPduEntity* a_pPduEntity)
- {
- return;
- }
- /*****************************************************************
- **【函数名称】 __AnalyzeLineState
- **【函数功能】 分析线路状态
- **【参数】
- **【返回值】 void
- ****************************************************************/
- void CAgentMsgProc::__AnalyzeLineState(CPduEntity* a_pPduEntity)
- {
- switch(a_pPduEntity->GetDataUInt(1))
- {
- case INNER_STATE_FREE:
- {
- // CallId不为0时线路空闲判定为挂机
- if(m_pAgentClient->m_nCallID != 0)
- {
- // 触发线路的挂机事件
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_HangUp(1, a_pPduEntity->GetDataULong(2));
-
- // 清空外部号码
- m_pAgentClient->m_sOuterNumber.Empty();
- // 清空随路数据
- memset(m_pAgentClient->m_sAssoData, 0, MAX_DATA_BUF_LEN);
- }
- // 记录到日志
- m_pAgentClient->GetAgentLog()->Log( "Acd设置座席的线路状态为:INNER_STATE_FREE" );
- m_pAgentClient->GetAgentLog()->Log( "线路空闲" );
- }
- break;
- case INNER_STATE_TALKING:
- {
- // 通话中
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_Talk(a_pPduEntity->GetDataULong(2));
- // 监听、强插在通话时发送外部号码信息
- if(a_pPduEntity->GetDataUInt(10) == PDU_CMD_AGENT_MONI_LISTEN ||
- a_pPduEntity->GetDataUInt(10) == PDU_CMD_AGENT_MONI_INSERT)
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_Talk(a_pPduEntity->GetDataULong(2),a_pPduEntity->GetDataString(5));
- }
- else if (a_pPduEntity->GetDataUInt(10) == PDU_CMD_AGENT_MONI_REPLACE ||
- a_pPduEntity->GetDataUInt(10) == PDU_CMD_AGENT_MONI_INTERCEPT)
- {
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_Talk(a_pPduEntity->GetDataULong(2),a_pPduEntity->GetDataString(4));
- }
-
- }
- break;
- case INNER_STATE_ALERTING:
- {
- // 保存外部号码
- m_pAgentClient->m_sOuterNumber = a_pPduEntity->GetDataString(4);
- lstrcpy(m_pAgentClient->m_sAssoData, a_pPduEntity->GetDataString(6)); // 保存随路数据
- // 触发来电振铃事件
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_Offering(m_pAgentClient->m_sOuterNumber,
- a_pPduEntity->GetDataUInt(7),
- a_pPduEntity->GetDataULong(2),
- a_pPduEntity->GetDataUInt(8));
- // 看是否自动应答
- if(m_pAgentClient->m_bAutoAnswer)
- {
- m_pAgentClient->GetAgentTimer()->SetTimerAnswer(1);
- }
- }
- break;
- case INNER_STATE_RING_BACK:
- {
- // 保存外部号码
- m_pAgentClient->m_sOuterNumber = a_pPduEntity->GetDataString(5);
-
- // 触发呼出振铃事件
- m_pAgentClient->GetEventManager()->Fire_Evt_Line_RingBack(m_pAgentClient->m_sOuterNumber,
- a_pPduEntity->GetDataULong(2));
- }
- default:
- break;
- } // end switch
- }
|