16,748
社区成员
发帖
与我相关
我的任务
分享
procedure dowork(channelno:integer);//业务流程
var
dialnum:pchar;
result:integer;
code:integer;
tel :string;
begin
case channel[channelno].step of
0:begin
if (channel[channelno].channeltype =trunk) and ( channel[channelno].state=free) then
begin
if main.telebox.Items.Count>=1 then
begin
channel[channelno].dtmf :=main.telebox.Items.Strings[0];
main.telebox.Items.Delete(0);//从表中取走号码,防止另外一个通道也拨同一个号码
main.stategrid.cells[3,channelno+1]:='拨打电话:'+channel[channelno].dtmf;
startsigcheck(channelno);//开始新的信号音检测
dialnum:=pchar(channel[channelno].dtmf );
offhook(channelno);//摘机
channel[channelno].state:=occupy;
starttimer(channelno,4);//开启计时器
sig_startdial(channelno,dialnum,',,',0);//外拨
channel[channelno].step:=100;
end
end
end;
100:begin
if ElapseTime(channelno,4)>=2000 then //超时处理
begin
main.telebox.Items.Add(channel[channelno].dtmf);//把号码加入到电话表中,留待下次呼出
resetchannel(channelno);//复位通道
end;
result:=sig_checkdial(channelno);
case result of
//S_NORESULT:;//还没有检测到结果
S_BUSY,S_NOBODY,S_NOSIGNAL://遇忙、没人接听,没有信号
begin
main.telebox.Items.Add(channel[channelno].dtmf);//把号码加入到电话表中,留待下次呼出
resetchannel(channelno);//复位通道
end;
S_CONNECT:begin
tel := channel[channelno].dtmf;
initdtmfbuf(channelno); //清空掉电话号码信息
main.stategrid.cells[3,channelno+1]:=main.stategrid.cells[3,channelno+1]+'..对方摘机,开始放音';
startplayfile(channelno,'voc\111.pcm',0);//文件放音
channel[channelno].step:=101;
end
end// end of case
end;
101:begin
if checkplayend(channelno) then //本程序判断呼叫成功的条件是声音放完完毕
begin
code := GetDtmfCode(channelno); //将按键存入
main.qry.First;
while not main.qry.Eof do
begin
if main.qry.FieldByName('Mobile').AsString = tel then
begin
FormRandom.qryS.Edit;
if code = 1 then
main.qry.FieldByName('state').AsString := '同意
else
main.qry.FieldByName('state').AsString := '没时间';
main.qry.Post;
end;
main.qry.Next;
end;
resetchannel(channelno);
end;
end
end;// end of case
end;//end of dowork