Config* Server::chooseConfig( const fabric::ConfigParams& p ) { if( !isConnected( )) return 0; ClientPtr client = getClient(); fabric::ConfigParams params( p ); if( params.getName().empty( )) params.setName( client->getName( )); if( params.getWorkDir().empty( )) params.setWorkDir( Global::getWorkDir( )); if( params.getRenderClient().empty( )) params.setRenderClient( Global::getProgramName( )); if( params.getGPUFilter().empty( )) params.setGPUFilter( client->getGPUFilter( )); if( params.getRenderClient().empty( )) LBWARN << "No render client in ConfigParams specified" << std::endl; lunchbox::Request< void* > request = client->registerRequest< void* >(); send( fabric::CMD_SERVER_CHOOSE_CONFIG ) << request << params << eq::Global::getConfigFile(); while( !request.isReady( )) getClient()->processCommand(); return static_cast< Config* >( request.wait( )); }
Config* Server::chooseConfig( const fabric::ConfigParams& p ) { if( !isConnected( )) return 0; ClientPtr client = getClient(); fabric::ConfigParams params( p ); if( params.getWorkDir().empty( )) params.setWorkDir( Global::getWorkDir( )); if( params.getRenderClient().empty( )) params.setRenderClient( Global::getProgramName( )); if( params.getGPUFilter().empty( )) params.setGPUFilter( client->getGPUFilter( )); if( params.getRenderClient().empty( )) { LBWARN << "No render client in ConfigParams specified" << std::endl; return 0; } const uint32_t requestID = client->registerRequest(); send( fabric::CMD_SERVER_CHOOSE_CONFIG ) << requestID << params << eq::Global::getConfigFile(); while( !client->isRequestServed( requestID )) getClient()->processCommand(); void* ptr = 0; client->waitRequest( requestID, ptr ); return static_cast<Config*>( ptr ); }