NSM: Command all unneeded 'switch' capable clients to exit when switching sessions.

Closes #60.
pull/116/head
Jonathan Moore Liles 2013-05-02 23:05:58 -07:00
parent 1c6add6c2b
commit 8b5f5a76aa
1 changed files with 29 additions and 4 deletions

View File

@ -49,6 +49,10 @@
/* for locking */
#include "file.h"
#include <map>
#include <string>
#include <algorithm>
#pragma GCC diagnostic ignored "-Wunused-parameter"
static OSC::Endpoint *osc_server;
@ -929,7 +933,6 @@ client_by_name ( const char *name,
return NULL;
}
bool
dumb_clients_are_alive ( )
{
@ -1221,17 +1224,39 @@ load_session_file ( const char * path )
}
MESSAGE( "Commanding unneeded and dumb clients to quit" );
std::map<std::string,int> client_map;
/* count how many instances of each client are needed in the new session */
for ( std::list<Client*>::iterator i = new_clients.begin();
i != new_clients.end();
++i )
{
if ( client_map.find( (*i)->name) != client_map.end() )
client_map[(*i)->name]++;
else
client_map[(*i)->name] = 1;
}
for ( std::list<Client*>::iterator i = client.begin();
i != client.end();
++i )
{
if ( ! (*i)->is_capable_of( ":switch:" )
||
! client_by_name( (*i)->name, &new_clients ) )
if ( ! (*i)->is_capable_of( ":switch:" ) )
{
command_client_to_quit( *i );
}
else
{
if ( client_map.find((*i)->name ) != client_map.end() )
{
/* client is switch capable and may be wanted in the new session */
if ( client_map[ (*i)->name ]-- <= 0 )
/* nope,, we already have as many as we need, stop this one */
command_client_to_quit( *i );
}
}
}
// wait_for_replies();