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

📄 hfcjfunc.cpp

📁 170话费催交系统
💻 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 + -