⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbxdlg.h

📁 三汇CTI示例程序源码
💻 H
字号:


#if !defined(AFX_PBXDLG_H__099E383F_080A_40B0_9C10_915109094E2C__INCLUDED_)
#define AFX_PBXDLG_H__099E383F_080A_40B0_9C10_915109094E2C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define MAX_CHANNEL_NUM		256			// 最大同类通道数
#define MAX_STATION_DTMFLEN	4			// 座席DTMF码的最大长度
#define MAX_TELNUM_LEN		20			// 号码长度
#define MAX_MESSAGE_LEN     256			// 错误消息最大长度
#define STATION_TELNUM_LEN		20		// 分机号码长度   

// IP通道协议类型
#define PROTOCOL_H323		15			// H323
#define PROTOCOL_SIP		16			// SIP

//日志类型								
enum LogType{
		LOGTYPE_INFORMATION,			//信息
		LOGTYPE_WARNING,				//警告
		LOGTYPE_ERROR					//错误
};

// 模拟通道状态
enum ANALOGCH_STATE {
	ANALOG_IDLE,							// 外线(模拟)通道空闲
	ANALOG_WAIT_1STNUM,					// 外线(模拟)等待拨号
	ANALOG_DIALING,						// 外线(模拟)正在拨号
	ANALOG_WAIT_REMOTE_PICKUP,			// 等待外线(模拟)摘机
	ANALOG_WAIT_ACTUAL_PICKUP,			// 外线(模拟)振铃,摘机后等待通话状态
	ANALOG_WAIT_SELECTION,				// 外线(模拟)呼叫内线时候,判断是否符合内线规则
	ANALOG_REQ_STATION,					// 外线(模拟)占用座席
	ANALOG_RING_BACK,					// 外线(模拟)等待座席摘机
	ANALOG_CONNECTED,					// 外线(模拟)通话中
	ANALOG_FLASHING,						// 外线(模拟)等待和转移目标分机通话
	ANALOG_NOANALOG						// ?
};

// IP通道状态
enum IPCH_STATE {
	IP_IDLE,							// 外线(IP)通道空闲
	IP_WAIT_1STNUM,						// 外线(IP)等待拨号
	IP_DIALING,							// 外线(IP)正在拨号
	IP_WAIT_REMOTE_PICKUP,				// 等待外线(IP)摘机
	IP_WAIT_ACTUAL_PICKUP,				// 外线(IP)振铃,摘机后等待通话状态
	IP_WAIT_SELECTION,					// 外线(IP)呼叫内线时候,判断是否符合内线规则
	IP_REQ_STATION,						// 外线(IP)占用座席
	IP_RING_BACK,						// 外线(IP)等待座席摘机
	IP_CONNECTED,						// 外线(IP)通话中
	IP_FLASHING,						// 外线(IP)等待和转移目标分机通话
	IP_NOIP								// ?
};

// 座席通道状态
enum STATIONCH_STATE {
	STATION_IDLE,						// 座席空闲
	STATION_LOCAL_RING,					// 座席振铃
	STATION_GET_1STDTMF,				// 座席按下第一个DTMF码,来选择呼叫对象
	STATION_GET_DTMF,					// 座席判断分机号是否合法
	STATION_REQ_STATION,				// 座席等待占用分机结果
	STATION_RING_BACK,					// 座席等待分机摘机
	STATION_TALKING,					// 座席和分机通话
	STATION_WAIT_HANGUP,				// 座席等待挂机
	STATION_F_GET_DTMF,					// 座席呼叫转移时判断分机号是否合法
	STATION_F_REQ_STATION,				// 座席等待呼叫转移结果
	STATION_F_RING_BACK,				// 座席等待转移目标分机摘机
	STATION_F_TALKING,					// 座席和转移目标分机通话
	STATION_F_OPERATE,					//
	STATION_F_WAIT_TALK,				// 原通话座席等待与转移目标分机通话
	// 模拟通道相关
	STATION_REQ_ANALOG,					// 座席等待内线占用外线(模拟)结果(待定)
	STATION_DIALOUT_WITH_ANALOG,		// 座席向外线(模拟)拨号
	STATION_WAIT_REMOTE_ANALOG_PICKUP,	// 座席等待外线(模拟)摘机
	// IP通道相关
	STATION_REQ_IP,						// 座席等待内线占用外线(IP)结果(待定)
	STATION_DIALOUT_WITH_IP,			// 座席向外线(IP)拨号
	STATION_WAIT_REMOTE_IP_PICKUP,		// 座席等待外线(IP)摘机

};

// 自定义消息
enum
{
	// 座席通道相关消息
	E_US_SEIZURE = 0x0100,				// 向分机发送占用请求
	E_US_RELEASE,						// 向座席发送释放
	E_US_SEIZURE_ACK_IDLE,				// 回应请求座席空闲
	E_US_SEIZURE_ACK_BUSY,				// 回应请求座席忙
	E_US_PICKUP,						// 向主叫方发送摘机事件
	F_US_SEIZURE,						// 闪断时候向座席发送请求事件
	E_MSG_RELEASE,						// 向连接方发送释放事件
	E_MSG_FLASH,						// 闪断事件
	E_MSG_CONNECT,						// 连接事件
	E_MSG_HANGUP,						// 呼叫转移中原通话方挂机,向转移方发送该事件
	// 模拟通道相关消息
	E_US_SEIZURE_TK,					// 向外线(模拟)通道发送占用请求事件
	E_TK_SEIZURE_TK_ACK_IDLE,			// 回应请求外线(模拟)通道空闲
	E_TK_SEIZURE_TK_ACK_BUSY,			// 回应请求外线(模拟)通道忙
	E_TK_RELEASE,						// 向外线(模拟)发送释放事件
	E_US_DTMF2TK,						// 向外线(模拟)发送DTMF码
	E_TK_DIAL_OK,						// 外线(模拟)拨号成功
	E_TK_DIAL_FAIL,						// 外线(模拟)拨号失败
	E_TK_REMOTE_NOANSWER,				// 被叫外线(模拟)无人应答
	E_TK_REMOTE_PICKUP,					// 被叫外线(模拟)摘机
	// IP通道相关消息
	E_US_SEIZURE_IP,					// 向外线(IP)通道发送占用请求事件
	E_IP_SEIZURE_IP_ACK_IDLE,			// 回应请求外线(IP)通道空闲
	E_IP_SEIZURE_IP_ACK_BUSY,			// 回应请求外线(IP)通道忙
	E_IP_RELEASE,						// 向外线(IP)通道发送释放事件
	E_US_DTMF2IP,						// 向外线(IP)发送DTMF码
	E_IP_DIAL_OK,						// 外线(IP)拨号成功
	E_IP_DIAL_FAIL,						// 外线(IP)拨号失败
	E_IP_REMOTE_NOANSWER,				// 被叫外线(IP)无人应答
	E_IP_REMOTE_PICKUP,					// 被叫外线(IP)摘机
};

// 模拟通道信息结构体
typedef struct{
	int	  nChId;						// 通道号
	int	  nLinkToChId;					// 连接目标通道号
	bool  bEnCalled;					// 是否支持续接功能
	int   nDirection;					// 呼叫方向
	char  szCallerId[MAX_TELNUM_LEN];	// 存放主叫号码
	char  szCalleeId[MAX_TELNUM_LEN];	// 存放被叫号码
	char  szPhoneNumBuf[MAX_TELNUM_LEN];// 电话号码存储缓冲
	int   nPhoNumLen;					// 电话号码长度,判断是否要追加号码标志
	int   nTimer;						// 定时器ID
	ANALOGCH_STATE nStatus ;				// 自定义通道状态
} ANALOGCH_STRUCT;

// IP通道信息结构体
typedef struct{
	int	  nChId;						// 通道号
	int	  nLinkToChId;					// 连接目标通道号
	int   nDirection;					// 呼叫方向
	char  szCallerId[MAX_TELNUM_LEN];	// 存放主叫号码
	char  szCalleeId[MAX_TELNUM_LEN];	// 存放被叫号码
	char  szPhoneNumBuf[MAX_TELNUM_LEN];// 电话号码存储缓冲
	int   nPhoNumLen;					// 电话号码长度,判断是否要追加号码标志
	int   nTimer;						// 定时器ID
	unsigned long ulCodecType;			// 编码代码
	IPCH_STATE nStatus;					// 自定义通道状态
} IPCH_STRUCT;

// 座席通道信息结构体
typedef struct{
	int	  nChId;						// 通道号						
	int	  nLinkToChId;					// 连接目标通道号
	int   nSaveSubmiteCh;				// 保存原通话方的通道号
	BOOL  bPressFlag;				    // 拍叉簧标志 TRUE:排下 FALSE:未排下
	BOOL  bSubmiteChHookFlag;		    // 判断原通话方是否挂机标志  TRUE:已挂机  FALSE:未挂机
	char  szCallerId[MAX_TELNUM_LEN];	// 存放主叫号码
	char  szCalleeId[MAX_TELNUM_LEN];	// 存放被叫号码
	char  szPhoneNumBuf[MAX_TELNUM_LEN];// 电话号码存储缓冲
	char  szStationNum[STATION_TELNUM_LEN];	// 分机号码
	int	  nTimer;						// 超时定时器
	STATIONCH_STATE	nStatus;			// 自定义通道状态
} STATIONCH_STRUCT;

typedef struct{
	int  nDTMF;							// 按键码 
	char  szAddress[256];				// IP地址
}IP_ADDRESS;

/////////////////////////////////////////////////////////////////////////////
// CPBXDlg dialog

class CPBXDlg : public CDialog
{
private:
	void InitLab();
	void ReadIPAddress();
	void ProtocalType();
	int  m_nTotalCh;							// 总通道数
	int  m_nTotalAnalogCh;						// 模拟通道数
	int  m_nTotalIpCh;							// IP通道数
	int  m_nTotalStationCh;						// 座席通道数
	int  m_nLogNum;								// 日志数
	int	 m_nIPProtocol;							// IP使用的协议类型, 0 代表 H323, 1代表 SIP

	ANALOGCH_STRUCT	 m_AnalogCh[MAX_CHANNEL_NUM];	// 模拟通道信息结构数组
	IPCH_STRUCT		 m_IpCh[MAX_CHANNEL_NUM];		// IP通道信息结构数组
	STATIONCH_STRUCT m_StationCh[MAX_CHANNEL_NUM];	// 座机通道信息结构数组

	IP_ADDRESS		 m_nIPAddress[256];			// IP电话地址簿

	BOOL InitCtiSystem();						// 初始化板卡
	void InitAllChannel();						// 初始化三类通道
					
	void InitStationChListCtrl();				// 初始化座席通道列表控件			
	void InitAnalogChListCtrl();				// 初始化外线模拟通道列表控件
	void InitIpChListCtrl();					// 初始化外线IP通道列表控件
	void InitLogListCtrl();						// 初始化日志列表控件

	void UpdateStationChListCtrl(int nIndex);		// 更新座席通道列表控件	
	void UpdateAnalogChListCtrl(int nIndex);		// 更新外线模拟通道列表控件
	void UpdateIpChListCtrl(int nIndex);		// 更新外线IP通道列表控件
	
	void StationProc(UINT event, int nIndex, LPARAM lParam);	// 座席通道状态转换函数
	void AnalogProc(UINT event, int nIndex, LPARAM lParam);		// 外线模拟通道状态转换函数
	void IpProc(UINT event, int nIndex, LPARAM lParam);			// 外线IP通道状态转换函数

	int  FindIndexByStationChId(int nChId);		// 根据座席通道号获取索引值	
	int  FindIndexByAnalogChId(int nChId);		// 根据外线模拟通道号获取索引值	
	int  FindIndexByIpChId(int nChId);			// 根据外线IP通道号获取索引值	


	void AppErrorHandler(int nChId);							// 获取错误信息
	void LogToList(LogType nType, int nChId, char *szFmt, ...);	// 日志添加函数
// Construction
public:
	CPBXDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CPBXDlg)
	enum { IDD = IDD_PBX_DIALOG };
	CListCtrl	m_StationChList;
	CListCtrl	m_AnalogChList;
	CListCtrl	m_IpChList;
	CListCtrl	m_LogList;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CPBXDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CPBXDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnDestroy();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

extern void SetEngWinLab(CDialog* pDlg,int itemnum,CString strin);
extern DWORD	g_dwLanguageConversion;
extern DWORD	g_dwCHINESE_SIMPLIFIED;

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_PBXDLG_H__099E383F_080A_40B0_9C10_915109094E2C__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -