| @@ -474,19 +474,6 @@ get_client_by_address ( lo_address addr ) | |||
| return NULL; | |||
| } | |||
| bool | |||
| replies_still_pending ( ) | |||
| { | |||
| for ( std::list<Client*>::const_iterator i = client.begin(); | |||
| i != client.end(); | |||
| ++i ) | |||
| if ( (*i)->active && (*i)->reply_pending() ) | |||
| return true; | |||
| /* if ( (*i)->reply_pending() ) */ | |||
| /* return true; */ | |||
| return false; | |||
| } | |||
| char * | |||
| generate_client_id ( Client *c ) | |||
| @@ -502,21 +489,69 @@ generate_client_id ( Client *c ) | |||
| return strdup(id_str); | |||
| } | |||
| bool | |||
| replies_still_pending ( void ) | |||
| { | |||
| for ( std::list<Client*>::const_iterator i = client.begin(); | |||
| i != client.end(); | |||
| ++i ) | |||
| if ( (*i)->active && (*i)->reply_pending() ) | |||
| return true; | |||
| return false; | |||
| } | |||
| int | |||
| number_of_active_clients ( void ) | |||
| { | |||
| int active = 0; | |||
| for ( std::list<Client*>::const_iterator i = client.begin(); i != client.end(); i++ ) | |||
| { | |||
| if ( (*i)->active ) | |||
| active++; | |||
| } | |||
| return active; | |||
| } | |||
| void | |||
| wait_for_replies ( ) | |||
| wait_for_announce ( void ) | |||
| { | |||
| fprintf( stdout, "Waiting..." ); | |||
| fflush(stdout); | |||
| MESSAGE( "Waiting for announce messages from clients" ); | |||
| int n = 7; | |||
| int n = 5 * 1000; | |||
| int active; | |||
| while ( n-- ) | |||
| while ( n > 0 ) | |||
| { | |||
| printf( "." ); | |||
| fflush(stdout); | |||
| n -= 100; | |||
| osc_server->wait( 1000 ); | |||
| osc_server->wait(100); | |||
| active = number_of_active_clients(); | |||
| if ( client.size() == active ) | |||
| break; | |||
| } | |||
| MESSAGE( "Done. %i out of %i clients announced within the initialization grace period", active, client.size() ); | |||
| } | |||
| void | |||
| wait_for_replies ( void ) | |||
| { | |||
| MESSAGE( "Waiting for clients to reply to commands" ); | |||
| int n = 60 * 1000; /* 60 seconds */ | |||
| while ( n ) | |||
| { | |||
| n -= 100; | |||
| osc_server->wait(100); | |||
| if ( ! replies_still_pending() ) | |||
| break; | |||
| } | |||
| @@ -1229,7 +1264,10 @@ load_session_file ( const char * path ) | |||
| * messages immediately, even if no replies seem to be pending | |||
| * yet. */ | |||
| // osc_server->wait( 3000 ); | |||
| /* dumb clients will never send an 'announce message', so we need | |||
| * to give up waiting on them fairly soon. */ | |||
| wait_for_announce(); | |||
| wait_for_replies(); | |||
| @@ -1735,7 +1773,7 @@ OSC_HANDLER( progress ) | |||
| { | |||
| c->progress = argv[0]->f; | |||
| MESSAGE( "%s progress: %i%%", c->name, (int)(c->progress * 100.0f) ); | |||
| /* MESSAGE( "%s progress: %i%%", c->name, (int)(c->progress * 100.0f) ); */ | |||
| if ( gui_is_active ) | |||
| { | |||