bool MasterConfig::run( co::Object* frameData ) { LBASSERT( _objects ); if( frameData ) LBCHECK( _objects->register_( frameData, OBJECTTYPE_FRAMEDATA )); _objects->setFrameData( frameData ); seq::Application* const app = getApplication(); while( isRunning( )) { startFrame(); if( getError( )) LBWARN << "Error during frame start: " << getError() << std::endl; finishFrame(); while( !needRedraw( )) // wait for an event requiring redraw { if( app->hasCommands( )) // execute non-critical pending commands { app->processCommand(); handleEvents(); // non-blocking } else // no pending commands, block on user event { const eq::EventCommand& event = getNextEvent(); if( !handleEvent( event )) LBVERB << "Unhandled " << event << std::endl; } } handleEvents(); // process all pending events } finishAllFrames(); return true; }
bool Config::exit() { update(); finishAllFrames(); co::LocalNodePtr localNode = getLocalNode(); localNode->disableSendOnRegister(); ConfigExitPacket packet; packet.requestID = localNode->registerRequest(); send( getServer(), packet ); ClientPtr client = getClient(); while( !localNode->isRequestServed( packet.requestID )) client->processCommand(); bool ret = false; localNode->waitRequest( packet.requestID, ret ); while( tryNextEvent( )) /* flush all pending events */ ; if( _lastEvent ) _lastEvent->release(); _eventQueue.flush(); _lastEvent = 0; _running = false; return ret; }
void Config::changeLatency( const uint32_t latency ) { finishAllFrames(); commit( CO_COMMIT_NEXT ); // update views ChangeLatencyVisitor changeLatencyVisitor( latency ); accept( changeLatencyVisitor ); }