void Config::deregisterObject( co::Object* object ) { EQASSERT( object ) EQASSERT( object->isMaster( )); if( !object->isAttached( )) // not registered return; const uint32_t latency = getLatency(); ClientPtr client = getClient(); if( latency == 0 || !_running || !object->isBuffered( )) // OPT { client->deregisterObject( object ); return; } // Keep a distributed object latency frames. // Replaces the object with a dummy proxy object using the // existing master change manager. ConfigSwapObjectPacket packet; packet.requestID = getLocalNode()->registerRequest(); packet.object = object; send( client, packet ); client->waitRequest( packet.requestID ); }
Config* Server::chooseConfig( const ConfigParams& parameters ) { if( !isConnected( )) return 0; const std::string& renderClient = parameters.getRenderClient(); if( renderClient.empty( )) { EQWARN << "No render client in ConfigParams specified" << std::endl; return 0; } ServerChooseConfigPacket packet; ClientPtr client = getClient(); packet.requestID = client->registerRequest(); const std::string& workDir = parameters.getWorkDir(); std::string rendererInfo = workDir + '#' + renderClient; #ifdef _WIN32 // replace dir delimiters since '\' is often used as escape char for( size_t i=0; i<rendererInfo.length(); ++i ) if( rendererInfo[i] == '\\' ) rendererInfo[i] = '/'; #endif send( packet, rendererInfo ); while( !client->isRequestServed( packet.requestID )) getClient()->processCommand(); void* ptr = 0; client->waitRequest( packet.requestID, ptr ); return static_cast<Config*>( ptr ); }
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 ); }
void Server::unmap() { ClientPtr client = getClient(); const uint32_t requestID = client->registerRequest(); send( fabric::CMD_SERVER_UNMAP ) << requestID; while( !client->isRequestServed( requestID )) client->processCommand(); client->waitRequest( requestID ); }
bool Config::update() { commit( CO_COMMIT_NEXT ); // send update req to server ClientPtr client = getClient(); ConfigUpdatePacket packet; packet.versionID = client->registerRequest(); packet.finishID = client->registerRequest(); packet.requestID = client->registerRequest(); send( getServer(), packet ); // wait for new version uint128_t version = co::VERSION_INVALID; client->waitRequest( packet.versionID, version ); uint32_t finishID = 0; client->waitRequest( packet.finishID, finishID ); if( finishID == EQ_UNDEFINED_UINT32 ) { sync( version ); client->unregisterRequest( packet.requestID ); return true; } client->disableSendOnRegister(); while( _finishedFrame < _currentFrame ) client->processCommand(); sync( version ); client->ackRequest( getServer(), finishID ); while( !client->isRequestServed( packet.requestID )) client->processCommand(); bool result = false; client->waitRequest( packet.requestID, result ); client->enableSendOnRegister(); return result; }
void Server::releaseConfig( Config* config ) { LBASSERT( isConnected( )); ClientPtr client = getClient(); const uint32_t requestID = client->registerRequest(); send( fabric::CMD_SERVER_RELEASE_CONFIG ) << config->getID() << requestID; while( !client->isRequestServed( requestID )) client->processCommand(); client->waitRequest( requestID ); }
void Server::releaseConfig( Config* config ) { EQASSERT( isConnected( )); ClientPtr client = getClient(); ServerReleaseConfigPacket packet; packet.requestID = client->registerRequest(); packet.configID = config->getID(); send( packet ); while( !client->isRequestServed( packet.requestID )) client->processCommand(); client->waitRequest( packet.requestID ); }
bool Server::shutdown() { if( !isConnected( )) return false; ClientPtr client = getClient(); const uint32_t requestID = client->registerRequest(); send( fabric::CMD_SERVER_SHUTDOWN ) << requestID; while( !client->isRequestServed( requestID )) getClient()->processCommand(); bool result = false; client->waitRequest( requestID, result ); if( result ) static_cast< co::LocalNode& >( *getClient( )).disconnect( this ); return result; }
bool Server::shutdown() { if( !isConnected( )) return false; ClientPtr client = getClient(); ServerShutdownPacket packet; packet.requestID = client->registerRequest(); send( packet ); while( !client->isRequestServed( packet.requestID )) getClient()->processCommand(); bool result = false; client->waitRequest( packet.requestID, result ); if( result ) static_cast< co::LocalNode& >( *getClient( )).disconnect( this ); return result; }