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

📄 d.cpp

📁 这是个call center的程序,这个行业目前很火,有意想的程序员可以下载
💻 CPP
字号:
#include "stdafx.h"
//#include <windows.h>
//#include <commdlg.h>
//#include <commctrl.h>
//#include <windowsx.h>

#include "D.h"
#include "..\\..\\..\\..\\inc\\NewSig.h"
#include "..\\..\\..\\..\\inc\\tc08a32.h"
#include "resource.h"

extern CListCtrl	m_list;
WORD TotalLine;
long DriverOpenFlag;
LINESTRUCT *Lines;
char VoicePath[100];
char sTmp[128];
HINSTANCE hInst;

//#pragma argsused
BOOL WINAPI yzInitSystem()
{
	int i;
	GetVoicePath();
	DriverOpenFlag = LoadDRV ( );
	if ( DriverOpenFlag ) {
		AfxMessageBox ("Load Driver FAIL");
		return FALSE;
	}

	TotalLine = CheckValidCh();
	if ( EnableCard(TotalLine,1024*8) != (long)0) {
		FreeDRV();
		AfxMessageBox ("Enable Board FAIL");
		return FALSE;
	}
	Lines=new LINESTRUCT[TotalLine];

	Sig_Init(0);

	for(i=0;i<TotalLine;i++)
	{
        Lines[i].nType=CheckChTypeNew(i);
		strcpy(Lines[i].CallerID,"");
		strcpy(Lines[i].Dtmf,"");
		Lines[i].State = CH_FREE;
		Lines[i].nDialStatus=S_NORESULT;
	}

	static int ColumnWidth[60] = {66, 80, 200, 100, 72, 200, 100, 50, 150};
	LV_COLUMN lvc;
	char dig[10];
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	hInst = AfxGetInstanceHandle();

	lvc.iSubItem = 0;
	LoadString(hInst, IDS_CHANNEL_NO, sTmp, 128);
	lvc.pszText = sTmp; 
	lvc.cx = ColumnWidth[0];
	m_list.InsertColumn(0,&lvc);

	lvc.iSubItem = 1;
	LoadString(hInst, IDS_CHANNEL_TYPE, sTmp, 128);
	lvc.pszText = sTmp; 
	lvc.cx = ColumnWidth[1];
	m_list.InsertColumn(1,&lvc);
	
	lvc.iSubItem = 2;
	LoadString(hInst, IDS_FLOW, sTmp, 128);
	lvc.pszText = sTmp; 
	lvc.cx = ColumnWidth[2];
	m_list.InsertColumn(2,&lvc);

	lvc.iSubItem = 3;
	LoadString(hInst, IDS_DIAL_STATUS, sTmp, 128);
	lvc.pszText = sTmp; 
	lvc.cx = ColumnWidth[3];
	m_list.InsertColumn(3,&lvc);

	lvc.iSubItem = 4;
	lvc.pszText = "Dtmf" ;
	lvc.cx = ColumnWidth[4];
	m_list.InsertColumn(4,&lvc);

	LV_ITEM lvi;
	for(i = 0; i < TotalLine; i++)	
	{
		lvi.mask = LVIF_TEXT;
		lvi.iItem = i;
		lvi.iSubItem = 0;
		itoa( i, dig, 10 ) ; 
		lvi.pszText = dig;
		m_list.InsertItem(&lvi);
	}
	for(i=0;i<TotalLine;i++)
	{
		if(Lines[i].nType==CHTYPE_TRUNK)
		{
			LoadString(hInst, IDS_TRUNK, sTmp, 128);
			lvc.pszText = sTmp; 
			m_list.SetItemText( i, 1, sTmp);
		}
		else if(Lines[i].nType==CHTYPE_USER)
		{
			LoadString(hInst, IDS_USER, sTmp, 128);
			lvc.pszText = sTmp; 
			m_list.SetItemText( i, 1, sTmp);
		}
		else if(Lines[i].nType==CHTYPE_RECORD)
		{
			LoadString(hInst, IDS_RECORD, sTmp, 128);
			lvc.pszText = sTmp; 
			m_list.SetItemText( i, 1, sTmp);
		}
		else  if(Lines[i].nType==CHTYPE_EMPTY)
		{
			LoadString(hInst, IDS_EMPTY, sTmp, 128);
			lvc.pszText = sTmp; 
			m_list.SetItemText( i, 1, sTmp);
		}
	}
	return TRUE;
}
void WINAPI yzExitSystem()
{
	for(int i = 0; i < TotalLine; i++)
	{
		if(Lines[i].nType==CHTYPE_TRUNK)
		{
			StartSigCheck(i);
			HangUp(i);
			Sig_ResetCheck(i);
		}
	}
	DisableCard();
	FreeDRV();
	delete Lines;
}
void WINAPI yzDrawState( int trkno )
{	
	char state[100]; ;
	char tmpstr[100] ;
	switch( Lines[trkno].State ) 
	{
	case CH_FREE:		
		LoadString(hInst, IDS_CH_FREE, state, 100);
		break ;
	case CH_CONNECT:
		LoadString(hInst, IDS_CH_CONNECTED, state, 100);
		break;
	case CH_CALLOUT:
		LoadString(hInst, IDS_CH_CALLOUT, state, 100);
		break;
	case CH_CHECKDIALRESULT:
		LoadString(hInst, IDS_CH_CHECKDIALRESULT, state, 100);
		break;
	case CH_WAIT:
		LoadString(hInst, IDS_CH_WAIT, state, 100);
		break;
	}
	
	m_list.GetItemText( trkno, 2, tmpstr, 100 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		m_list.SetItemText( trkno, 2, state );
	
	switch(Lines[trkno].nDialStatus)
	{
	case S_NORESULT:
		strcpy(state,"No Result");
		break;
	case S_BUSY:
		strcpy(state,"Busy");
		break;
	case S_NOBODY:
		strcpy(state,"No Body");
		break;
	case S_NODIALTONE:
		strcpy(state,"No Dialtone");
		break;
	case S_NOSIGNAL:
		strcpy(state,"No Signal");
		break;
	case S_CONNECT:
		strcpy(state,"Connected");
		break;
	}

	m_list.GetItemText( trkno, 3, tmpstr, 100 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		m_list.SetItemText( trkno, 3, state );

	strcpy(state,Lines[trkno].Dtmf);
	m_list.GetItemText( trkno, 4, tmpstr, 100 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		m_list.SetItemText( trkno, 4, state );
}
void yzResetChannel(int channelID)
{
	if(Lines[channelID].nType==CHTYPE_TRUNK)
	{
		StartSigCheck(channelID);
		HangUp(channelID);
		Sig_ResetCheck(channelID);
	}
	Lines[channelID].Dtmf[0]=0;
	Lines[channelID].CallerID[0]=0;
	Lines[channelID].nDialStatus=S_NORESULT;
	Lines[channelID].State=CH_WAIT;
}
char yzConvertDtmf(int ch)
{
	char c;

	switch(ch)
    {
		case 10:
			c = '0';
			break;
		case 11:
			c = '*';
			break;
		case 12:
			c = '#';
			break;
        case 13:
        case 14:
        case 15:
            c=ch-13+'a';
            break;
        case 0:
            c='d';
            break;
		default:
			c = ch + '0';	//transfer into ASCII code
			break;
	}
	return c;
}

void WINAPI yzDoWork()
{
	char FileName[100];
    short int code;
	int len;
	PUSH_PLAY();
	FeedSigFunc();
	static int a=0;
    for(int i=0;i<TotalLine;i++)
    {
        yzDrawState(i);
        switch(Lines[i].State)
        {
		case CH_FREE:
			break;
		case CH_WAIT:
			a++;
			if(a>50) 
			{
				a=0;
				Lines[i].State=CH_CALLOUT;
			}
			break;
		case CH_CALLOUT:
			OffHook(i);
			Sig_StartDial(i,Lines[i].Num,Lines[i].PreNum,Lines[i].Mode);
			Lines[i].State=CH_CHECKDIALRESULT;
			break;
		case CH_CHECKDIALRESULT:
			Lines[i].nDialStatus=Sig_CheckDial(i);
			switch(Lines[i].nDialStatus)
			{
			case S_NORESULT:
				break;
			case S_CONNECT:
				strcpy(FileName,VoicePath);
				strcat(FileName,"bank.001");
				InitDtmfBuf(i);
				StartPlayFile(i,FileName,0L);
				Lines[i].State = CH_CONNECT;
				break;
			case S_NOBODY:
			case S_BUSY:
			case S_NOSIGNAL:
			case S_NODIALTONE:
				yzResetChannel(i);
				break;
			}
			break;
		case CH_CONNECT:
			len=strlen(Lines[i].Dtmf);
			while((code=GetDtmfCode(i))!=-1)
			{
				Lines[i].Dtmf[len++]=yzConvertDtmf(code);
			}
			Lines[i].Dtmf[len]=0;
			break;
		default:
			break;
		}//end switch
		if(Lines[i].nType==CHTYPE_TRUNK && (Lines[i].State==CH_CONNECT))
		{
			//if( Sig_CheckBusy(i) )
			if( Sig_CheckBusy(i) || CheckPlayEnd(i) )
			{
				StopPlayFile(i);
				yzResetChannel(i);
			}
		}
	}//end for
}

void GetVoicePath()
{
	char FileName[100];
	GetWindowsDirectory(FileName,100);
	strcat(FileName,"\\tc08a-v.ini");
	GetPrivateProfileString("SYSTEM","InstallDir",NULL,VoicePath,100,FileName);
	strcat(VoicePath,"voc\\");
}

void yzCallOut(int chan,char* PreNum,char* DialNum,int mode)
{
	strcpy(Lines[chan].PreNum,PreNum);
	strcpy(Lines[chan].Num,DialNum);
	Lines[chan].Mode=mode;
	Lines[chan].State=CH_CALLOUT;
}

void yzHangup(int channelID)
{
	StartSigCheck(channelID);
	HangUp(channelID);
	Sig_ResetCheck(channelID);

	Lines[channelID].Dtmf[0]=0;
	Lines[channelID].CallerID[0]=0;
	Lines[channelID].nDialStatus=S_NORESULT;
	Lines[channelID].State=CH_FREE;
}

bool yzIsTrkChnl(int channelID)
{
	if (CHTYPE_TRUNK == Lines[channelID].nType)
		return true;
	else
		return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -