-Working on NSM integration: open working, but session not showing: Jack registration issue with GUI probably the cause

main
Harry van Haaren 2013-11-08 00:18:48 +00:00
parent 260a1d5a0c
commit 0a9471cf54
5 changed files with 52 additions and 29 deletions

View File

@ -66,11 +66,15 @@ static void gui_static_read_rb(void* inst)
{
handleGuiEvents();
nsm_check_nowait( gui->getNsm() );
Fl::repeat_timeout( 1 / 30.f, &gui_static_read_rb, inst);
}
static void gui_static_nsm_cb(void* inst)
{
nsm_check_nowait( gui->getNsm() );
Fl::repeat_timeout( 1 / 1.f, &gui_static_nsm_cb, inst);
}
void option_controller_cb(Fl_Widget*,void* data)
{
LUPPP_NOTE("%s","Controller cb");
@ -229,31 +233,29 @@ static int cb_nsm_open (const char *name,
char **out_msg,
void *userdata )
{
//printf("nsm open()\n", out_msg[0] );
LUPPP_NOTE("NSM: Open, displayname: %s", display_name );
LUPPP_NOTE("NSM open() loading session");
//gui->getDiskReader()->readSession( fnfc.filename() );
Jack::setup( client_id );
//OSC_REPLY( "OK" );
//OSC_REPLY_P( "/nsm/client/open", "OK" );
//nsm_client_t* nsm = gui->getNsm();
//lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/reply", "ss", path, "OK" );
//lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/reply", "ss", "/nsm/client/open", "OK" );
// load the NSM provided directory
gui->getDiskReader()->readSession( name );
// initialize the disk-writer to the same directory:
// we *always* overwrite the old save file when using NSM
gui->getDiskWriter()->initialize( name, display_name );
return ERR_OK;
}
static int cb_nsm_save ( char **out_msg, void *userdata )
{
printf("nsm save()\n");
//do_save_stuff();
LUPPP_NOTE("NSM: saving session as %s", *out_msg );
LUPPP_NOTE("%s %s","Saving session as ", out_msg[0] );
//gui->getDiskWriter()->initialize( getenv("HOME"), out_msg );
// disk-writer already initialized to the right directory, so just write!
EventStateSave e;
//writeToDspRingbuffer( &e );
writeToDspRingbuffer( &e );
return 0;
}
@ -418,6 +420,10 @@ int Gui::show()
gui_static_read_rb( this );
// only launch NSM check callbacks if NSM is setup
if ( gui->getNsm() )
gui_static_nsm_cb( this );
return Fl::run();
}

View File

@ -34,8 +34,22 @@ extern Jack* jack;
extern int jackSamplerate;
Jack::Jack() :
client( jack_client_open ( "Luppp", JackNullOption , 0 , 0 ) ),
void Jack::setup(std::string name)
{
if ( jack == 0 )
{
jack = new Jack( name );
return;
}
else
{
LUPPP_WARN("JACK instance already exists!");
}
}
Jack::Jack( std::string name ) :
client( jack_client_open ( name.c_str(), JackNullOption , 0 , 0 ) ),
state( new State() ),
controllerUpdater( new ControllerUpdater() ),
clientActive(false)

View File

@ -38,9 +38,11 @@ using namespace std;
class Jack
{
public:
Jack();
Jack(std::string name);
~Jack();
static void setup(std::string name);
void activate();
/// quits the JACK client, destroying ports etc. Call only on exit of Luppp.
void quit();

View File

@ -30,7 +30,6 @@ void signalHanlder(int signum)
signalHanlderInt = signum;
}
int main(int argc, char** argv)
{
bool runTests = false;
@ -65,7 +64,8 @@ int main(int argc, char** argv)
int testResult = 0;
// setup the testing Gui / JACK: Jack first, then GUI
jack = new Jack();
Jack::setup();
//jack = new Jack();
gui = new Gui(argv[0]);
// test offline functionality
@ -88,12 +88,19 @@ int main(int argc, char** argv)
#endif
// setup the "real" JACK / Gui: Jack first, then GUI
jack = new Jack();
gui = new Gui(argv[0]);
if ( gui->getNsm() )
{
// the NSM OSC Open message will trigger Jack initialization: necessary
// to use the right name to create the JACK client.
}
else
{
Jack::setup("Luppp");
jack->activate();
}
jack->activate();
gui->show();
return 0;

View File

@ -353,8 +353,6 @@ nsm_set_broadcast_callback( nsm_client_t *nsm, nsm_broadcast_callback *broadcast
NSM_EXPORT int _nsm_osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
printf("NSM OSC OPEN\n");
(void) types;
(void) argc;
(void) msg;
@ -387,8 +385,6 @@ NSM_EXPORT int _nsm_osc_save ( const char *path, const char *types, lo_arg **arg
(void) argv;
(void) argc;
(void) msg;
printf("NSM SAVE()\n");
char *out_msg = NULL;
@ -401,12 +397,10 @@ NSM_EXPORT int _nsm_osc_save ( const char *path, const char *types, lo_arg **arg
if ( r )
{
printf("SEnding save ERROR\n");
OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") );
}
else
{
printf("SEnding save OK\n");
OSC_REPLY( "OK" );
}
if ( out_msg )