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

📄 recsysdlg.cpp

📁 百色电信中继电话录音系统,是对于电话会议接入到本中继系统进行电话录音
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -