#include "StdAfx.h" #include "AuthMgr.h" #include "AppReg.h" SINGLETON_IMPLEMENT(CAuthMgr) CAuthMgr::CAuthMgr(void) : m_IsValid(false), m_TimerIdAuthPoll(0), m_TimerIdAuthInvalid(0), m_LeftTime(TTL_FOR_AUTH_INVALID), m_IvrFlowCount(0), m_AgentCount(0) { } CAuthMgr::~CAuthMgr(void) { __killAuthPollTimer(); __killAuthInvalidTimer(); } /***************************************************************** **【函数名称】 __authPollCallback **【函数功能】 授权轮询定时器回调函数 **【参数】 **【返回值】 ****************************************************************/ void CALLBACK CAuthMgr::__authPollCallback( void ) { CAuthMgr::GetInstance().__onTimerAuthPoll(); } /***************************************************************** **【函数名称】 __authInvalidCallback **【函数功能】 授权无效的计时器回调函数 **【参数】 **【返回值】 ****************************************************************/ void CALLBACK CAuthMgr::__authInvalidCallback( void ) { CAuthMgr::GetInstance().__onTimerAuthInvalid(); } /***************************************************************** **【函数名称】 __onAuthInvalid **【函数功能】 授权信息获取失败的处理函数 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__onAuthInvalid( void ) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Auth}: 授权信息无效, 系统将在%u秒后退出"), m_LeftTime); __setAuthInvalidTimer(); } /***************************************************************** **【函数名称】 __setAuthPollTimer **【函数功能】 设定鉴权轮询定时器 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__setAuthPollTimer( void ) { m_TimerIdAuthPoll = SetTimer(NULL, NULL, TIMER_INTERVAL_AUTH_POLL * 1000, (TIMERPROC)__authPollCallback); } /***************************************************************** **【函数名称】 __killAuthPollTimer **【函数功能】 删除鉴权轮询定时器 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__killAuthPollTimer( void ) { if(m_TimerIdAuthPoll != 0) { KillTimer(NULL, m_TimerIdAuthPoll); m_TimerIdAuthPoll = 0; } } /***************************************************************** **【函数名称】 __setAuthInvalidTimer **【函数功能】 设定鉴权失败定时器 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__setAuthInvalidTimer( void ) { m_TimerIdAuthInvalid = SetTimer(NULL, NULL, TIMER_INTERVAL_AUTH_INVALID * 1000, (TIMERPROC)__authInvalidCallback); } /***************************************************************** **【函数名称】 __killAuthInvalidTimer **【函数功能】 删除鉴权失败定时器 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__killAuthInvalidTimer( void ) { if(m_TimerIdAuthInvalid != 0) { KillTimer(NULL, m_TimerIdAuthInvalid); m_TimerIdAuthInvalid = 0; } } /***************************************************************** **【函数名称】 __onTimerAuthPoll **【函数功能】 授权轮询定时器处理函数 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__onTimerAuthPoll( void ) { if(!RegValid()) { if(m_IsValid) { m_IsValid = false; __onAuthInvalid(); } } else { if(!m_IsValid) { m_IsValid = true; __killAuthInvalidTimer(); m_LeftTime = TTL_FOR_AUTH_INVALID; ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Auth}: 授权验证通过, 系统恢复正常运行")); } } } /***************************************************************** **【函数名称】 __onTimerAuthInvalid **【函数功能】 授权无效的计时器处理函数 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::__onTimerAuthInvalid( void ) { __killAuthInvalidTimer(); m_LeftTime -= TIMER_INTERVAL_AUTH_INVALID; if(m_LeftTime <= 0) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Auth}: 授权信息无效, 系统将退出")); AfxGetMainWnd()->PostMessage(WM_CLOSE); } else { __onAuthInvalid(); } } /***************************************************************** **【函数名称】 init **【函数功能】 初始化 **【参数】 **【返回值】 ****************************************************************/ void CAuthMgr::init( void ) { UCHAR AuthYear = 0; UCHAR AuthMonth = 0; UCHAR AuthDay = 0; __setAuthPollTimer(); if(!ReadAvailableTime(&AuthYear, &AuthMonth, &AuthDay) || !ReadCCM_IVRNum(&m_IvrFlowCount) || !ReadCCM_AgentNum(&m_AgentCount)) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Auth}: 授权信息获取失败, 请插入加密狗并安装驱动程序")); __onAuthInvalid(); } else { if(!RegValid()) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Auth}: 授权到期, 授权截止日期%u年%u月%u日"), AuthYear, AuthMonth, AuthDay); __onAuthInvalid(); } else { m_IsValid = true; ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Auth}: 授权IVR流程数%u, 授权座席数%u, 授权截止日期%u年%u月%u日"), m_IvrFlowCount, m_AgentCount, AuthYear, AuthMonth, AuthDay); } } }