📄 pbxdlg.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 + -