📄 recsysdlg.cpp
字号:
m_sqlcompos=(m_sqlcompos+1)%SQLPROC_MAXQUEUE;
//
switch(FtpServer_state) {
case PROCSTATE_WORKING:
{
strcpy(ftpinfo[m_ftpinfopos].filename,orginfo_queue[wParam].rec_filename);
ftpinfo[m_ftpinfopos].groupid=orginfo_queue[wParam].groupid;
FtpProc_pTh->PostThreadMessage(FTP_WANTE,m_ftpinfopos,0);
m_ftpinfopos=(m_ftpinfopos+1)%FTPQUEUE_MAX;
}
break;
case PROCSTATE_WARNING :
case PROCSATAE_FAILD :
case PROCSTATE_NOTSTART :
{
ts.Format("insert into FTP_QUEUE values"
"('%s','%s',%d,0)",curtime,orginfo_queue[wParam].rec_filename
,orginfo_queue[wParam].groupid);
sprintf(Sql_Command[m_sqlcompos],"%s",ts);
SqlProc_pTh->PostThreadMessage(WM_EXESQL,m_sqlcompos,0);
m_sqlcompos=(m_sqlcompos+1)%SQLPROC_MAXQUEUE;
ts.Format("%s因FTP服务器失效,文件:%s 暂存本地!",curtime,orginfo_queue[wParam].rec_filename);
m_trunkmsglist.InsertString(0,ts);
}
break;
default: break;
}
TrunkProc_state=PROCSTATE_WORKING;
}
break;
default:
{
ts.Format("(%s)PromMsg 收到未知信息:%d",orginfo_queue[wParam].trkerrmsg,lParam);
m_trunkmsglist.InsertString(0,ts);
WriteLog(ts);
}
}
return 0;
}
void CRecsysDlg::InitialList()
{
static int ColumnWidth[6] = {60, 80, 60, 90,90, 300};
LV_COLUMN lvc;
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.iSubItem = 0;
lvc.pszText = "中继通道" ;
lvc.cx = ColumnWidth[0];
m_trunkstatelist.InsertColumn(0,&lvc);
lvc.iSubItem = 1;
lvc.pszText = "通道状态";
lvc.cx = ColumnWidth[1];
m_trunkstatelist.InsertColumn(1,&lvc);
lvc.iSubItem = 2;
lvc.pszText = "呼叫类型";
lvc.cx = ColumnWidth[2];
m_trunkstatelist.InsertColumn(2,&lvc);
lvc.iSubItem = 3;
lvc.pszText = "主叫号码";
lvc.cx = ColumnWidth[3];
m_trunkstatelist.InsertColumn(3,&lvc);
lvc.iSubItem = 4;
lvc.pszText = "被叫号码";
lvc.cx = ColumnWidth[4];
m_trunkstatelist.InsertColumn(4,&lvc);
lvc.iSubItem = 5;
lvc.pszText = "出错信息";
lvc.cx = ColumnWidth[5];
m_trunkstatelist.InsertColumn(5,&lvc);
char dig[5];
for(int i=0 ;i<MAXTRUNK;i++)
{
m_trunkstatelist.InsertItem(i,_itoa(i,dig,10));
}
}
UINT ScanTrunkProc(LPVOID pParam)
{
int i=0;
int chstate=0; //扫描中继返回值;
int dialrec=0; //拨号返回结构;
int exerec=0; //ssm函数返回值;
long p_orginfo=0;
SYSTEMTIME systime;
int getch=0;
char tempstr[1000];
char tempcallee[30];
char curtime[30];
// ptestsys=new CTestSys;
//************************中继表初始化**************************
CString ts;
char errmsg[255];
Trunkinfor trkinfo[MAXTRUNK];
while(1)
{
int errcount=0;
for(i=0; i<MAXTRUNK; i++)
{
trkinfo[i].EnCalled=FALSE;
trkinfo[i].trunk_state = CHN_IDLE;
if( SsmSetAutoCallDirection(i,true,2)>=0) //设定自动接续
{
trkinfo[i].EnCalled=TRUE;
trkinfo[i].trunk_state = CHN_IDLE;
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,CHN_IDLE);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
else
{
errcount++;
orginfo_queue[p_orginfo].trunkno=i;
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
memset(trkinfo[i].answer_time,0,20);
memset(trkinfo[i].callee,0,20);
memset(trkinfo[i].caller,0,20);
memset(trkinfo[i].callin_time,0,20);
memset(trkinfo[i].clear_time,0,20);
memset(trkinfo[i].rec_filename,0,20);
memset(trkinfo[i].release_resean,0,20);
trkinfo[i].trunkid=i;
trkinfo[i].groupid=0;
trkinfo[i].iscaller=false;
trkinfo[i].EnRecord=false;
trkinfo[i].line_state=-1;
}
if(errcount>MAXTRUNK-4*2)
Sleep(1000);
else break;
}
while(1)
{
long curpos=0;
::InterlockedExchange(&curpos,scan_state);
//中继状态扫描线程,完成话路的接续
GetLocalTime(&systime);
sprintf(curtime,"%04d%02d%02d%02d%02d%02d",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
for(i=0;i<MAXTRUNK;i++)
{
/* if(trkinfo[i].EnCalled==false)
continue;*/
//扫描中继状态,完成话路接续,抛出原始信息
chstate=SsmGetChState(i);
if(chstate==70||chstate==S_CALL_UNAVAILABLE) //电路群复原-结束所有的通话
{
if(trkinfo[i].trunk_state!=CHN_IDLE)
{
if (trkinfo[i].trunk_state==RECORDING&&trkinfo[i].iscaller)
SsmStopRecToFile(i);
trkinfo[i].trunk_state=CHN_IDLE;
trkinfo[trkinfo[i].opch].trunk_state=CHN_IDLE;
//若断断开双方连接失败,则显示出错信息
exerec=SsmStopTalkWith(i,trkinfo[i].opch);
if(exerec==-1)
{
SsmGetLastErrMsg(errmsg);
throwmsg(trkinfo[i],errmsg,p_orginfo);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,WATEANS_REV_OTHMSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
SsmStopTalkWith(i,trkinfo[i].opch);
}
//
strcpy(trkinfo[i].clear_time,curtime);
sprintf(trkinfo[i].release_resean,"%d",chstate);
throwmsg(trkinfo[i],"",p_orginfo);
// p_orginfo=p_orginfo%MAX_QUEUE;
if(trkinfo[i].trunk_state==RECORDING)
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,RECORDING_HUNGUP_Z);
else
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,WATEANS_REV_OTHMSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
}
// else if(chstate==)
switch(trkinfo[i].trunk_state)
{
//***************CHN_IDLE开始********************************************
case CHN_IDLE:
{
if(chstate==S_CALL_PENDING)
{
orginfo_queue[p_orginfo].trunkno=i;
trkinfo[i].iscaller=true;
strcpy(trkinfo[i].callin_time,curtime);
orginfo_queue[p_orginfo].iscaller=true;
strcpy(orginfo_queue[p_orginfo].callin_time,trkinfo[i].callin_time);
if(SsmGetCallerId(i, trkinfo[i].caller)==-1) //得到主叫失败
{
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
continue;
}
strcpy(orginfo_queue[p_orginfo].caller,trkinfo[i].caller);
if(SsmGetPhoNumStr(i, tempcallee)==-1) //得到被叫失败
{
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
continue;
}
strcpy(trkinfo[i].callee,(tempcallee+3)); //吃掉号首
/* if(strcmp(tempcallee,"4140999")==0)
strcpy(trkinfo[i].callee,"2881000");
else if(strcmp(tempcallee,"4140998")==0)
strcpy(trkinfo[i].callee,"2881504");*/
// strcpy(trkinfo[i].callee,(tempcallee));
strcpy(orginfo_queue[p_orginfo].callee,trkinfo[i].callee);
trkinfo[i].EnRecord=IsInCompany(trkinfo[i].caller,trkinfo[i].callee,tempstr,&trkinfo[i].groupid);
sprintf(trkinfo[i].rec_filename,"%s%s_%s_%s.wav",tempstr,trkinfo[i].callin_time,trkinfo[i].caller,trkinfo[i].callee);
orginfo_queue[p_orginfo].groupid=trkinfo[i].groupid;
strcpy(orginfo_queue[p_orginfo].rec_filename,trkinfo[i].rec_filename);
getch=SsmSearchIdleCallOutCh(36,0); //正常程序使用
// getch=SsmSearchIdleCallOutCh(36,0,i);
// getch=30*5+((i%10)*2)%10;
// if(getch>59) getch=(getch+i)%60+30;
SsmSetTxCallerId(getch, trkinfo[i].caller);
if(getch==-1) //寻找可呼出空闲通道失败
{
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_SYS_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
continue;
}
if(SsmAutoDial(getch,trkinfo[i].callee)==-1) //呼出失败
{
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
orginfo_queue[p_orginfo].trunkno=getch;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
continue;
}
// SsmTalkWith(i,getch);
trkinfo[i].opch=getch;
trkinfo[i].trunk_state=CHECK_CHN;
//写被叫中继信息
trkinfo[getch].groupid=trkinfo[i].groupid;;
strcpy(trkinfo[getch].callee,trkinfo[i].callee);
strcpy(trkinfo[getch].caller,trkinfo[i].caller);
strcpy(trkinfo[getch].callin_time,trkinfo[i].callin_time);
strcpy(trkinfo[getch].rec_filename,trkinfo[i].rec_filename);
trkinfo[getch].iscaller=false;
trkinfo[getch].opch=i;
trkinfo[getch].trunk_state=CHECK_CHN;
trkinfo[getch].EnRecord=trkinfo[i].EnRecord;
//抛出主叫信息
orginfo_queue[p_orginfo].trunk_state=CHECK_CHN;
throwmsg(trkinfo[i],"",p_orginfo);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,IDLE_CALLIN);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
else if(S_CALL_STANDBY==chstate) //空闲
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,CHN_IDLE);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
else if(chstate==-1) //检测状态失败
{
// if(trkinfo[i].line_state!=chstate)
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
// continue;
}
else if(chstate==S_CALL_UNAVAILABLE) //不可用
{
// if(trkinfo[i].line_state!=chstate)
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_CHN_NOTUSE);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
// continue;
}
else if(chstate==122) //GRS
// else if(chstate==70) //GRS
{
// if(trkinfo[i].line_state!=chstate)
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
SsmGetLastErrMsg(orginfo_queue[p_orginfo].trkerrmsg);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_CHN_GRS);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
// continue;
}
else if(chstate==121) //RLC
{
// if(trkinfo[i].line_state!=chstate)
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
// continue;
}
else //其他未知状态
{
// if(trkinfo[i].line_state!=chstate)
{
trkinfo[i].line_state=chstate;
orginfo_queue[p_orginfo].trunkno=i;
sprintf(orginfo_queue[p_orginfo].trkerrmsg,"未知状态:%d",chstate);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,SHOW_ERR_MSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
// continue;
}
break;
}
//***************CHN_IDLE结束********************************************
//***************CHECK_CHN开始*******************************************
case CHECK_CHN:
{
if(trkinfo[i].iscaller==false) //被叫
{
trkinfo[i].line_state=chstate;
dialrec=SsmChkAutoDial(i);
if(chstate==7) //本地闭塞,挂起
{
SsmHangup(i);
// SsmHangup(trkinfo[i].opch);
SsmHangup(trkinfo[i].opch);
trkinfo[i].trunk_state=CHN_IDLE;
trkinfo[trkinfo[i].opch].trunk_state=CHN_IDLE;
strcpy(trkinfo[i].clear_time,curtime);
sprintf(trkinfo[i].release_resean,"%d",chstate);
throwmsg(trkinfo[i],"",p_orginfo);
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,CHKCHN_REV_OTHMSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
else if(chstate==0) //被复位
{
SsmHangup(trkinfo[i].opch);
trkinfo[i].trunk_state=CHN_IDLE;
trkinfo[trkinfo[i].opch].trunk_state=CHN_IDLE;
strcpy(trkinfo[i].clear_time,curtime);
sprintf(trkinfo[i].release_resean,"%d",chstate);
throwmsg(trkinfo[i],"",p_orginfo);
// p_orginfo=p_orginfo%MAX_QUEUE;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,CHKCHN_REV_OTHMSG);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
}
switch(dialrec) {
case DIAL_DIALING: //正在拨号
{
throwmsg(trkinfo[i],"",p_orginfo);
// p_orginfo=p_orginfo%MAX_QUEUE;
::PostMessage(HWND(pParam),WM_PROCMSG,p_orginfo,CHKCHN_DIALING);
p_orginfo=(p_orginfo+1)%MAX_QUEUE;
continue;
}
break;
case DIAL_ECHOTONE: //被叫示闲
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -