How I should handle events using active listener? I can not find any working sample.
This code should register the listener using active mode:
Code: Select all
bool MachineBridge::registerListener()
{
nsresult rc;
if(session == nsnull)
return false;
rc = session->GetConsole(getter_AddRefs(console));
if(NS_FAILED(rc))
return false;
rc = console->GetEventSource(getter_AddRefs(eventSource));
if(NS_FAILED(rc))
return false;
uint32_t events[1];
events[0] = VBoxEventType::Any; //FIXME Quick and dirty code
rc = eventSource->RegisterListener(eventListener, 1, events, (PRBool) true);
if(NS_FAILED(rc))
return false;
return true;
}
Code: Select all
STDMETHODIMP UIMainEventListener::HandleEvent(uint32_t aType, IEvent *pEvent)
{
std::cout << "Event type: " << aType << std::endl;
switch (aType)
{
case VBoxEventType::OnStateChanged:
{
uint32_t machineState;
IStateChangedEvent *es;
nsresult rc = CallQueryInterface<IEvent, IStateChangedEvent>(pEvent, &es);
if(NS_SUCCEEDED(rc))
{
es->GetState(&machineState);
std::cout << "machineState: " << machineState << std::endl;
}
emit sigStateChange(machineState);
break;
}
case VBoxEventType::OnMachineStateChanged:
{
uint32_t machineState;
IMachineStateChangedEvent *es;
nsresult rc = CallQueryInterface<IEvent, IMachineStateChangedEvent>(pEvent, &es);
if(NS_SUCCEEDED(rc))
{
es->GetState(&machineState);
std::cout << "machineState: " << machineState << std::endl;
}
emit sigMachineStateChange(machineState);
break;
}
/* Other cases... */
default: break;
}
return NS_OK;
}
Thank you.
Virtual Box version: 4.3.10_Ubuntu
Virtual Box API Version: 4_3
Connection Type: XPCOM
Language Used: C++
OS: Kubuntu 14.04.3