NSM: Fix logic when waiting for clients to load.

This commit is contained in:
Jonathan Moore Liles 2012-02-20 01:57:55 -08:00
parent 58a4cd1537
commit 69c11d45a1
1 changed files with 19 additions and 5 deletions

View File

@ -404,7 +404,9 @@ replies_still_pending ( )
for ( std::list<Client*>::const_iterator i = client.begin(); for ( std::list<Client*>::const_iterator i = client.begin();
i != client.end(); i != client.end();
++i ) ++i )
if ( (*i)->active && (*i)->reply_pending() ) /* if ( (*i)->active && (*i)->reply_pending() ) */
/* return true; */
if ( (*i)->reply_pending() )
return true; return true;
return false; return false;
@ -427,9 +429,6 @@ generate_client_id ( Client *c )
void void
wait_for_replies ( ) wait_for_replies ( )
{ {
if ( ! replies_still_pending() )
return;
fprintf( stdout, "Waiting..." ); fprintf( stdout, "Waiting..." );
fflush(stdout); fflush(stdout);
@ -733,6 +732,8 @@ OSC_HANDLER( announce )
osc_server->send( lo_message_get_source( msg ), "/nsm/client/open", client_project_path, session_name, full_client_id ); osc_server->send( lo_message_get_source( msg ), "/nsm/client/open", client_project_path, session_name, full_client_id );
c->pending_command = COMMAND_OPEN;
free( full_client_id ); free( full_client_id );
free( client_project_path ); free( client_project_path );
} }
@ -973,8 +974,10 @@ close_all_clients ( )
void void
tell_client_session_is_loaded( Client *c ) tell_client_session_is_loaded( Client *c )
{ {
if ( c->active && !c->is_dumb_client() ) if ( c->active )
//!c->is_dumb_client() )
{ {
MESSAGE( "Telling client %s that session is loaded.", c->name );
osc_server->send( c->addr, "/nsm/client/session_is_loaded" ); osc_server->send( c->addr, "/nsm/client/session_is_loaded" );
} }
} }
@ -982,6 +985,8 @@ tell_client_session_is_loaded( Client *c )
void void
tell_all_clients_session_is_loaded ( void ) tell_all_clients_session_is_loaded ( void )
{ {
MESSAGE( "Telling all clients that session is loaded..." );
for ( std::list<Client*>::iterator i = client.begin(); for ( std::list<Client*>::iterator i = client.begin();
i != client.end(); i != client.end();
++i ) ++i )
@ -1089,6 +1094,15 @@ load_session_file ( const char * path )
} }
} }
/* this part is a little tricky... the clients need some time to
* send their 'announce' messages before we can send them 'open'
* and know that a reply is pending and we should continue waiting
* until they finish. wait_for_replies() must check for OSC
* messages immediately, even if no replies seem to be pending
* yet. */
// osc_server->wait( 3000 );
wait_for_replies(); wait_for_replies();
tell_all_clients_session_is_loaded(); tell_all_clients_session_is_loaded();