// static void GlobalTimer::Cancel(int nTimerID) { auto it = GetGlobalTimerMap()->find(nTimerID); if (it == GetGlobalTimerMap()->end()) return; GlobalTimer* pTimer = it->second; pTimer->m_pEmbedObj->CancelProc(pTimer); }
// static void CJS_Timer::TimerProc(int idEvent) { const auto it = GetGlobalTimerMap()->find(idEvent); if (it != GetGlobalTimerMap()->end()) { CJS_Timer* pTimer = it->second; if (!pTimer->m_bProcessing) { CFX_AutoRestorer<bool> scoped_processing(&pTimer->m_bProcessing); pTimer->m_bProcessing = true; if (pTimer->m_pEmbedObj) pTimer->m_pEmbedObj->TimerProc(pTimer); } } }
GlobalTimer::~GlobalTimer() { if (!m_nTimerID) return; if (GetRuntime()) m_pFormFillEnv->GetSysHandler()->KillTimer(m_nTimerID); GetGlobalTimerMap()->erase(m_nTimerID); }
void CJS_Timer::KillJSTimer() { if (m_nTimerID) { if (m_bValid) { IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); pHandler->KillTimer(m_nTimerID); } GetGlobalTimerMap()->erase(m_nTimerID); m_nTimerID = 0; } }
// static void GlobalTimer::Trigger(int nTimerID) { auto it = GetGlobalTimerMap()->find(nTimerID); if (it == GetGlobalTimerMap()->end()) return; GlobalTimer* pTimer = it->second; if (pTimer->m_bProcessing) return; pTimer->m_bProcessing = true; if (pTimer->m_pEmbedObj) pTimer->m_pEmbedObj->TimerProc(pTimer); // Timer proc may have destroyed timer, find it again. it = GetGlobalTimerMap()->find(nTimerID); if (it == GetGlobalTimerMap()->end()) return; pTimer = it->second; pTimer->m_bProcessing = false; if (pTimer->IsOneShot()) pTimer->m_pEmbedObj->CancelProc(pTimer); }
GlobalTimer::GlobalTimer(app* pObj, CPDFSDK_FormFillEnvironment* pFormFillEnv, CJS_Runtime* pRuntime, int nType, const CFX_WideString& script, uint32_t dwElapse, uint32_t dwTimeOut) : m_nTimerID(0), m_pEmbedObj(pObj), m_bProcessing(false), m_nType(nType), m_dwTimeOut(dwTimeOut), m_swJScript(script), m_pRuntime(pRuntime), m_pFormFillEnv(pFormFillEnv) { CFX_SystemHandler* pHandler = m_pFormFillEnv->GetSysHandler(); m_nTimerID = pHandler->SetTimer(dwElapse, Trigger); (*GetGlobalTimerMap())[m_nTimerID] = this; }
CJS_Timer::CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp, CJS_Runtime* pRuntime, int nType, const CFX_WideString& script, FX_DWORD dwElapse, FX_DWORD dwTimeOut) : m_nTimerID(0), m_pEmbedObj(pObj), m_bProcessing(false), m_bValid(true), m_nType(nType), m_dwTimeOut(dwTimeOut), m_swJScript(script), m_pRuntime(pRuntime), m_pApp(pApp) { IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); m_nTimerID = pHandler->SetTimer(dwElapse, TimerProc); (*GetGlobalTimerMap())[m_nTimerID] = this; m_pRuntime->AddObserver(this); }