Browse Source

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

Closes #60.
tags/non-daw-v1.2.0
Jonathan Moore Liles 12 years ago
parent
commit
8b5f5a76aa
1 changed files with 29 additions and 4 deletions
  1. +29
    -4
      session-manager/src/nsmd.C

+ 29
- 4
session-manager/src/nsmd.C View File

@@ -49,6 +49,10 @@
/* for locking */ /* for locking */
#include "file.h" #include "file.h"


#include <map>
#include <string>
#include <algorithm>

#pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-parameter"


static OSC::Endpoint *osc_server; static OSC::Endpoint *osc_server;
@@ -929,7 +933,6 @@ client_by_name ( const char *name,
return NULL; return NULL;
} }



bool bool
dumb_clients_are_alive ( ) dumb_clients_are_alive ( )
{ {
@@ -1221,17 +1224,39 @@ load_session_file ( const char * path )
} }


MESSAGE( "Commanding unneeded and dumb clients to quit" ); 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(); for ( std::list<Client*>::iterator i = client.begin();
i != client.end(); i != client.end();
++i ) ++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 ); 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(); // wait_for_replies();


Loading…
Cancel
Save