// OCXCtrl.cpp : COCXCtrl ActiveX 控件类的实现。 #include "stdafx.h" #include "TFB.h" #include "TFBCtrl.h" #include "TFBPropPage.h" #include "afxdialogex.h" #include "AgentMap.h" #include "AgentLog.h" #include "AgentClient.h" #include "AgentEventManager.h" #include "AgentOp.h" #include "AgentBusiness.h" #ifdef _DEBUG #define new DEBUG_NEW #endif LPCTSTR CTFBCtrl::m_Version = _T("V1.0.0"); IMPLEMENT_DYNCREATE(CTFBCtrl, COleControl) // 消息映射 BEGIN_MESSAGE_MAP(CTFBCtrl, COleControl) ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties) ON_WM_TIMER() END_MESSAGE_MAP() #pragma region 接口方法 // 调度映射 BEGIN_DISPATCH_MAP(CTFBCtrl, COleControl) DISP_FUNCTION_ID(CTFBCtrl, "Login", dispidLogin, Login, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetErrorMsg", dispidGetErrorMsg, GetErrorMsg, VT_BSTR, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Logout", dispidLogout, Logout, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetVersion", dispidGetVersion, GetVersion, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetPromptByAgentState", dispidGetPromptByAgentState, GetPromptByAgentState, VT_BSTR, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SayBusy", dispidSayBusy, SayBusy, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SayFree", dispidSayFree, SayFree, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "ResetAgent", dispidResetAgent, ResetAgent, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "MakeCall", dispidMakeCall, MakeCall, VT_EMPTY, VTS_BSTR VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "AnswerCall", dispidAnswerCall, AnswerCall, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "DropCall", dispidDropCall, DropCall, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "MuteOn", dispidMuteOn, MuteOn, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "MuteOff", dispidMuteOff, MuteOff, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "Hold", dispidHold, Hold, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "Retrieve", dispidRetrieve, Retrieve, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "Instead", dispidInstead, Instead, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Transfer", dispidTransfer, Transfer, VT_EMPTY, VTS_BSTR VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "CancelTransfer", dispidCancelTransfer, CancelTransfer, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "TransferToIvr", dispidTransferToIvr, TransferToIvr, VT_EMPTY, VTS_BSTR VTS_I4 VTS_BOOL VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "MethodReserved", dispidMethodReserved, MethodReserved, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "Listen", dispidListen, Listen, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Insert", dispidInsert, Insert, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Intercept", dispidIntercept, Intercept, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Break", dispidBreak, Break, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "ForceAgentState", dispidForceAgentState, ForceAgentState, VT_EMPTY, VTS_I4 VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "Meeting", dispidMeeting, Meeting, VT_EMPTY, VTS_BSTR VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "CancelMeeting", dispidCancelMeeting, CancelMeeting, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "SendFax", dispidSendFax, SendFax, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "RecvFax", dispidRecvFax, RecvFax, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "GetAutoReconnect", dispidGetAutoReconnect, GetAutoReconnect, VT_BOOL, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAutoAnswer", dispidGetAutoAnswer, GetAutoAnswer, VT_BOOL, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAgentInfo", dispidGetAgentInfo, GetAgentInfo, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAgentState", dispidGetAgentState, GetAgentState, VT_I4, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAgentLineState", dispidGetAgentLineState, GetAgentLineState, VT_I4, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAgentLinkState", dispidGetAgentLinkState, GetAgentLinkState, VT_I4, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetCallID", dispidGetCallID, GetCallID, VT_I4, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetOuterNumber", dispidGetOuterNumber, GetOuterNumber, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetCallInQueue", dispidGetCallInQueue, GetCallInQueue, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetAllCallInQueue", dispidGetAllCallInQueue, GetAllCallInQueue, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetRecordFilePath", dispidGetRecordFilePath, GetRecordFilePath, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetLeaveWordFilePath", dispidGetLeaveWordFilePath, GetLeaveWordFilePath, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetFaxFilePath", dispidGetFaxFilePath, GetFaxFilePath, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "GetLogFileDirectory", dispidGetLogFileDirectory, GetLogFileDirectory, VT_BSTR, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "SubscribeData", dispidSubscribeData, SubscribeData, VT_BOOL, VTS_I4 VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "CancelSubscribeData", dispidCancelSubscribeData, CancelSubscribeData, VT_BOOL, VTS_I4 VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SetAssociateData", dispidSetAssociateData, SetAssociateData, VT_EMPTY, VTS_BSTR VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "GetAssociateData", dispidGetAssociateData, GetAssociateData, VT_BSTR, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "GetPromptByBusyCode", dispidGetPromptByBusyCode, GetPromptByBusyCode, VT_BSTR, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "sysSetAutoReconnect", dispidsysSetAutoReconnect, sysSetAutoReconnect, VT_EMPTY, VTS_BOOL) DISP_FUNCTION_ID(CTFBCtrl, "sysSetAutoAnswer", dispidsysSetAutoAnswer, sysSetAutoAnswer, VT_EMPTY, VTS_BOOL) DISP_FUNCTION_ID(CTFBCtrl, "sysSetLogFileDirectory", dispidsysSetLogFileDirectory, sysSetLogFileDirectory, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "sysLog", dispidsysLog, sysLog, VT_EMPTY, VTS_BOOL) DISP_FUNCTION_ID(CTFBCtrl, "GetPromptByAgentLineState", dispidGetPromptByAgentLineState, GetPromptByAgentLineState, VT_BSTR, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "GetPromptByAgentLinkState", dispidGetPromptByAgentLinkState, GetPromptByAgentLinkState, VT_BSTR, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "sysShowLogInfo", dispidsysShowLogInfo, sysShowLogInfo, VT_EMPTY, VTS_BOOL) DISP_FUNCTION_ID(CTFBCtrl, "ForceForceAgentOut", dispidForceAgentOut, ForceAgentOut, VT_EMPTY, VTS_I4 VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "Cancel", dispidCancel, Cancel, VT_EMPTY, VTS_NONE) DISP_FUNCTION_ID(CTFBCtrl, "Consult", dispidConsult, Consult, VT_EMPTY, VTS_BSTR VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "Confirm", dispidConfirm, Confirm, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SetAgentID", dispidSetAgentID, SetAgentID, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SetAgentGroup", dispidSetAgentGroup, SetAgentGroup, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "SetAgentType", dispidSetAgentType, SetAgentType, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SetAgentExten", dispidSetAgentExten, SetAgentExten, VT_EMPTY, VTS_I4) DISP_FUNCTION_ID(CTFBCtrl, "SetAcdAddr", dispidSetAcdAddr, SetAcdAddr, VT_EMPTY, VTS_BSTR) DISP_FUNCTION_ID(CTFBCtrl, "SetAcdPort", dispidSetAcdPort, SetAcdPort, VT_EMPTY, VTS_I4) END_DISPATCH_MAP() #pragma endregion #pragma region 事件映射 // 事件映射 BEGIN_EVENT_MAP(CTFBCtrl, COleControl) EVENT_CUSTOM_ID("Evt_Login", eventidEvt_Login, Fire_Evt_Login, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_Logout", eventidEvt_Logout, Fire_Evt_Logout, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_Requested", eventidEvt_Requested, Fire_Evt_Requested, VTS_UI4) EVENT_CUSTOM_ID("Evt_AgentStateChanged", eventidEvt_AgentStateChanged, Fire_Evt_AgentStateChanged, VTS_I4) EVENT_CUSTOM_ID("Evt_AgentLineStateChanged", eventidEvt_AgentLineStateChanged, Fire_Evt_AgentLineStateChanged, VTS_I4) EVENT_CUSTOM_ID("Evt_AgentLinkStateChanged", eventidEvt_AgentLinkStateChanged, Fire_Evt_AgentLinkStateChanged, VTS_I4) EVENT_CUSTOM_ID("Evt_SubData", eventidEvt_SubData, Fire_Evt_SubData, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_CancelSubData", eventidEvt_CancelSubData, Fire_Evt_CancelSubData, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_SubDataChanged", eventidEvt_SubDataChanged, Fire_Evt_SubDataChanged, VTS_I4 VTS_I4 VTS_I4 VTS_BSTR) EVENT_CUSTOM_ID("Evt_SubFaxProgress", eventidEvt_SubFaxProgress, Fire_Evt_SubFaxProgress, VTS_UI4) EVENT_CUSTOM_ID("Evt_SayBusy", eventidEvt_SayBusy, Fire_Evt_SayBusy, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_SayFree", eventidEvt_SayFree, Fire_Evt_SayFree, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_ResetAgent", eventidEvt_ResetAgent, Fire_Evt_ResetAgent, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_MakeCall", eventidEvt_MakeCall, Fire_Evt_MakeCall, VTS_BOOL VTS_I4 VTS_BSTR VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Line_Offering", eventidEvt_Line_Offering, Fire_Evt_Line_Offering, VTS_BSTR VTS_I4 VTS_UI4 VTS_UI4) EVENT_CUSTOM_ID("Evt_Line_RingBack", eventidEvt_Line_RingBack, Fire_Evt_Line_RingBack, VTS_BSTR VTS_UI4) EVENT_CUSTOM_ID("Evt_Line_Talk", eventidEvt_Line_Talk, Fire_Evt_Line_Talk, VTS_UI4) EVENT_CUSTOM_ID("Evt_AnswerCall", eventidEvt_AnswerCall, Fire_Evt_AnswerCall, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_DropCall", eventidEvt_DropCall, Fire_Evt_DropCall, VTS_BOOL VTS_I4 VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_MuteOn", eventidEvt_MuteOn, Fire_Evt_MuteOn, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_MuteOff", eventidEvt_MuteOff, Fire_Evt_MuteOff, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Hold", eventidEvt_Hold, Fire_Evt_Hold, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Retrieve", eventidEvt_Retrieve, Fire_Evt_Retrieve, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Instead", eventidEvt_Instead, Fire_Evt_Instead, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_CallInQueue_Changed", eventidEvt_CallInQueue_Changed, Fire_Evt_CallInQueue_Changed, VTS_I4) EVENT_CUSTOM_ID("Evt_AllCallInQueue_Changed", eventidEvt_AllCallInQueue_Changed, Fire_Evt_AllCallInQueue_Changed, VTS_BSTR) EVENT_CUSTOM_ID("Evt_RecordInform", eventidEvt_RecordInform, Fire_Evt_RecordInform, VTS_BSTR VTS_UI4) EVENT_CUSTOM_ID("Evt_Transfer", eventidEvt_Transfer, Fire_Evt_Transfer, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_CancelTransfer", eventidEvt_CancelTransfer, Fire_Evt_CancelTransfer, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_TransferToIvr", eventidEvt_TransferToIvr, Fire_Evt_TransferToIvr, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Listen", eventidEvt_Listen, Fire_Evt_Listen, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Insert", eventidEvt_Insert, Fire_Evt_Insert, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Intercept", eventidEvt_Intercept, Fire_Evt_Intercept, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Break", eventidEvt_Break, Fire_Evt_Break, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_ForceAgentState", eventidEvt_ForceAgentState, Fire_Evt_ForceAgentState, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Meeting", eventidEvt_Meeting, Fire_Evt_Meeting, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_CancelMeeting", eventidEvt_CancelMeeting, Fire_Evt_CancelMeeting, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_SendFax", eventidEvt_SendFax, Fire_Evt_SendFax, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_RecvFax", eventidEvt_RecvFax, Fire_Evt_RecvFax, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_SysError", eventidEvt_SysError, Fire_Evt_SysError, VTS_I4) EVENT_CUSTOM_ID("Evt_SysWarning", eventidEvt_SysWarning, Fire_Evt_SysWarning, VTS_BSTR) EVENT_CUSTOM_ID("Evt_ShowInfo", eventidEvt_ShowInfo, Fire_Evt_ShowInfo, VTS_BSTR) EVENT_CUSTOM_ID("Evt_Line_HangUp", eventidEvt_Line_HangUp, Fire_Evt_Line_HangUp, VTS_I4 VTS_UI4) EVENT_CUSTOM_ID("Evt_Agent_Free", eventidEvt_Agent_Free, Fire_Evt_Agent_Free, VTS_NONE) EVENT_CUSTOM_ID("Evt_ForcAgentOut", eventidEvt_ForcAgentOut, Fire_Evt_ForcAgentOut, VTS_BOOL VTS_I4) EVENT_CUSTOM_ID("Evt_LogoutByForce", eventidEvt_LogoutByForce, Fire_Evt_LogoutByForce, VTS_I4 VTS_BSTR) EVENT_CUSTOM_ID("Evt_Cancel", eventidEvt_Cancel, Fire_Evt_Cancel, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Consult", eventidEvt_Consult, Fire_Evt_Consult, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Confirm", eventidEvt_Confirm, Fire_Evt_Confirm, VTS_BOOL VTS_UI4 VTS_I4) EVENT_CUSTOM_ID("Evt_Line_TalkInfo", eventidEvt_Line_TalkInfo, Fire_Evt_Line_Talk, VTS_UI4 VTS_BSTR) END_EVENT_MAP() #pragma endregion #pragma region Others // 属性页 // TODO: 按需要添加更多属性页。请记住增加计数! BEGIN_PROPPAGEIDS(CTFBCtrl, 1) PROPPAGEID(CTFBPropPage::guid) END_PROPPAGEIDS(CTFBCtrl) // 初始化类工厂和 guid IMPLEMENT_OLECREATE_EX(CTFBCtrl, "TFB.TFBCtrl.1", 0xb4ae3b7a, 0xb9a9, 0x4b05, 0x84, 0x57, 0xfd, 0xff, 0xb6, 0x6d, 0x8c, 0xbe) // 键入库 ID 和版本 IMPLEMENT_OLETYPELIB(CTFBCtrl, _tlid, _wVerMajor, _wVerMinor) // 接口 ID const IID IID_DOCX = { 0xC442E54C, 0xF74F, 0x4921, { 0x99, 0xC6, 0xD7, 0xF, 0x3D, 0xA6, 0xA6, 0xC9 } }; const IID IID_DOCXEvents = { 0x87EA9BF3, 0x2AF0, 0x44D4, { 0xBA, 0xFA, 0xBD, 0xBA, 0xC0, 0x69, 0xAE, 0x49 } }; // 控件类型信息 static const DWORD _dwOCXOleMisc = OLEMISC_INVISIBLEATRUNTIME | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_INSIDEOUT | OLEMISC_CANTLINKINSIDE | OLEMISC_RECOMPOSEONRESIZE; IMPLEMENT_OLECTLTYPE(CTFBCtrl, IDS_TFB, _dwOCXOleMisc) // COCXCtrl::COCXCtrlFactory::UpdateRegistry - // 添加或移除 COCXCtrl 的系统注册表项 BOOL CTFBCtrl::CTFBCtrlFactory::UpdateRegistry(BOOL bRegister) { // TODO: 验证您的控件是否符合单元模型线程处理规则。 // 有关更多信息,请参考 MFC 技术说明 64。 // 如果您的控件不符合单元模型规则,则 // 必须修改如下代码,将第六个参数从 // afxRegInsertable | afxRegApartmentThreading 改为 afxRegInsertable。 if (bRegister) return AfxOleRegisterControlClass( AfxGetInstanceHandle(), m_clsid, m_lpszProgID, IDS_TFB, IDB_TFB, afxRegInsertable | afxRegApartmentThreading, _dwOCXOleMisc, _tlid, _wVerMajor, _wVerMinor); else return AfxOleUnregisterClass(m_clsid, m_lpszProgID); } // COCXCtrl::COCXCtrl - 构造函数 CTFBCtrl::CTFBCtrl() { InitializeIIDs(&IID_DOCX, &IID_DOCXEvents); AfxSocketInit(); m_pAgentClient = new CAgentClient(); if( m_pAgentClient == NULL ) { Fire_Evt_SysError( ERR_NO_AGENT_CLIENT ); return; } else { // 1.创建事件管理器 if( m_pAgentClient->CreateEventManager(this) == false ) { Fire_Evt_SysError( ERR_NO_AGENT_EVENT_MANAGER ); return; } // 2.创建操作对象 if( m_pAgentClient->CreateAgentOp() == false ) { m_pAgentClient->SetErrorCode( ERR_NO_AGENT_OPERATE ); m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_NO_AGENT_OPERATE ); return; } // 3.创建业务对象 if( m_pAgentClient->CreateAgentBussiness() == false ) { m_pAgentClient->SetErrorCode( ERR_NO_AGENT_SOCKET ); m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_NO_AGENT_SOCKET ); return; } // 4.消息通讯对象 if( m_pAgentClient->CreateAgentMsgProc() == false ) { m_pAgentClient->SetErrorCode( ERR_NO_AGENT_SOCKET ); m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_NO_AGENT_SOCKET ); return; } // 4.创建日志对象 if( m_pAgentClient->CreateAgentLog() == false ) { m_pAgentClient->SetErrorCode( ERR_NO_AGENT_LOG ); m_pAgentClient->GetEventManager()->Fire_Evt_SysError( ERR_NO_AGENT_LOG ); return; } } } // COCXCtrl::~COCXCtrl - 析构函数 CTFBCtrl::~CTFBCtrl() { if( m_pAgentClient != NULL ) { delete m_pAgentClient; m_pAgentClient = NULL; } } // COCXCtrl::DoPropExchange - 持久性支持 void CTFBCtrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); } // COCXCtrl::GetControlFlags - // 自定义 MFC 的 ActiveX 控件实现的标志。 // DWORD CTFBCtrl::GetControlFlags() { DWORD dwFlags = COleControl::GetControlFlags(); // 在活动和不活动状态之间进行转换时, // 不会重新绘制控件。 dwFlags |= noFlickerActivate; return dwFlags; } // COCXCtrl::OnResetState - 将控件重置为默认状态 void CTFBCtrl::OnResetState() { COleControl::OnResetState(); // 重置 DoPropExchange 中找到的默认值 } #pragma endregion // COCXCtrl 消息处理程序 void CTFBCtrl::OnTimer(UINT_PTR nIDEvent) { BOOL IsIpError = m_pAgentClient->GetIsConnInfoChange(); if (!IsIpError) { m_pAgentClient->GetEventManager()->Fire_Evt_AgentLinkStateChanged( PDU_LINK_STATE_FAILED ); m_pAgentClient->SetErrorCode(ERR_NO_IP); m_pAgentClient->GetEventManager()->Fire_Evt_LogIn(false, ERR_NO_IP); } KillTimer(m_TimerIDConnect); COleControl::OnTimer(nIDEvent); } #pragma region 方法 /*****操作接口:****************************************************/ /* * 函数名称:SetAgentID(LONG) * 概要分析:设置座席ID(同步) */ void CTFBCtrl::SetAgentID(LONG newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAgentNo(newVal); } /* * 函数名称:SetAgentGroup(LPCTSTR) * 概要分析:设置座席组(同步) */ void CTFBCtrl::SetAgentGroup(LPCTSTR newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAgentGroup(newVal); } /* * 函数名称:SetAgentType(LONG) * 概要分析:设置座席类型(同步) */ void CTFBCtrl::SetAgentType(LONG newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAgentType((AGENT_TYPE)newVal); } /* * 函数名称:SetAgentExten(LONG) * 概要分析:设置座席分机(同步) */ void CTFBCtrl::SetAgentExten(LONG newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAgentExten(newVal); } /* * 函数名称:SetAcdAddr(LPCTSTR) * 概要分析:设置ACD地址(同步) */ void CTFBCtrl::SetAcdAddr(LPCTSTR newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAcdIp(newVal); } /* * 函数名称:SetAcdPort(LONG) * 概要分析:设置ACD端口(同步) */ void CTFBCtrl::SetAcdPort(LONG newVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(m_pAgentClient != NULL); m_pAgentClient->SetAcdPort(newVal); } /* * 函数名称:Login() * 概要分析:签入(异步) */ void CTFBCtrl::Login() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.检查座席客户端是否存在 if( m_pAgentClient == NULL ) { Fire_Evt_Login( false, ERR_NO_AGENT_CLIENT ); return; } // 2.检查操作类是否存在 if( m_pAgentClient->GetAgentOp() == NULL ) { m_pAgentClient->SetErrorCode( ERR_NO_AGENT_OPERATE ); m_pAgentClient->GetEventManager()->Fire_Evt_LogIn( false, ERR_NO_AGENT_OPERATE ); return; } // 3.签入操作的第一步为连接ACD服务器 if(!m_pAgentClient->LinkAcdServer()) { m_pAgentClient->SetErrorCode( ERR_LOGIN_AGIN ); m_pAgentClient->GetEventManager()->Fire_Evt_LogIn( false, ERR_LOGIN_AGIN ); return; } //设置定时器,如果在指定时间内LinkStatus_Unknown还没有连接结果,说明IP地址不存在,ConnectInfo没处理 SetTimer(m_TimerIDConnect, 3000, NULL); } /* * 函数名称:Logout() * 概要分析:签出(异步) */ void CTFBCtrl::Logout() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Logout(); } /* * 函数名称:SayBusy(long) * 概要分析:座席置忙 */ void CTFBCtrl::SayBusy(LONG a_nBusyCode) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->SayBusy( a_nBusyCode ); } /* * 函数名称:SayFree() * 概要分析:座席置闲 */ void CTFBCtrl::SayFree() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->SayFree(); } /* * 函数名称:ResetAgent() * 概要分析:座席重置 */ void CTFBCtrl::ResetAgent() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->ResetAgent(); } /* * 函数名称:MakeCall(LPCTSTR) * 概要分析:外拨 */ void CTFBCtrl::MakeCall(LPCTSTR a_sTelNumber, LPCTSTR a_sCallerNum) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->MakeCall( a_sTelNumber, a_sCallerNum ); } /* * 函数名称:AnswerCall() * 概要分析:应答 */ void CTFBCtrl::AnswerCall() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->AnswerCall(); } /* * 函数名称:DropCall() * 概要分析:挂机 */ void CTFBCtrl::DropCall() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->DropCall(); } /* * 函数名称:Cancel() * 概要分析:取消 */ void CTFBCtrl::Cancel(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Cancel(); } /* * 函数名称:MuteOn() * 概要分析:开始静音 */ void CTFBCtrl::MuteOn() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->MuteOn(); } /* * 函数名称:MuteOff() * 概要分析:结束静音 */ void CTFBCtrl::MuteOff() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->MuteOff(); } /* * 函数名称:Hold() * 概要分析:保持 */ void CTFBCtrl::Hold() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Hold(); } /* * 函数名称:ConnectHold() * 概要分析:接回 */ void CTFBCtrl::Retrieve() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->TakeBack(); } /* * 函数名称:Instead(long) * 概要分析:代接 */ void CTFBCtrl::Instead(LONG a_nTargetAgent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Instead(a_nTargetAgent); } /* * 函数名称:Transfer(LPCTSTR) * 概要分析:转移 */ void CTFBCtrl::Transfer(LPCTSTR a_sTelNumber, LPCTSTR a_sCallerNum) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Transfer(a_sTelNumber, a_sCallerNum); } /* * 函数名称:CancelTransfer() * 概要分析:取消转移 */ void CTFBCtrl::CancelTransfer() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->CancelTransfer(); } /* * 函数名称:TransferToIvr(LPCTSTR,long,VAIANT_BOOL) * 概要分析:转移到指定IVR,不带随路数据 */ void CTFBCtrl::TransferToIvr(LPCTSTR a_sIvrFilePath, LONG a_nNode, VARIANT_BOOL a_bNeedReturn, LPCTSTR a_sAssociateData) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->TransferToIvr(a_sIvrFilePath, a_nNode, a_bNeedReturn, a_sAssociateData); } /* * 函数名称:MethodReserved() * 概要分析:保留接口 */ void CTFBCtrl::MethodReserved() { } /* * 函数名称:Consult(LPCTSTR) * 概要分析:协商呼叫 */ void CTFBCtrl::Consult(LPCTSTR a_sTelNumber, LPCTSTR a_sCallerNum) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Consult(a_sTelNumber, a_sCallerNum); } /* * 函数名称:Confirm(long a_nType) * 概要分析:确认转移 */ void CTFBCtrl::Confirm(long a_nType) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Confirm(a_nType); } /* * 函数名称:Listen(long) * 概要分析:监听指定座席 */ void CTFBCtrl::Listen(LONG a_nTargetAgent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Listen(a_nTargetAgent); } /* * 函数名称:InsertAgent(long) * 概要分析:强插指定座席 */ void CTFBCtrl::Insert(LONG a_nTargetAgent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Insert(a_nTargetAgent); } /* * 函数名称:Intercept(long) * 概要分析:强截指定座席 */ void CTFBCtrl::Intercept(LONG a_nTargetAgent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Intercept(a_nTargetAgent); } /* * 函数名称:Break(long) * 概要分析:强拆指定座席 */ void CTFBCtrl::Break(LONG a_nTargetAgent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Break(a_nTargetAgent); } /* * 函数名称:ForceAgentOut(long,long) * 概要分析:强制签出指定坐席 */ void CTFBCtrl::ForceAgentOut(LONG a_nAgentId, LPCTSTR a_sReason) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加调度处理程序代码 m_pAgentClient->GetAgentOp()->ForceAgentLogOut(a_nAgentId, a_sReason); } /* * 函数名称:ForceAgentState(long,long) * 概要分析:强制控制指定座席 */ void CTFBCtrl::ForceAgentState(LONG a_nTargetAgent, LONG a_nControlType) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->ForceAgentState(a_nTargetAgent, a_nControlType); } /* * 函数名称:Meeting(LPCTSTR) * 概要分析:加第三方,然后一起通话 */ void CTFBCtrl::Meeting(LPCTSTR a_sTelNumber, LPCTSTR a_sCallerNum) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->Meeting(a_sTelNumber, a_sCallerNum); } /* * 函数名称:CancelMeeting() * 概要分析:取消加第三方 */ void CTFBCtrl::CancelMeeting() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->CancelMeeting(); } /* * 函数名称:SendFax(LPCTSTR) * 概要分析:发传真 */ void CTFBCtrl::SendFax(LPCTSTR a_sFilePath) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->SendFax(a_sFilePath); } /* * 函数名称:RecvFax(LPCTSTR) * 概要分析:接收传真 */ void CTFBCtrl::RecvFax(LPCTSTR a_sRecvFilePath) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pAgentClient->GetAgentOp()->RecvFax(a_sRecvFilePath); } /*****业务接口:**************************************************************/ /* * 函数名称:GetVersion() * 概要分析:返回OCX的版本号 */ BSTR CTFBCtrl::GetVersion() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult; #ifdef _DEBUG strResult.Format(_T("%s_Debug版"), m_Version); #else strResult.Format(_T("%s0_Release版"), m_Version); #endif return strResult.AllocSysString(); } /* * 函数名称:GetAutoReconnect() * 概要分析:返回座席是否自动重连 */ VARIANT_BOOL CTFBCtrl::GetAutoReconnect() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return false; // 3.返回座席是否自定重连 return m_pAgentClient->GetIsAutoReConnect(); } /* * 函数名称:GetAutoAnswer() * 概要分析:返回座席是否自动应答 */ VARIANT_BOOL CTFBCtrl::GetAutoAnswer() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return false; return m_pAgentClient->GetIsAutoAnswer(); } /* * 函数名称:GetAgentInfo() * 概要分析:获取座席的信息 */ BSTR CTFBCtrl::GetAgentInfo() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetAgentInfo(); return strResult.AllocSysString(); } /* * 函数名称:GetAgentState() * 概要分析:获取座席的状态 */ LONG CTFBCtrl::GetAgentState() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return 0; return m_pAgentClient->GetAgentState(); } /* * 函数名称:GetAgentLineState() * 概要分析:获取座席的线路状态 */ LONG CTFBCtrl::GetAgentLineState() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return 0; return m_pAgentClient->GetAgentLineState(); } /* * 函数名称:GetAgentLinkState() * 概要分析:获取座席的连接ACD的状态 */ LONG CTFBCtrl::GetAgentLinkState() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return 0; return m_pAgentClient->GetAgentLinkState(); } /* * 函数名称:GetCallID() * 概要分析:获取呼叫ID */ LONG CTFBCtrl::GetCallID() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return 0; if(m_pAgentClient->GetAgentLineState() == INNER_STATE_RING_BACK || m_pAgentClient->GetAgentLineState() == INNER_STATE_ALERTING || m_pAgentClient->GetAgentLineState() == INNER_STATE_TALKING || m_pAgentClient->GetAgentLineState() == INNER_STATE_HELD) { return m_pAgentClient->GetAgentCallID(); } else { return 0; } } /* * 函数名称:GetOuterNumber() * 概要分析:获取外部号码 */ BSTR CTFBCtrl::GetOuterNumber() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetOuterNum(); return strResult.AllocSysString(); } /* * 函数名称:GetCallInQueue() * 概要分析:获取座席的来电等待队列:拼接字符串 */ BSTR CTFBCtrl::GetCallInQueue() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); return strResult.AllocSysString(); } /* * 函数名称:GetAllCallInQueue() * 概要分析:获取所有座席的来电等待队列 */ BSTR CTFBCtrl::GetAllCallInQueue() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); return strResult.AllocSysString(); } /* * 函数名称:GetRecordFilePath() * 概要分析:获取录音文件路径 */ BSTR CTFBCtrl::GetRecordFilePath() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetRecordFilePath(); return strResult.AllocSysString(); } /* * 函数名称:GetLeaveWordFilePath() * 概要分析:获取留言文件路径 */ BSTR CTFBCtrl::GetLeaveWordFilePath() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetLeaveWordFilePath(); return strResult.AllocSysString(); } /* * 函数名称:GetFaxFilePath() * 概要分析:获取传真文件路径 */ BSTR CTFBCtrl::GetFaxFilePath() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetFaxFilepath(); return strResult.AllocSysString(); } /* * 函数名称:GetLogFileDirectory() * 概要分析:获取日志文件的存放目录 */ BSTR CTFBCtrl::GetLogFileDirectory() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetLogFilePath(); return strResult.AllocSysString(); } /* * 函数名称:SubscribeData(LONG,LONG) * 概要分析:订阅数据 */ VARIANT_BOOL CTFBCtrl::SubscribeData(LONG nType, LONG nParam) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) { return -1; } return m_pAgentClient->GetAgentBussiness()->SubscribeData(nType, nParam); } /* * 函数名称:CancelSubscribeData(LONG) * 概要分析:取消订阅数据 */ VARIANT_BOOL CTFBCtrl::CancelSubscribeData(LONG nType, LONG nParam) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return false; return m_pAgentClient->GetAgentBussiness()->CancelSubscribeData(nType, nParam); } /* * 函数名称:SetAssociateData(LPCTSTR,LPCTSTR) * 概要分析:设置随路数据 */ void CTFBCtrl::SetAssociateData(LPCTSTR a_sCaption, LPCTSTR a_sContent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return; return; } /* * 函数名称:GetAssociateData(LPCTSTR) * 概要分析:获取随路数据 */ BSTR CTFBCtrl::GetAssociateData(LPCTSTR a_sCaption) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); strResult = m_pAgentClient->GetAssociateData(a_sCaption); return strResult.AllocSysString(); } /* * 函数名称:GetPromptByAgentState(LONG) * 概要分析:返回座席状态对应的中文含义 */ BSTR CTFBCtrl::GetPromptByAgentState(LONG a_nAgentState) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); CAgentMap *tmpLpAgentMap = CAgentMap::GetInstance(); strResult = tmpLpAgentMap->GetPromptByAgentState(a_nAgentState); return strResult.AllocSysString(); } /* * 函数名称:GetPromptByAgentLineState(LONG) * 概要分析:返回座席线路状态的中文含义 */ BSTR CTFBCtrl::GetPromptByAgentLineState(LONG a_nAgentLineState) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); CAgentMap *tmpLpAgentMap = CAgentMap::GetInstance(); strResult = tmpLpAgentMap->GetPromptByLineState(a_nAgentLineState); return strResult.AllocSysString(); } /* * 函数名称:GetPromptByAgentLinkState(LONG) * 概要分析:返回座席连接ACD服务器状态的中文含义 */ BSTR CTFBCtrl::GetPromptByAgentLinkState(LONG a_nAgentLinkState) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); CAgentMap *tmpLpAgentMap = CAgentMap::GetInstance(); strResult = tmpLpAgentMap->GetPromptByLinkState(a_nAgentLinkState); return strResult.AllocSysString(); } /* * 函数名称:GetPromptByBusyCode(LONG) * 概要分析:返回忙状态的具体中文含义 */ BSTR CTFBCtrl::GetPromptByBusyCode(LONG a_nBusyCode) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return strResult.AllocSysString(); return strResult.AllocSysString(); } /* * 函数名称:GetErrorMsg(LONG) * 概要分析:返回当前操作的错误信息 */ BSTR CTFBCtrl::GetErrorMsg(LONG a_nErrCode) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CString strResult = ""; // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) { strResult = "座席客户端不存在"; return strResult.AllocSysString(); } CAgentMap *tmpLpAgentMap = CAgentMap::GetInstance(); strResult = tmpLpAgentMap->GetPromptByErrorCode(a_nErrCode); return strResult.AllocSysString(); } /* * 函数名称:sysSetAutoReconnect(VARIANT_BOOL) * 概要分析:设置OCX是否自动重连 */ void CTFBCtrl::sysSetAutoReconnect(VARIANT_BOOL m_bAutoReconnect) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return; m_pAgentClient->SetAutoReconnect(m_bAutoReconnect); // 通知Scoket是否自动重联 } /* * 函数名称:sysSetAutoAnswer(VARIANT_BOOL) * 概要分析:设置座席是否自动应答 */ void CTFBCtrl::sysSetAutoAnswer(VARIANT_BOOL a_bAutoAnswer) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return; m_pAgentClient->SetIsAutoAnswer(a_bAutoAnswer); } /* * 函数名称:sysSetLogFileDirectory(LPCTSTR) * 概要分析:设置日志文件存放目录 */ void CTFBCtrl::sysSetLogFileDirectory(LPCTSTR a_sLogFileDir) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) { return; } } /* * 函数名称:sysLog(VARIANT_BOOL) * 概要分析:输出调试日志信息到文件 */ void CTFBCtrl::sysLog(VARIANT_BOOL a_bOpen) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) return; m_pAgentClient->GetAgentLog()->SetOpen(a_bOpen); } /* * 函数名称:sysShowLogInfo(VARIANT_BOOL a_bFlag) * 概要分析:是否让日志在页面前端显示出来 */ void CTFBCtrl::sysShowLogInfo(VARIANT_BOOL a_bFlag) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 1.判断座席客户端是否存在 if( m_pAgentClient == NULL ) { return; } m_pAgentClient->GetAgentLog()->SetShowLogInfo(a_bFlag); } #pragma endregion #pragma region 事件发起 /*****事件:******************************************************************/ /* * 函数名称:Fire_Evt_LogIn(VARIANT_BOOL,LONG) * 概要分析:签入结果事件 */ void CTFBCtrl::Fire_Evt_Login(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_Login, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_LogOut(VARIANT_BOOL,LONG) * 概要分析:签出结果事件 */ void CTFBCtrl::Fire_Evt_Logout(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_Logout, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_Requested(ULONG) * 概要分析:被请求事件 */ void CTFBCtrl::Fire_Evt_Requested(ULONG a_nCallID) { FireEvent(eventidEvt_Requested, EVENT_PARAM(VTS_UI4), a_nCallID); } /* * 函数名称:Fire_Evt_AgentStateChanged(LONG) * 概要分析:座席状态改变事件 */ void CTFBCtrl::Fire_Evt_AgentStateChanged(LONG a_nAgentState) { FireEvent(eventidEvt_AgentStateChanged, EVENT_PARAM(VTS_I4), a_nAgentState); } /* * 函数名称:Fire_Evt_AgentLineStateChanged(LONG) * 概要分析:座席线路状态改变事件 */ void CTFBCtrl::Fire_Evt_AgentLineStateChanged(LONG a_nLineState) { FireEvent(eventidEvt_AgentLineStateChanged, EVENT_PARAM(VTS_I4), a_nLineState); } /* * 函数名称:Fire_Evt_AgentLinkStateChanged(LONG) * 概要分析:座席连接ACD服务器状态改变事件 */ void CTFBCtrl::Fire_Evt_AgentLinkStateChanged(LONG a_nLinkState) { FireEvent(eventidEvt_AgentLinkStateChanged, EVENT_PARAM(VTS_I4), a_nLinkState); } /* * 函数名称:Fire_Evt_SubDataChanged(LPCTSTR) * 概要分析:订阅的座席状态事件 */ void CTFBCtrl::Fire_Evt_SubDataChanged(LONG a_nType, LONG a_nSubData1, LONG a_nSubData2, LPCTSTR a_sSubStr) { FireEvent(eventidEvt_SubDataChanged, EVENT_PARAM(VTS_I4 VTS_I4 VTS_I4 VTS_BSTR), a_nType, a_nSubData1, a_nSubData2, a_sSubStr); } /* * 函数名称:Fire_Evt_SubFaxProgress(ULONG) * 概要分析:订阅的传真进度事件 */ void CTFBCtrl::Fire_Evt_SubFaxProgress(ULONG a_nFaxProgress) { FireEvent(eventidEvt_SubFaxProgress, EVENT_PARAM(VTS_UI4), a_nFaxProgress); } /* * 函数名称:Fire_Evt_SayBusy(VRIANT_BOOL,LONG) * 概要分析:示忙结果事件 */ void CTFBCtrl::Fire_Evt_SayBusy(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_SayBusy, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_SayFree(VARIANT_BOOL,LONG) * 概要分析:示闲结果事件 */ void CTFBCtrl::Fire_Evt_SayFree(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_SayFree, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_ResetAgent(VARIANT_BOOL,LONG) * 概要分析:重置结果事件 */ void CTFBCtrl::Fire_Evt_ResetAgent(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_ResetAgent, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_MakeCall(VARIANT_BOOL,LONG) * 概要分析:外拨结果事件 */ void CTFBCtrl::Fire_Evt_MakeCall(VARIANT_BOOL a_bFlag, LONG a_nType, LPCTSTR a_sTelNumber, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_MakeCall, EVENT_PARAM(VTS_BOOL VTS_I4 VTS_BSTR VTS_UI4 VTS_I4), a_bFlag, a_nType, a_sTelNumber, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Agent_Free() * 概要分析:线路的空闲事件 */ void CTFBCtrl::Fire_Evt_Agent_Free(void) { FireEvent(eventidEvt_Agent_Free, EVENT_PARAM(VTS_NONE)); } /* * 函数名称:Fire_Evt_Line_Offering(LPCTSTR,ULONG) * 概要分析:线路的来电振铃事件 */ void CTFBCtrl::Fire_Evt_Line_Offering(LPCTSTR a_sOuterNumber, LONG a_nType, ULONG a_nCallID, ULONG a_nInfoEx) { FireEvent(eventidEvt_Line_Offering, EVENT_PARAM(VTS_BSTR VTS_I4 VTS_UI4 VTS_UI4), a_sOuterNumber, a_nType, a_nCallID, a_nInfoEx); } /* * 函数名称:Fire_Evt_Line_RingBack(LPCTSTR,ULONG) * 概要分析:线路的外呼振铃事件 */ void CTFBCtrl::Fire_Evt_Line_RingBack(LPCTSTR a_sOuterNumber, ULONG a_nCallID) { FireEvent(eventidEvt_Line_RingBack, EVENT_PARAM(VTS_BSTR VTS_UI4), a_sOuterNumber, a_nCallID); } /* * 函数名称:Fire_Evt_Line_Talk(ULONG) * 概要分析:线路的通话事件 */ void CTFBCtrl::Fire_Evt_Line_Talk(ULONG a_nCallID) { FireEvent(eventidEvt_Line_Talk, EVENT_PARAM(VTS_UI4), a_nCallID); } /* * 函数名称:Fire_Evt_Line_Talk(ULONG,LPCTSTR) * 概要分析:线路的通话事件(包含主叫号码) */ void CTFBCtrl::Fire_Evt_Line_Talk(ULONG a_nCallID, LPCTSTR a_sOuterNumber) { FireEvent(eventidEvt_Line_TalkInfo, EVENT_PARAM(VTS_UI4 VTS_BSTR), a_nCallID, a_sOuterNumber); } /* * 函数名称:Fire_Evt_Line_HangUp(LONG,ULONG) * 概要分析:线路的挂机事件 */ void CTFBCtrl::Fire_Evt_Line_HangUp(LONG a_nOrder, ULONG a_nCallID) { FireEvent(eventidEvt_Line_HangUp, EVENT_PARAM(VTS_I4 VTS_UI4), a_nOrder, a_nCallID); } /* * 函数名称:Fire_Evt_AnswerCall(VARIANT_BOOL) * 概要分析:应答结果事件 */ void CTFBCtrl::Fire_Evt_AnswerCall(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_AnswerCall, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_DropCall(VARIANT_BOOL,LONG) * 概要分析:挂机结果事件 */ void CTFBCtrl::Fire_Evt_DropCall(VARIANT_BOOL a_bFlag, LONG a_nOrder, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_DropCall, EVENT_PARAM(VTS_BOOL VTS_I4 VTS_UI4 VTS_I4), a_bFlag, a_nOrder, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Cancel(LPCTSTR) * 概要分析:取消结果事件 */ void CTFBCtrl::Fire_Evt_Cancel(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Cancel, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_MuteOn(VARIANT_BOOL) * 概要分析:开始静音结果事件 */ void CTFBCtrl::Fire_Evt_MuteOn(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_MuteOn, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_MuteOff(VARIANT_BOOL) * 概要分析:结束静音结果事件 */ void CTFBCtrl::Fire_Evt_MuteOff(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_MuteOff, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Hold(VARIANT_BOOL,ULONG,LONG) * 概要分析:保持结果事件 */ void CTFBCtrl::Fire_Evt_Hold(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Hold, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Retrieve(VARIANT_BOOL,ULONG,LONG) * 概要分析:接回结果事件 */ void CTFBCtrl::Fire_Evt_Retrieve(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Retrieve, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Instead(VARIANT_BOOL,ULONG,LONG) * 概要分析:代接结果事件 */ void CTFBCtrl::Fire_Evt_Instead(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Instead, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_CallInQueue_Changed(LONG) * 概要分析:座席的来电等待队列改变事件 */ void CTFBCtrl::Fire_Evt_CallInQueue_Changed(LONG a_nCallInNum) { FireEvent(eventidEvt_CallInQueue_Changed, EVENT_PARAM(VTS_I4), a_nCallInNum); } /* * 函数名称:Fire_Evt_AllCallInQueue_Changed(LPCTSTR) * 概要分析:所有座席的来电等待队列改变事件 */ void CTFBCtrl::Fire_Evt_AllCallInQueue_Changed(LPCTSTR a_sAllCallInQueueInfo) { FireEvent(eventidEvt_AllCallInQueue_Changed, EVENT_PARAM(VTS_BSTR), a_sAllCallInQueueInfo); } /* * 函数名称:Fire_Evt_RecordInform(LPCTSTR) * 概要分析:开始录音结果事件 */ void CTFBCtrl::Fire_Evt_RecordInform(LPCTSTR a_sRecordFilePath, ULONG a_nCallID) { FireEvent(eventidEvt_RecordInform, EVENT_PARAM(VTS_BSTR VTS_UI4), a_sRecordFilePath, a_nCallID); } /* * 函数名称:Fire_Evt_Transfer(VARIANT_BOOL,ULONG,LONG) * 概要分析:转移结果事件 */ void CTFBCtrl::Fire_Evt_Transfer(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Transfer, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_CancelTransfer(VARIANT_BOOL,ULONG,LONG) * 概要分析:取消转移结果事件 */ void CTFBCtrl::Fire_Evt_CancelTransfer(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_CancelTransfer, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_TransferToIvr(VARIANT_BOOL,ULONG,LONG) * 概要分析:转移到IVR结果事件 */ void CTFBCtrl::Fire_Evt_TransferToIvr(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_TransferToIvr, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Listen(VRRIANT_BOOL,ULONG,LONG) * 概要分析:监听座席结果事件 */ void CTFBCtrl::Fire_Evt_Listen(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Listen, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Insert(VARIANT_BOOL,ULONG,LONG) * 概要分析:强插座席结果事件 */ void CTFBCtrl::Fire_Evt_Insert(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Insert, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Intercept(VARIANT_BOOL,ULONG,LONG) * 概要分析:强截座席结果事件 */ void CTFBCtrl::Fire_Evt_Intercept(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Intercept, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_Break(VARIANT_BOOL,ULONG,LONG) * 概要分析:强拆座席结果事件 */ void CTFBCtrl::Fire_Evt_Break(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Break, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } void CTFBCtrl::Fire_Evt_ForcAgentOut(VARIANT_BOOL a_bFlag, LONG a_nErrCode) { FireEvent(eventidEvt_ForcAgentOut, EVENT_PARAM(VTS_BOOL VTS_I4), a_bFlag, a_nErrCode); } /* * 函数名称:Fire_Evt_ForceAgentState(VARIANT_BOOL,ULONG,LONG) * 概要分析:强制控制座席结果事件 */ void CTFBCtrl::Fire_Evt_ForceAgentState(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_ForceAgentState, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_LogoutByForce(LONG a_nForceAgentId, LPCTSTR a_sReson) * 概要分析:被强制签出事件 */ void CTFBCtrl::Fire_Evt_LogoutByForce(LONG a_nForceAgentId, LPCTSTR a_sReson) { FireEvent(eventidEvt_LogoutByForce, EVENT_PARAM(VTS_I4 VTS_BSTR), a_nForceAgentId, a_sReson); } /* * 函数名称:Fire_Evt_Meeting(VARIANT_BOOL,ULONG,LONG) * 概要分析:加第三方结果事件 */ void CTFBCtrl::Fire_Evt_Meeting(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Meeting, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_CancelMeeting(VARIANT_BOOL,ULONG,LONG) * 概要分析:取消加第三方结果事件 */ void CTFBCtrl::Fire_Evt_CancelMeeting(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_CancelMeeting, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_SendFax(VARIANT_BOOL,ULONG,LONG) * 概要分析:发送传真结果事件 */ void CTFBCtrl::Fire_Evt_SendFax(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_SendFax, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_RecvFax(VARIANT_BOOL,ULONG,LONG) * 概要分析:接收传真结果事件 */ void CTFBCtrl::Fire_Evt_RecvFax(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_RecvFax, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } /* * 函数名称:Fire_Evt_SysError(LONG) * 概要分析:系统错误事件 */ void CTFBCtrl::Fire_Evt_SysError(LONG a_nErrCode) { FireEvent(eventidEvt_SysError, EVENT_PARAM(VTS_I4), a_nErrCode); } /* * 函数名称:Fire_Evt_SysWarning(LPCTSTR) * 概要分析:警告事件 */ void CTFBCtrl::Fire_Evt_SysWarning(LPCTSTR a_sWarningMsg) { FireEvent(eventidEvt_SysWarning, EVENT_PARAM(VTS_BSTR), a_sWarningMsg); } /* * 函数名称:Fire_Evt_ShowInfo(LPCTSTR) * 概要分析:前端信息显示事件 */ void CTFBCtrl::Fire_Evt_ShowInfo(LPCTSTR a_sShowInfo) { FireEvent(eventidEvt_ShowInfo, EVENT_PARAM(VTS_BSTR), a_sShowInfo); } // 协商呼叫结果事件 void CTFBCtrl::Fire_Evt_Consult(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Consult, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } // 确认转移结果事件 void CTFBCtrl::Fire_Evt_Confirm(VARIANT_BOOL a_bFlag, ULONG a_nCallID, LONG a_nErrCode) { FireEvent(eventidEvt_Confirm, EVENT_PARAM(VTS_BOOL VTS_UI4 VTS_I4), a_bFlag, a_nCallID, a_nErrCode); } #pragma endregion