void CVBoxMachine::OnMachineStateChange(IMachineStateChangedEvent* e) { if (e!=NULL) { // A real machine state change event! CComBSTR bstrMachineID; e->get_MachineId(&bstrMachineID); if (!IsEqualStringI(bstrMachineID, m_bstrMachineID)) return; // Get new state e->get_State(&m_State); // Since we got an actual event from VirtualBox, let's assume it's working // and kill our poll timer if (m_hPollTimer!=NULL) { KillCallbackTimer(m_hPollTimer); } } else { // Poll mode // Get the current state and see if it changed MachineState newState; m_spMachine->get_State(&newState); if (newState == m_State) return; // Yep m_State = newState; } switch (m_State) { case MachineState_PoweredOff: case MachineState_Saved: case MachineState_Teleported: case MachineState_Aborted: m_dwHeadlessPid=0; CloseHandle(m_hHeadlessProcess); m_hHeadlessProcess=NULL; break; } if (m_pEvents) { m_pEvents->OnStateChange(m_State); } }
bool SIMPLEAPI ParseBool(const wchar_t* psz, bool bDefault) { if (IsEqualStringI(psz, L"yes") || IsEqualStringI(psz, L"on") || IsEqualStringI(psz, L"true") || IsEqualStringI(psz, L"1")) return true; if (IsEqualStringI(psz, L"no") || IsEqualStringI(psz, L"off") || IsEqualStringI(psz, L"false") || IsEqualStringI(psz, L"0")) return false; return bDefault; }