diff --git a/session/src/nsmd.C b/session/src/nsmd.C index 17c190b..c5de657 100644 --- a/session/src/nsmd.C +++ b/session/src/nsmd.C @@ -404,7 +404,9 @@ replies_still_pending ( ) for ( std::list::const_iterator i = client.begin(); i != client.end(); ++i ) - if ( (*i)->active && (*i)->reply_pending() ) + /* if ( (*i)->active && (*i)->reply_pending() ) */ + /* return true; */ + if ( (*i)->reply_pending() ) return true; return false; @@ -427,9 +429,6 @@ generate_client_id ( Client *c ) void wait_for_replies ( ) { - if ( ! replies_still_pending() ) - return; - fprintf( stdout, "Waiting..." ); 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 ); + c->pending_command = COMMAND_OPEN; + free( full_client_id ); free( client_project_path ); } @@ -973,8 +974,10 @@ close_all_clients ( ) void 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" ); } } @@ -982,6 +985,8 @@ tell_client_session_is_loaded( Client *c ) void tell_all_clients_session_is_loaded ( void ) { + MESSAGE( "Telling all clients that session is loaded..." ); + for ( std::list::iterator i = client.begin(); i != client.end(); ++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(); tell_all_clients_session_is_loaded();