📄 d300.cpp
字号:
get_system_datetime(sdatetime);
strcpy(Channel[cn-1].ServerLog.start_time,sdatetime);
strcpy(Channel[cn-1].ServerLog.ani,Channel[cn-1].ani);
strcpy(Channel[cn-1].ServerLog.result,"受理成功");
put_event_to_board(cn, wel_play);
break;
case ani_invalid://主叫无效
switch_thread(cn, _timeout,tm_anirefuse);
break;
case wel_play: //欢迎提示
Channel[cn-1].Main.cur_st = wel_play;
play_voc(cn,"欢迎提示");
return 0;
case vm_1_play: //语音菜单(vm_1)
set_singleinput_io(cn, &SGIPT_io_vm1);
switch_thread(cn, _singleinput, sgipt_start);
ChnPrintf(cn, "_USER","选择服务");
play_voc(cn,"选择服务");
return 0;
case cmd0_hf: //话费查询
Channel[cn-1].Main.cur_st = hf_play;
ChnPrintf(cn, "_USER","话费查询");
play_voc(cn, "话费查询");
set_singleinput_io(cn, &SGIPT_io_hf);
switch_thread(cn, _singleinput, sgipt_start);
break;
case cmd0_xd: //详单查询
Channel[cn-1].Main.cur_st = hf_play;
ChnPrintf(cn, "_USER","详单查询");
play_voc(cn, "详单查询");
set_singleinput_io(cn, &SGIPT_io_xd);
switch_thread(cn, _singleinput, sgipt_start);
break;
case cmd0_qf: //欠费查询
strcpy(Channel[cn-1].Main.UserOp, Query_QF);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_QF);
ChnPrintf(cn, "_USER","欠费查询");
put_event_to_board(cn,qry_data);
break;
case cmd0_ad: //电信宣传
Channel[cn-1].Main.cur_st = ad_play;
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_HELP);
ChnPrintf(cn, "_USER","了解业务");
play_voc(cn, "电信宣传");
break;
case ad_asknext: //下一步
set_singleinput_io(cn, &SGIPT_io_adover);
switch_thread(cn, _singleinput, sgipt_start);
play_voc(cn,"往下一步");
break;
case cmd1_qry_djdy:
//单机单月话费
strcpy(Channel[cn-1].Main.UserOp, Query_DJDY);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_DJDY);
ChnPrintf(cn, "_USER","单机单月话费");
put_event_to_board(cn,qry_hint); //不再播放提示
break;
case cmd1_qry_tshou:
//托收用户话费
strcpy(Channel[cn-1].Main.UserOp, Query_TSHOU);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_TSHOU);
ChnPrintf(cn, "_USER","托收用户话费");
put_event_to_board(cn,qry_hint); //不再播放提示
break;
case cmd2_qry_ctxd:
//长途详单
strcpy(Channel[cn-1].Main.UserOp, Query_CTXD);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_CTXD);
ChnPrintf(cn, "_USER","长途详单查询");
put_event_to_board(cn,qry_hint); //不再播放提示
break;
case cmd2_qry_bdwxd:
//本地网详单
strcpy(Channel[cn-1].Main.UserOp, Query_BDWXD);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_BDWXD);
ChnPrintf(cn, "_USER","本地网详单查询");
put_event_to_board(cn,qry_hint); //不再播放提示
break;
case cmd2_qry_168xd:
//声讯详单
strcpy(Channel[cn-1].Main.UserOp, Query_168XD);
strcpy(Channel[cn-1].ServerLog.last_demand, Demand_168XD);
ChnPrintf(cn, "_USER","声讯详单查询");
put_event_to_board(cn,qry_hint);
break;
case qry_hint:
//查询前提示
Channel[cn-1].Main.cur_st = qry_hint;
//play_query_hint(cn);
ChnPrintf(cn, "_STATE","等待用户输入月份....");
switch_thread(cn, _monthinput, mth_start);
break;
case qry_data: //数据库查询
Channel[cn-1].Main.cur_st = qry_data;
Channel[cn-1].Main.play_sysbusy_over = false;
Channel[cn-1].Main.query_data_ok = false;
play_voc(cn, "正在查询");
System.start = clock();
//SysPrintf("query begin at %3.2f seconds", System.start);
post_retrieve_command(cn); //提交查询,而后启动超时监控
start_timing(cn,MaxDataQueryTime,qry_timeout);
break;
case qry_ok: //查询结束
System.finish = clock();
System.duration = (double)(System.finish - System.start) / CLOCKS_PER_SEC;
//SysPrintf( "query using %4.3f seconds\n", System.duration );
SysPrintf("通道%d查询完毕!",cn);
stop_timing(cn);
Channel[cn-1].Main.query_data_ok = true;
//同步语音播放和数据查询
if (Channel[cn-1].Main.query_data_ok ==true &&
Channel[cn-1].Main.play_sysbusy_over==true){
Channel[cn-1].Main.cur_st = play_result;
switch_thread(cn, _multiplay, mply_start);
}
break;
case qry_timeout:
//查询超时
if(Channel[cn-1].Main.cur_st == qry_data){
SysPrintf("查询超时!");
switch_thread(cn,_timeout, tm_systmout);
}
break;
} // end switch (cstp->cst_event)
break; // break case TDX_CST
case TDX_GETDIG:
break;
case TDX_ERROR:
SysPrintf("通道%d播放语音出错:%s",cn, ATDV_LASTERR(Channel[cn-1].voc));
break;
case TDX_PLAY:
switch (Channel[cn-1].Main.cur_st){
case wel_play: //欢迎提示over
Channel[cn-1].Main.cur_st == vm_1_play;
put_event_to_board(cn, vm_1_play);
break;
case qry_data:
Channel[cn-1].Main.play_sysbusy_over= true;
//同步语音播放和数据查询
if (Channel[cn-1].Main.query_data_ok ==true &&
Channel[cn-1].Main.play_sysbusy_over==true)
{
Channel[cn-1].Main.cur_st = play_result;
switch_thread(cn, _multiplay, mply_start);
}
break;
case ad_play: //电信宣传over
put_event_to_board(cn, ad_asknext);
//set_singleinput_io(cn, &SGIPT_io_adover);
//switch_thread(cn, _singleinput, sgipt_start);
//play_voc(cn,"往下一步");
break;
}
break; // break case TDX_PLAY
case TDX_PLAYTONE:
if (dti_play_tone(cn) == 1) {
//put_event_to_board(cn,ani_recieve);
//put_event_to_board(cn,ani_wait);
// 2秒钟后启动 ani_recieve事件
start_timing(cn,AniWaitTime,ani_recieve);
}
break; // break case TDX_PLAYTONE;
default:
break;
} // end switch(EventType)
return 1;
} //end main_thread_func()
/*************************************************************************
* FUNC: monthinput_thread_func()
*
* 说明: 月份输入线程函数
*
*
************************************************************************/
UINT monthinput_thread_func(int cn)
{
bool myDEBUG = false;
DX_CST * cstp;
int result;
long evt_handle; //事件句柄
int EventType; //事件类型
long dev_handle; //设备句柄
long term;
int count=0;
int ret;
result = Channel[cn-1].wait_result;
evt_handle = Channel[cn-1].evt_handle;
dev_handle = Channel[cn-1].dev_handle;
//获取事件类型
EventType = sr_getevttype(evt_handle);
switch(EventType){
case DTEV_SIG: //DTI 信号事件
check_commu_status(cn, evt_handle);
break; // break case DTEV_SIG
case TDX_CST: //Vocie上的状态事件
if(myDEBUG) SysPrintf("%s: EVENT TYPE: TDX_CST\n",Channel[cn-1].voxname);
cstp=(DX_CST*)sr_getevtdatap(evt_handle);
switch (cstp->cst_event){
case DE_TONEON:
break;
case DE_TONEOFF:
break;
case DE_DIGITS:
break;
case mth_start:
Channel[cn-1].MonthInput.cur_st = mth_start;
put_event_to_board(cn,mth_playmonth);
break;
case mth_playmonth:
clear_read_buffer(cn);
Channel[cn-1].MonthInput.cur_st = mth_playmonth;
play_voc(cn, "输入月份");
break;
case mth_timeout:
switch_thread(cn,_timeout, tm_usertmout);
break;
case mth_check:
Channel[cn-1].MonthInput.cur_st = mth_check;
Channel[cn-1].MonthInput.month = 0;
ret = check_month_digits(cn);
if ( ret > 0 ) { // 有效月份
Channel[cn-1].MonthInput.month = ret;
//WinPrintf("月份%d有数据!",ret);
put_event_to_board(cn, mth_valid);
return 1;
}
if ( ret<0 ) { //无效数字
//WinPrintf("月份数字%s无效!",Channel[cn-1].keybuffer);
put_event_to_board(cn, mth_numerr);
}
if ( ret == 0 ) { //月份无数据
//WinPrintf("月份数字%s有效,但无数据!",Channel[cn-1].keybuffer);
put_event_to_board(cn, mth_nodata);
}
Channel[cn-1].MonthInput.error_input_times++;
if (Channel[cn-1].MonthInput.error_input_times > MaxUserErrorTimes)
{
Channel[cn-1].MonthInput.error_input_times =0;
put_event_to_board(cn, mth_alwayserr);
}
break;
case mth_numerr://月份数字无效
put_event_to_board(cn, mth_playerr);
break;
case mth_nodata://该月无数据
put_event_to_board(cn, mth_playnodata);
break;
case mth_alwayserr:
//多次输入无效
switch_thread(cn,_timeout,tm_alwayserr);
break;
case mth_valid:
//月份有效
switch_thread(cn,_main,qry_data);
break;
case mth_playerr:
//播放月份错
Channel[cn-1].MonthInput.cur_st = mth_playerr;
play_voc(cn, "输入错误");
case mth_playnodata:
//播放没有数据
Channel[cn-1].MonthInput.cur_st = mth_playerr;
play_voc(cn, "没有数据");
} // end switch (cstp->cst_event)
break; // break case TDX_CST
case TDX_GETDIG:
term=ATDX_TERMMSK(Channel[cn-1].voc);
//用户按键
if (term & TM_MAXDTMF){
read_the_key(cn);
switch (Channel[cn-1].MonthInput.cur_st) {
case mth_wait:
if (Channel[cn-1].keynumber >= 2) {
Channel[cn-1].MonthInput.cur_st = mth_check;
put_event_to_board(cn, mth_check);
}
else post_read_command_to_board(cn,2- Channel[cn-1].keynumber);
break;
}
}
//用户超时
if ((term & TM_IDDTIME) ||(term & TM_MAXTIME)){
put_event_to_board(cn,mth_timeout);
}
break; // break case TDX_GETDIG
case TDX_PLAY:
term=ATDX_TERMMSK(Channel[cn-1].voc); //检测播报的终止情况。
switch (Channel[cn-1].MonthInput.cur_st) {
case mth_start:
put_event_to_board(cn,mth_playmonth);
break;
case mth_playmonth:
Channel[cn-1].MonthInput.cur_st = mth_wait;
if (! (term & TM_MAXDTMF)){ // 正常结束
post_read_command_to_board(cn,2);
}else // 按键结束
{
post_read_command_to_board(cn);
}
break;
case mth_playerr:
case mth_playnodata:
Channel[cn-1].MonthInput.cur_st = mth_start;
put_event_to_board(cn, mth_start);
break;
}
if(term & TM_EOD) {
//SysPrintf("%s: Play ended by 全部拨完TM_EOD\n",Channel[cn-1].voxname);
}
if(term & TM_MAXTIME){
//SysPrintf("%s: Play ended by 超出时间TM_MAXTIME\n",Channel[cn-1].voxname);
}
if (term & TM_USRSTOP){
//SysPrintf("%s: Play ended by 用户挂机终止(tm_usrstop)\n",Channel[cn-1].voxname);
}
if (term & TM_MAXDTMF){
//SysPrintf("%s: Play ended by 用户按键终止(tM_maxdtmf)\n",Channel[cn-1].voxname);
}
break; // break case TDX_PLAY
case TDX_PLAYTONE:
break; // break case TDX_PLAYTONE;
default:
break;
} // end switch(EventType)
return 1;
} //end monthinput_thread_func()
/*************************************************************************
* FUNC: timeout_thread_func()
*
* 说明: 超时线程函数(系统逸出线程)
*
*
************************************************************************/
UINT timeout_thread_func(int cn)
{
bool myDEBUG = false;
DX_CST * cstp;
int result;
long evt_handle; //事件句柄
int EventType; //事件类型
long dev_handle; //设备句柄
int count=0;
result = Channel[cn-1].wait_result;
evt_handle = Channel[cn-1].evt_handle;
dev_handle = Channel[cn-1].dev_handle;
EventType = sr_getevttype(evt_handle);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -