www.pudn.com > dialogic_IVR.rar > Moniter.cpp


// Moniter.cpp: implementation of the Moniter class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Moniter.h" 
#include "smmapp.h" 
#include "snmp.h" 
#include "Afxmt.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
CEvent   Quit_Moniter; 
unsigned int n=0; 
 
extern   int  g_phoneMaxChannel,g_conUserNumber,g_ivrStatus,g_chanStatus; 
int		 g_chanNum,g_faxBDNumber,g_faxMaxChannel,g_misBDNumber,g_misMaxChannel; 
char	 g_vrdServerIP[256],g_ivrUpTime[256],FaxBand[20]; 
MoniterInfo  MonInfo[240]; 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
Moniter::Moniter() 
{ 
 
} 
 
Moniter::~Moniter() 
{ 
 
} 
 
//读监控参数回调函数 
unsigned short ReadParam(char* pParamName/*监控参数名*/, unsigned short nInstance/*监控参数的事例号*/,unsigned char bType/*数据类型*/,unsigned char* szValue/*值*/,unsigned short* pLen/*值长度*/) 
{ 
	int   nLen; 
	//处理输入的监控参数 
	if(0== strcmp(pParamName,"phoneBDNumber")) 
	{//暂时不能取得语音卡的数目 
		*pLen=UInt32ToStr(szValue,1); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"phoneMaxChannel")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_phoneMaxChannel); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"faxBDNumber")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_faxBDNumber); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"faxMaxChannel")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_faxMaxChannel); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"misBDNumber")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_misBDNumber); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"misMaxChannel")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_misMaxChannel); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"vrdConnectedStatus")) 
	{ 
		*pLen=UInt32ToStr(szValue,3); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"vrdServerIP")) 
	{ 
		nLen= strlen(g_vrdServerIP); 
		memcpy(szValue,g_vrdServerIP,nLen); 
		*pLen= nLen; 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"ivrStatus")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_ivrStatus); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"ivrUpTime")) 
	{ 
		nLen= strlen(g_ivrUpTime); 
		memcpy(szValue,g_ivrUpTime,nLen); 
		*pLen= nLen; 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"chanNum")) 
	{ 
		if(strcmp(FaxBand,"VFAX")==0) 
		{ 
			g_chanNum=g_phoneMaxChannel+g_misMaxChannel; 
		} 
		else 
		{ 
			g_chanNum=g_phoneMaxChannel+g_faxMaxChannel+g_misMaxChannel; 
		} 
		*pLen=UInt32ToStr(szValue,g_chanNum); 
		return SNMP_NOERROR; 
	} 
	else if(0== strcmp(pParamName,"chanIndex")) 
	{ 
		if(MonInfo[nInstance-1].m_chanFlag==0) 
		{ 
			*pLen=0; 
			return SNMP_NOSUCHNAME; 
		} 
		else 
		{ 
			*pLen=UInt32ToStr(szValue,nInstance); 
			return SNMP_NOERROR; 
		} 
	} 
	else if(0== strcmp(pParamName,"chanStatus")) 
	{ 
		if(MonInfo[nInstance-1].m_chanFlag==0) 
		{ 
			*pLen=0; 
			return SNMP_NOSUCHNAME; 
		} 
		else 
		{ 
			*pLen=UInt32ToStr(szValue,MonInfo[nInstance-1].m_chanFlag); 
			return SNMP_NOERROR; 
		} 
	} 
	else if(0== strcmp(pParamName,"conUserNumber")) 
	{ 
		*pLen=UInt32ToStr(szValue,g_conUserNumber); 
		return SNMP_NOERROR; 
	} 
	else 
	{ 
		*pLen=0; 
		return SNMP_NOSUCHNAME; 
	} 
} 
 
 
//写监控参数回调函数 
unsigned short WriteParam(char* pParamName/*监控参数名*/, unsigned short nInstance/*监控参数的事例号*/,unsigned char bType/*数据类型*/,unsigned char* szValue/*值*/,unsigned short nLen/*值长度*/) 
{ 
	return SNMP_NOERROR; 
} 
 
 
void abc() 
{ 
	unsigned char szValue[20]; 
	unsigned short nLen; 
	void* pTrapHandle=NULL; 
 
	HANDLE hEvent= CreateEvent(NULL,TRUE,FALSE,NULL); 
	ResetEvent(hEvent); 
	while(1) 
	{ 
		 
		FreeTrapHandle(pTrapHandle); 
		nLen= UInt32ToStr(szValue,10); 
                 
                //初始化Trap句柄 
		pTrapHandle= InitTrapHandle(".1.3.6.1.4.1.1000",SNMP_GENERICTRAP_ENTERSPECIFIC,100); 
                //向Trap句柄写入一个监控参数值 
		WriteTrap(pTrapHandle,"errorCode",0,SNMP_TYPE_INTEGER32,szValue,nLen); 
		 
		nLen = sprintf((char *)&szValue[0],"fyw"); 
		//向Trap句柄写入一个监控参数值 
		WriteTrap(pTrapHandle,"errorSource",0,SNMP_TYPE_STRING,szValue,nLen); 
 
		nLen=sprintf((char *)&szValue[0],"Error Description:"); 
		//向Trap句柄写入一个监控参数值 
		WriteTrap(pTrapHandle,"errorDesc",0,SNMP_TYPE_STRING,szValue,nLen); 
		//发送Trap消息	 
		SendTrap(pTrapHandle); 
		//释放trap句柄 
		WaitForSingleObject(hEvent,5000); 
	} 
} 
 
UINT SendInfo() 
{ 
	char     szSection[]="IVR"; 
	CTime    IvrUpTime; 
 
	memset(g_vrdServerIP,0,256); 
	memset(g_ivrUpTime,0,256); 
	memset(FaxBand,0,20); 
	memset(MonInfo,0,240*sizeof(MoniterInfo)); 
	IvrUpTime = CTime::GetCurrentTime(); 
	sprintf(g_ivrUpTime,"%s",IvrUpTime.Format( "%Y-%m-%d %X" )); 
	g_faxBDNumber=GetPrivateProfileInt("VFAX","FAXCHANS",0,".\\Setup.ini"); 
	g_faxMaxChannel=GetPrivateProfileInt("VFAX","FAXBDNUM",0,".\\Setup.ini"); 
	g_misBDNumber=GetPrivateProfileInt("MSI","MSICHANS",0,".\\Setup.ini"); 
	g_misMaxChannel=GetPrivateProfileInt("MSI","MSIBDNUM",0,".\\Setup.ini"); 
	GetPrivateProfileString("ServiceProxy","Address","尚未没设置服务器",g_vrdServerIP,256,".\\Setup.ini"); 
	GetPrivateProfileString("CHANNEL","FAXRES","",FaxBand,20,".\\Setup.ini"); 
 
	Init(ReadParam,WriteParam,szSection); 
	while(1) 
	{ 
		if (WaitForSingleObject( Quit_Moniter, INFINITE ) == WAIT_OBJECT_0 ) break; 
		// 初始化监控接口 
		 
		//每隔5s,发送一个trap消息 
	} 
    //关闭监控接口 
	Close(); 
	return 0; 
}