📄 hfcjfunc.cpp
字号:
#include "hfunction.h"
/************************************************************
* NAME: WinPrintf()
* DESCRIPTION: Popup error message box for cases where
* no child windows exist.
************************************************************/
void WinPrintf(char *szFormat, ...)
{
char szBuffer[256];
va_list pArguments;
HWND hWnd;
hWnd=AfxGetMainWnd()->m_hWnd;
va_start(pArguments,szFormat);
vsprintf(szBuffer, szFormat, pArguments);
MessageBox(hWnd, szBuffer, "信息窗口", MB_SYSTEMMODAL | MB_OK);
}
/************************************************************
* NAME: Process(unsigned long ehandle)
* DESCRIPTION: 催缴工作线程中调用到的处理函数
************************************************************/
UINT Process(unsigned long ehandle)
{
DX_CST *cstp;
int eventdev;
int event;
int channum;
int mode=EV_ASYNC;
eventdev = sr_getevtdev(ehandle);
event = sr_getevttype(ehandle);
sr_getparm(eventdev,SR_USERCONTEXT,&channum);
switch(event) {
case TDX_PLAY:
dxinfo[channum].playflag=0;
if(Digit_setonhook(channum) == -1){
TRACE("set onhook in %d channal error", channum);
}
break;
case TDX_SETHOOK:
cstp=(DX_CST *)sr_getevtdatap(ehandle);
switch(cstp->cst_event){
case DX_ONHOOK:
//挂机后,改写信号灯状态
break;
case DX_OFFHOOK:
if(Dial_telephone(channum) == -1) { //拨号
if(Digit_setonhook(channum) == -1){
//说明此通道不可用
TRACE("set onhook in %d channal error", channum);
}
}
break;
}
break;
case TDX_CALLP:
switch (ATDX_CPTERM(dxinfo[channum].chdev)) {
case CR_BUSY:
TRACE(" In Channal %d Call complete: LineBusy ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_CEPT:
TRACE(" In Channal %d Call complete: Operator Intercept ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_CNCT:
switch(ATDX_CONNTYPE(dxinfo[channum].chdev)) {
case CON_CAD:
TRACE(" In Channal %d Call complete: Connection due to cadence break ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CON_LPC:
TRACE(" In Channal %d Call complete: Connection due to loop current drop ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CON_PVD:
telecount.success_flag=1;
TRACE(" In Channal %d Call complete: Connection due to Positive Voice Detection ", channum);
Play_value(channum); //播放催缴语音
break;
case CON_PAMD:
TRACE(" In Channal %d Call complete: Connection due to Positive Answering Machine Detection ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
}
break;
case CR_ERROR:
TRACE(" In Channal %d Call complete: Error condition ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_FAXTONE:
TRACE(" In Channal %d Call complete: FAX tone detected ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_NOANS:
TRACE(" In Channal %d Call complete: No answer ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_NODIALTONE:
TRACE(" In Channal %d Call complete: No dialtone detected ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_NORB:
TRACE(" In Channal %d Call complete: No ringback detected ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
case CR_STOPD:
TRACE(" In Channal %d Call complete: User abort ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
default:
TRACE(" In Channal %d Call complete: Other event accured ", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
}
telecount.all_count=telecount.all_count+1;
if (telecount.success_flag==1) {
telecount.success_count=telecount.success_count+1;
telecount.success_flag=0;
}
else
{
telecount.failure_count=telecount.failure_count+1;
}
TRACE("the success cuijiao number is %ld , the all cuijiao number is %ld ",telecount.success_count,telecount.all_count);
break;
default:
TRACE(" Other Event occured in channal %d\n", channum);
if (sr_putevt(dxinfo[channum].chdev,TDX_PLAY,sizeof(DX_IOTT),dxinfo[channum].iott_cjvalue,0) == -1){
TRACE("sr_putevt failed in channal %d", channum);
}
break;
}
return(0);
}
/************************************************************
* NAME: Dial_telephone(int channum)
* DESCRIPTION: 拨号处理函数
************************************************************/
int Dial_telephone(int channum)
{
DX_CAP cap;
int mode = EV_ASYNC;
int index;
dx_clrcap(&cap);
TRACE(" Dialing %s with PerfectCall in Channal %d", teleinfo[channum].num, channum);
mode |= DX_CALLP;
// get parameters for PerfectCall
cap.ca_dtn_pres = dxinfo[channum].callp.ca_dtn_pres;
cap.ca_dtn_npres = dxinfo[channum].callp.ca_dtn_npres;
cap.ca_dtn_deboff = dxinfo[channum].callp.ca_dtn_deboff;
cap.ca_noanswer = dxinfo[channum].callp.ca_noanswer;
cap.ca_intflg = dxinfo[channum].callp.ca_intflg;
// initialize tones for PerfectCall
for (index = 0; index < MAX_TONES; index++) {
dx_chgfreq( dxinfo[channum].tmplts[index].tid,
dxinfo[channum].tmplts[index].freq1.freq,
dxinfo[channum].tmplts[index].freq1.deviation,
dxinfo[channum].tmplts[index].freq2.freq,
dxinfo[channum].tmplts[index].freq2.deviation);
dx_chgdur( dxinfo[channum].tmplts[index].tid,
dxinfo[channum].tmplts[index].on.time,
dxinfo[channum].tmplts[index].on.deviation,
dxinfo[channum].tmplts[index].off.time,
dxinfo[channum].tmplts[index].off.deviation);
dx_chgrepcnt(dxinfo[channum].tmplts[index].tid,
dxinfo[channum].tmplts[index].repcnt);
}
if (dx_deltones(dxinfo[channum].chdev) == -1) {
TRACE(" Del tones in Channal %d error", channum);
return(-1);
}
if (dx_initcallp(dxinfo[channum].chdev) == -1) {
TRACE(" Initcallp in Channal %d error", channum);
return(-1);
}
if (dx_dial(dxinfo[channum].chdev, teleinfo[channum].num, &cap, mode) == -1) {
TRACE(" Dialing %s Error in Channal %d", teleinfo[channum].num, channum);
return(-1);
}
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -