📄 djss1board.cpp
字号:
// DjSS1Board.cpp: implementation of the CDjSS1Board class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DjTest.h"
#include "DjSS1Board.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDjSS1Board * g_pDjSS1Board = NULL;
CDjSS1Board::CDjSS1Board()
{
m_bRun = false;
m_bOutDial = false;
m_bShow = true;
g_pDjSS1Board = this;
InitializeCriticalSection(&m_ShowCriticalSection);
}
CDjSS1Board::~CDjSS1Board()
{
DJSys_DisableCard();
DeleteCriticalSection(&m_ShowCriticalSection);
}
DWORD WINAPI CDjSS1Board::DialThread(LPVOID lpVoid)
{
CDjSS1Board * pDjSS1Board = (CDjSS1Board *)lpVoid;
CString csShow;
while(pDjSS1Board->m_bRun)
{
while(pDjSS1Board->m_bOutDial == true)
{
for(int i=1;i<pDjSS1Board->m_nTotalTrunk;i++)
{
CSync sync(&pDjSS1Board->m_CriticalSection);
if (pDjSS1Board->m_MapChannelInfo[i]->m_nState == IDLE && pDjSS1Board->m_MapChannelInfo[i]->m_bOutDial == false)
{
csShow.Format("通道%d:开始外拨",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
pDjSS1Board->m_MapChannelInfo[i]->m_bOutDial = true;
DJTrk_StartDial(i,OUTCALLDNIS,CALLANI);
}
else
{
csShow.Format("通道%d:挂断",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
pDjSS1Board->m_MapChannelInfo[i]->m_bOutDial = false;
DJTrk_BackwardHangUp(i);
}
}
}
Sleep(10000);
}
return true;
}
DWORD WINAPI CDjSS1Board::GetUserEventThread(LPVOID lpVoid)
{
CDjSS1Board * pDjSS1Board = (CDjSS1Board *)lpVoid;
CString csShow;
pDjSS1Board->ShowMsg("开始获取分机事件信息");
int nChannelNum;
while(pDjSS1Board->m_bRun)
{
for(int i=0;i<pDjSS1Board->m_nTotalUser;i++)
{
nChannelNum = i + pDjSS1Board->m_nTotalTrunk;
CSync sync(&pDjSS1Board->m_CriticalSection);
DJSys_PushPlay();
if (DJUser_CheckHookOFF(i) == 0)
{
if (pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState == INIT)
{
DJExg_ClearLinkTrunkAndUserByUser(i);
DJExg_ClearLinkPlayVoiceFromUser(i);
csShow.Format("通道%d:空闲",nChannelNum);
pDjSS1Board->ShowMsg(csShow,true);
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bOutDial = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState = IDLE;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_StartTime = CTime::GetCurrentTime();
}
else
{
if (pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState != IDLE)
{
DJExg_ClearLinkTrunkAndUserByUser(i);
DJExg_ClearLinkPlayVoiceFromUser(i);
DJTrk_BackwardHangUp(OUTCALLCHANNEL);
csShow.Format("通道%d:空闲",nChannelNum);
pDjSS1Board->ShowMsg(csShow,true);
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bOutDial = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState = IDLE;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_StartTime = CTime::GetCurrentTime();
}
}
}
else
{
if (pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState != WORK)
{
DJExg_ClearLinkTrunkAndUserByUser(i);
DJExg_ClearLinkPlayVoiceFromUser(i);
csShow.Format("通道%d:摘机",nChannelNum);
pDjSS1Board->ShowMsg(csShow,true);
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bOutDial = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect = false;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_nState = WORK;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_StartTime = CTime::GetCurrentTime();
}
else
{
if (pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bOutDial == false)
{
if (DJUser_GetDialNum(i) >= 5 )
{
DJExg_ClearLinkTrunkAndUserByUser(i);
DJExg_ClearLinkPlayVoiceFromUser(i);
CString csCall;
csCall.Format("%s",DJUser_GetDialCode(i));
DJTrk_StartDial( OUTCALLCHANNEL, (LPSTR)(LPCTSTR)csCall, CALLANI ) ;
csShow.Format("通道%d:外拨 " + csCall,nChannelNum);
pDjSS1Board->ShowMsg(csShow,true);
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bOutDial = true;
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect = false;
}
}
else
{
switch( DJTrk_GetDialStatus(OUTCALLCHANNEL))
{
case DS_Connect:
if (pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect == false)
{
csShow.Format("通道%d:连通",nChannelNum);
pDjSS1Board->ShowMsg(csShow,true);
DJExg_ClearLinkPlayVoiceFromUser(i) ;
DJExg_SetLinkTrunkAndUser(OUTCALLCHANNEL,i);
pDjSS1Board->m_MapChannelInfo[nChannelNum]->m_bConnect = true;
}
break;
}
}
}
}
}
Sleep(10);
}
return 0;
}
DWORD WINAPI CDjSS1Board::GetTrunkEventThread(LPVOID lpVoid)
{
CDjSS1Board * pDjSS1Board = g_pDjSS1Board;
int nTemp = (int)lpVoid;
int lStart = nTemp * 10 + 1;
int lEnd = nTemp * 10 + 10;
if (lEnd > pDjSS1Board->m_nTotalTrunk)
lEnd = pDjSS1Board->m_nTotalTrunk;
CString csShow;
pDjSS1Board->ShowMsg("开始获取语音事件信息");
while(pDjSS1Board->m_bRun)
{
for(int i=lStart;i<pDjSS1Board->m_nTotalTrunk;i++)
{
CSync sync(&pDjSS1Board->m_CriticalSection);
DJSys_PushPlay();
if ( DJTrk_GetTrunkStatus(i) == Step_Delay )
continue ;
switch(DJTrk_GetTrunkStatus(i))
{
case Step_Free:
if (pDjSS1Board->m_MapChannelInfo[i]->m_nState == INIT)
{
csShow.Format("通道%d:空闲",i);
pDjSS1Board->ShowMsg(csShow,true);
pDjSS1Board->m_MapChannelInfo[i]->m_nState = IDLE;
pDjSS1Board->m_MapChannelInfo[i]->m_StartTime = CTime::GetCurrentTime();
pDjSS1Board->m_MapChannelInfo[i]->m_bOutDial = false;
pDjSS1Board->m_MapChannelInfo[i]->m_bConnect = false;
}
pDjSS1Board->m_MapChannelInfo[i]->m_nState = IDLE;
/*
if (pDjSS1Board->m_bOutDial == true)
{
if (pDjSS1Board->m_MapChannelInfo[i]->m_nState == IDLE)
{
long lCurrentTime = CTime::GetCurrentTime().GetTime();
long lStartTime = pDjSS1Board->m_MapChannelInfo[i]->m_StartTime.GetTime();
if (( lCurrentTime- lStartTime) >= 3)
{
csShow.Format("通道%d:开始外拨",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
DJTrk_StartDial(i,OUTCALLDNIS,CALLANI);
pDjSS1Board->m_MapChannelInfo[i]->m_StartTime = CTime::GetCurrentTime();
}
}
else
{
csShow.Format("通道%d:空闲",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
pDjSS1Board->m_MapChannelInfo[i]->m_nState = IDLE;
pDjSS1Board->m_MapChannelInfo[i]->m_StartTime = CTime::GetCurrentTime();
}
}
*/
break;
case Step_Connect:
pDjSS1Board->m_MapChannelInfo[i]->m_nState = WORK;
/*
if (pDjSS1Board->m_bOutDial == true)
{
if (pDjSS1Board->m_MapChannelInfo[i]->m_nState == WORK)
{
long lCurrentTime = CTime::GetCurrentTime().GetTime();
long lStartTime = pDjSS1Board->m_MapChannelInfo[i]->m_StartTime.GetTime();
if ((lCurrentTime - lStartTime) >= 10)
{
csShow.Format("通道%d:挂断",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
DJTrk_BackwardHangUp(i);
}
}
else
{
csShow.Format("通道%d:连通",i);
pDjSS1Board->ShowMsg(csShow,pDjSS1Board->m_bShow);
pDjSS1Board->m_MapChannelInfo[i]->m_nState = WORK;
pDjSS1Board->m_MapChannelInfo[i]->m_StartTime = CTime::GetCurrentTime();
}
}
*/
break;
}
}
Sleep(10);
}
return true;
}
bool CDjSS1Board::Dial()
{
ShowMsg("开始外拨");
m_bOutDial = true;
return true;
}
bool CDjSS1Board::HangUp()
{
ShowMsg("停止外拨");
CSync sync(&m_CriticalSection);
for(int i=0;i<m_nTotalTrunk;i++)
{
DJTrk_BackwardHangUp(i);
m_MapChannelInfo[i]->m_nState = IDLE;
m_MapChannelInfo[i]->m_StartTime = CTime::GetCurrentTime();
}
m_bOutDial = false;
return true;
}
bool CDjSS1Board::Init()
{
int nRet = DJSys_EnableCard( "", "PROMPT.INI" ) ;
if ( nRet != 0 )
{
AfxMessageBox("Load Drive Faile!", MB_OK ) ;
return false;
}
CString csShow;
csShow = "启动板卡成功";
ShowMsg(csShow);
int i = 0;
int nTotalNum = 0;
m_nTotalTrunk = DJTrk_GetTotalTrunkNum();
m_nTotalUser = DJUser_GetTotalUserNum();
for(i=0;i<m_nTotalTrunk;i++)
{
DJTrk_SetTrunkType(i,Type_Export);
CChannelInfo *pChannelInfo = new CChannelInfo();
pChannelInfo->m_nChannelNum = nTotalNum;
pChannelInfo->m_nState = INIT;
pChannelInfo->m_nType = IVR;
pChannelInfo->m_StartTime = CTime::GetCurrentTime();
pChannelInfo->m_bOutDial = false;
pChannelInfo->m_bConnect = false;
m_MapChannelInfo[i] = pChannelInfo;
nTotalNum++;
}
csShow.Format("语音通道数:%d",m_nTotalTrunk);
ShowMsg(csShow);
for(i=0;i<m_nTotalUser;i++)
{
DJUser_SetPowerON(i);
if ( ! DJUser_EnableDialSound(i) )
{
DJSys_DisableCard();
AfxMessageBox("Init UserBoard Error!", MB_OK ) ;
return false;
}
CChannelInfo *pChannelInfo = new CChannelInfo();
pChannelInfo->m_nChannelNum = nTotalNum;
pChannelInfo->m_nState = IDLE;
pChannelInfo->m_nType = EXTENSION;
pChannelInfo->m_StartTime = CTime::GetCurrentTime();
pChannelInfo->m_bOutDial = false;
pChannelInfo->m_bConnect = false;
m_MapChannelInfo[nTotalNum] = pChannelInfo;
nTotalNum++;
}
csShow.Format("座席通道数:%d",m_nTotalUser);
ShowMsg(csShow);
m_bRun = true;
DWORD dwId = 0;
for(i = 0;i<6;i++)
{
CreateThread(NULL,0,CDjSS1Board::GetTrunkEventThread,(LPVOID)i,true,&dwId);
}
CreateThread(NULL,0,CDjSS1Board::GetUserEventThread,this,true,&dwId);
CreateThread(NULL,0,CDjSS1Board::DialThread,this,true,&dwId);
return true;
}
void CDjSS1Board::ShowMsg(CString csShow,bool bShow)
{
CSync sync(&m_ShowCriticalSection);
CString csTemp;
csTemp.Format("%s %s",CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S"),csShow);
CShowMsg::ShowMsg(csTemp,bShow);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -