📄 michellecti.h
字号:
// MichelleCTI.h : Declaration of the CMichelleCTI
#ifndef __MICHELLECTI_H_
#define __MICHELLECTI_H_
/////////////////////////////////////////////////////////////////////////////
// CMichelleCTI
#include "resource.h" // main symbols
#include "ctcv4CP.h"
#include <list>
using namespace std;
class CCTIEvent;
class CDirectoryNumber;
typedef list<CDirectoryNumber*> DNLIST;
#define UM_FATALERROR WM_USER+1
#define UM_CTIEVENT WM_USER+2
#define UM_DNEVENT WM_USER+3
#define UM_DNDIALING WM_USER+4
#define UM_CANCELDIAL WM_USER+5
/////////////////////////////////////////
//Define error message
#define CTC_ERR_BASE 1000
#define CTC_DN_INITIALIZE_FAIL CTC_ERR_BASE+1
#define CTC_DN_REGISTERED CTC_ERR_BASE+2
#define CTC_TIMEOUT_ERR CTC_ERR_BASE+3
#define CTC_RELEASECALL_ERR CTC_ERR_BASE+4
#define CTC_MAKECALL_ERR CTC_ERR_BASE+5
#define CTC_UNKNOWN_ERR CTC_ERR_BASE+6
#define CTC_INVALID_PARAM CTC_ERR_BASE+7
class ATL_NO_VTABLE CMichelleCTI :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMichelleCTI, &CLSID_MichelleCTI>,
public IConnectionPointContainerImpl<CMichelleCTI>,
public IMichelleCTI,
public IWebCTI,
public CProxy_IMichelleCTIEvents< CMichelleCTI >
{
public:
CMichelleCTI()
{
m_pUnkMarshaler=NULL;
}
DECLARE_REGISTRY_RESOURCEID(IDR_MICHELLECTI)
DECLARE_NOT_AGGREGATABLE(CMichelleCTI)
DECLARE_GET_CONTROLLING_UNKNOWN()
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CMichelleCTI)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IMichelleCTI)
COM_INTERFACE_ENTRY(IWebCTI)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CMichelleCTI)
CONNECTION_POINT_ENTRY(DIID__IMichelleCTIEvents)
END_CONNECTION_POINT_MAP()
HRESULT FinalConstruct()
{
InitializeCriticalSection(&m_csList);
return CoCreateFreeThreadedMarshaler(
GetControllingUnknown(), &m_pUnkMarshaler.p);
}
void FinalRelease()
{
Uninitialize();
DeleteCriticalSection(&m_csList);
m_pUnkMarshaler.Release();
}
CComPtr<IUnknown> m_pUnkMarshaler;
public:
//property
//method
BOOL DefaultHandler(); // the main cti message process handler
void FatalError(); // the CTI server is unavailable, prepair to quit
private:
//property
//initialize cti info
char m_strServerName[ctcNodeNameLen];
char m_strLogicalIdentifier[ctcLogIdLen];
char m_strNetType[ctcNetLen];
//for vb info
long m_lErrCode;
ERRORTYPES m_ErrType;
string m_ErrMsg;
DNLIST m_dnlist;// the registered dn list
CRITICAL_SECTION m_csList; // the lock for accessing dn list
//method
LPDN SearchRegisterdDN(char* dn); // Find this dn's index in the dn list
void CleanDNList(); // clean up the whole dn list
void ClearAPIInfo(); //clear variable for every api
public:
// IMichelleCTI
STDMETHOD_(void, UnregisterDN)(/*[in]*/ LPDN dn);
STDMETHOD_(LPDN, RegisterDN)(/*[in]*/ BSTR dn, /*[in, optional, defaultvalue(AT_DN)]*/ ADDRTYPES type, /*[in, optional]*/ BSTR acdpos);
STDMETHOD_(void, Uninitialize)();
STDMETHOD_(BOOL, Initialize)(/*[in]*/ PBXTYPES pbxtype, /*[in]*/ BSTR server, /*[in]*/ int port, /*[in]*/ BSTR name, /*[in]*/ BSTR pass);
STDMETHOD(get_ErrMsg)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(get_ErrCode)(/*[out, retval]*/ long *pVal);
STDMETHOD(get_ErrType)(/*[out, retval]*/ ERRORTYPES *pVal);
STDMETHOD(get_Initialized)(/*[out, retval]*/ BOOL *pVal);
// IWebCTI
STDMETHOD_(void, ReportResult)(/*[in]*/ BSTR ReqID, /*[in]*/ BOOL result, /*[in]*/ BSTR reason);
STDMETHOD_(void, ReportConfirm)(/*[in]*/ BOOL confirm);
STDMETHOD_(void, ReportStatus)(/*[in]*/ BSTR AgentID, /*[in]*/ AGENTSTATES AgentState);
STDMETHOD_(void, Login)(/*[in]*/ BSTR AgentID);
STDMETHOD_(void, Uninit)();
STDMETHOD_(BOOL, Init)(/*[in]*/ BSTR server, /*[in]*/ int port);
};
#endif //__MICHELLECTI_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -