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);
	}
}
Beispiel #2
0
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;
}