📄 pbxdlg.cpp
字号:
m_StationCh[nIndex].nLinkToChId = lParam;
m_StationCh[nIndex].bPressFlag = TRUE;
int i = FindIndexByStationChId(m_StationCh[nIndex].nLinkToChId);
strcpy(m_StationCh[nIndex].szCallerId, m_StationCh[i].szStationNum);
// 发送E_US_SEIZURE_ACK_IDLE
SendMessage(WM_USER+E_US_SEIZURE_ACK_IDLE, lParam, m_StationCh[nIndex].nChId);
}
else
{
// 发送E_US_SEIZURE_ACK_BUSY
SendMessage(WM_USER+E_US_SEIZURE_ACK_BUSY, lParam, m_StationCh[nIndex].nChId);
}
break;
}
/*+++++++++自定义模拟通道消息+++++++++*/
case E_TK_SEIZURE_TK_ACK_IDLE: // 成功占用外线
{
// 送拨号音
if(SsmSendTone(m_StationCh[nIndex].nChId, 0) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 启动T3:9秒
if( (m_StationCh[nIndex].nTimer = SsmStartTimer(9000, 1)) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nLinkToChId =lParam;
m_StationCh[nIndex].nStatus = STATION_DIALOUT_WITH_ANALOG;
break;
}
case E_TK_SEIZURE_TK_ACK_BUSY: // 占用外线失败
{
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_TK_DIAL_OK:
{
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放回铃音
if(SsmSendTone(m_StationCh[nIndex].nChId, 2) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 获取被叫号码
if (SsmGetDtmfStr(m_StationCh[nIndex].nChId,m_StationCh[nIndex].szCalleeId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_REMOTE_ANALOG_PICKUP;
break;
}
case E_TK_DIAL_FAIL:
{
// 检测是否拨号音
nToneType = 0;
nToneChResult = SsmChkSendTone(m_StationCh[nIndex].nChId, &nToneType);
if(nToneChResult != -1)
{
if(nToneChResult == 1)
{
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
}
}
else
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_TK_REMOTE_NOANSWER: // 外线无人应答
{
// 停回铃音
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_TK_REMOTE_PICKUP: // 远程摘机
{
switch(m_StationCh[nIndex].nStatus)
{
case STATION_DIALOUT_WITH_ANALOG:
{
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 连接座席与外线的总线
if(SsmTalkWith(m_StationCh[nIndex].nChId, m_StationCh[nIndex].nLinkToChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_TALKING;
break;
}
case STATION_WAIT_REMOTE_ANALOG_PICKUP:
{
// 停回铃音
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 连接总线
if(SsmTalkWith(m_StationCh[nIndex].nChId, m_StationCh[nIndex].nLinkToChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_TALKING;
break;
}
default:
break;
}
// 获取被叫号码
if (SsmGetDtmfStr(m_StationCh[nIndex].nChId,m_StationCh[nIndex].szCalleeId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
break;
}
/*+++++++++自定义IP通道消息+++++++*/
case E_IP_SEIZURE_IP_ACK_IDLE: // 成功占用IP通道
{
// 送拨号音
if(SsmSendTone(m_StationCh[nIndex].nChId, 0) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 启动T3:9秒
if( (m_StationCh[nIndex].nTimer = SsmStartTimer(9000, 1)) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nLinkToChId =lParam;
m_StationCh[nIndex].nStatus = STATION_DIALOUT_WITH_IP;
break;
}
case E_IP_SEIZURE_IP_ACK_BUSY: // 占用IP通道失败
{
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_IP_DIAL_OK:
{
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放回铃音
if(SsmSendTone(m_StationCh[nIndex].nChId, 2) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 获取被叫号码
if (SsmGetDtmfStr(m_StationCh[nIndex].nChId,m_StationCh[nIndex].szCalleeId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_REMOTE_IP_PICKUP;
break;
}
case E_IP_DIAL_FAIL:
{
// 检测是否拨号音
nToneType = 0;
nToneChResult = SsmChkSendTone(m_StationCh[nIndex].nChId, &nToneType);
if(nToneChResult != -1)
{
if(nToneChResult == 1)
{
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
}
}
else
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_IP_REMOTE_NOANSWER: // 外线无人应答
{
// 停回铃音
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 放忙音
if(SsmSendTone(m_StationCh[nIndex].nChId, 1) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case E_IP_REMOTE_PICKUP: // 远程摘机
{
switch(m_StationCh[nIndex].nStatus)
{
case STATION_DIALOUT_WITH_IP:
{
// 关闭T3
if(SsmStopTimer(m_StationCh[nIndex].nTimer) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 连接座席与外线的总线
if(SsmTalkWith(m_StationCh[nIndex].nChId, m_StationCh[nIndex].nLinkToChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_TALKING;
break;
}
case STATION_WAIT_REMOTE_IP_PICKUP:
{
// 停回铃音
if(SsmStopSendTone(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 连接总线
if(SsmTalkWith(m_StationCh[nIndex].nChId, m_StationCh[nIndex].nLinkToChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_TALKING;
break;
}
default:
break;
}
// 获取被叫号码
if (SsmGetDtmfStr(m_StationCh[nIndex].nChId, m_StationCh[nIndex].szCalleeId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
break;
}
/*+++++++++自定义公共消息+++++++++*/
case E_MSG_RELEASE:
{
switch(m_StationCh[nIndex].nStatus)
{
case STATION_TALKING:
{
// 放催挂音
if(SsmSendTone(m_StationCh[nIndex].nChId, 3) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case STATION_F_WAIT_TALK:
{
// 停背景音
nPlayResult = SsmCheckPlay(m_StationCh[nIndex].nChId);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(SsmStopPlayFile(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
}
}
else
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
// 连接方挂机,放催挂音
if(SsmSendTone(m_StationCh[nIndex].nChId, 3) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_WAIT_HANGUP;
break;
}
case STATION_F_TALKING:
{
// 放催挂音
if(SsmSendTone(m_StationCh[nIndex].nChId, 3) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nLinkToChId = -1;
m_StationCh[nIndex].nStatus = STATION_F_OPERATE;
break;
}
default:
break;
}
break;
}
case E_MSG_FLASH:
{
GetCurrentDirectory(MAX_PATH, szVoicePath);
strcat(szVoicePath, "\\DemoVoc\\bgmusic.wav");
// 放背景音乐
if(SsmPlayFile(m_StationCh[nIndex].nChId, szVoicePath, -1, 0, 0xffffffff) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_F_WAIT_TALK;
break;
}
case E_MSG_CONNECT:
{
m_StationCh[nIndex].nLinkToChId = lParam;
// 停背景音
nPlayResult = SsmCheckPlay(m_StationCh[nIndex].nChId);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(SsmStopPlayFile(m_StationCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
}
}
else
{
AppErrorHandler(m_StationCh[nIndex].nChId);
}
m_StationCh[nIndex].nStatus = STATION_TALKING;
break;
}
case E_MSG_HANGUP:
{
m_StationCh[nIndex].bSubmiteChHookFlag = TRUE; // 原通话方已挂机
break;
}
default:
break;
}
}
void CPBXDlg::AnalogProc(UINT event, int nIndex, LPARAM lParam)
{
CString cString;
DWORD dwDtmfLen; // 收到DTMF码的长度
UCHAR dwDtmfNum; // 收到DTMF码
char szVoicePath[MAX_PATH]; // 声音文件目录
DWORD nChState; // 模拟通道当前状态
int nPlayResult; // 存放SsmCheckPlay的返回值
switch(event)
{
/*+++++++++驱动消息+++++++++*/
case E_CHG_ChState:
nChState = lParam & 0xffff;
switch(m_AnalogCh[nIndex].nStatus)
{
case ANALOG_IDLE:
if(nChState == S_CALL_RINGING)
{
//摘机
if(SsmPickup(m_AnalogCh[nIndex].nChId) == -1)
{
AppErrorHandler(m_AnalogCh[nIndex].nChId);
}
//获取主叫号码作为显示用,没有在流程图上表示出来
if(SsmGetCallerId(m_AnalogCh[nIndex].nChId, m_AnalogCh[nIndex].szCallerId) == -1)
{
AppErrorHandler(m_AnalogCh[nIndex].nChId);
}
m_AnalogCh[nIndex].nDirection = 1;
m_AnalogCh[nIndex].nStatus = ANALOG_WAIT_ACTUAL_PICKUP;
cString.LoadString(IDS_PBX35);
LogToList(LOGTYPE_INFORMATION, m_AnalogCh[nIndex].nChId, (LPTSTR)(LPCTSTR)cString,m_AnalogCh[nIndex].nChId, m_AnalogCh[nIndex].szCallerId);
}
break;
case ANALOG_WAIT_ACTUAL_PICKUP:
if(nChState == S_CALL_TALKING) //放欢迎提示音乐
{
GetCurrentDir
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -