Config* getConfig( const int argc, char** argv ) { // 1. initialization of a local client node ClientPtr client = new Client; if( client->initLocal( argc, argv )) { // 2. connect to server ServerPtr server = new Server; if( client->connectServer( server )) { // 3. choose configuration ConfigParams configParams; Config* config = server->chooseConfig( configParams ); if( config ) return config; LBERROR << "No matching config on server" << std::endl; // -2. disconnect server client->disconnectServer( server ); } else LBERROR << "Can't open server" << std::endl; // -1. exit local client node client->exitLocal(); } else LBERROR << "Can't init local client node" << std::endl; return 0; }
void releaseConfig( Config* config ) { if( !config ) return; ServerPtr server = config->getServer(); LBASSERT( server.isValid( )); server->releaseConfig( config ); ClientPtr client = server->getClient(); LBASSERT( client.isValid( )); client->disconnectServer( server ); client->exitLocal(); LBASSERTINFO( client->getRefCount() == 1, client->getRefCount( )); LBASSERTINFO( server->getRefCount() == 1, server->getRefCount( )); }