예제 #1
0
파일: server.cpp 프로젝트: yarda/Equalizer
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 );
}
예제 #2
0
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 );
}
예제 #3
0
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 );
}
예제 #4
0
파일: config.cpp 프로젝트: yarda/Equalizer
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;
}
예제 #5
0
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 );
}
예제 #6
0
파일: server.cpp 프로젝트: yarda/Equalizer
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 );
}
예제 #7
0
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;
}
예제 #8
0
파일: server.cpp 프로젝트: yarda/Equalizer
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;
}