-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(); handleGuiEvents();
nsm_check_nowait( gui->getNsm() );
Fl::repeat_timeout( 1 / 30.f, &gui_static_read_rb, inst); 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) void option_controller_cb(Fl_Widget*,void* data)
{ {
LUPPP_NOTE("%s","Controller cb"); LUPPP_NOTE("%s","Controller cb");
@ -229,31 +233,29 @@ static int cb_nsm_open (const char *name,
char **out_msg, char **out_msg,
void *userdata ) void *userdata )
{ {
//printf("nsm open()\n", out_msg[0] ); LUPPP_NOTE("NSM: Open, displayname: %s", display_name );
LUPPP_NOTE("NSM open() loading session"); Jack::setup( client_id );
//gui->getDiskReader()->readSession( fnfc.filename() );
//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; return ERR_OK;
} }
static int cb_nsm_save ( char **out_msg, void *userdata ) static int cb_nsm_save ( char **out_msg, void *userdata )
{ {
printf("nsm save()\n"); LUPPP_NOTE("NSM: saving session as %s", *out_msg );
//do_save_stuff();
LUPPP_NOTE("%s %s","Saving session as ", out_msg[0] ); // disk-writer already initialized to the right directory, so just write!
//gui->getDiskWriter()->initialize( getenv("HOME"), out_msg );
EventStateSave e; EventStateSave e;
//writeToDspRingbuffer( &e ); writeToDspRingbuffer( &e );
return 0; return 0;
} }
@ -418,6 +420,10 @@ int Gui::show()
gui_static_read_rb( this ); 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(); return Fl::run();
} }

View File

@ -34,8 +34,22 @@ extern Jack* jack;
extern int jackSamplerate; extern int jackSamplerate;
Jack::Jack() : void Jack::setup(std::string name)
client( jack_client_open ( "Luppp", JackNullOption , 0 , 0 ) ), {
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() ), state( new State() ),
controllerUpdater( new ControllerUpdater() ), controllerUpdater( new ControllerUpdater() ),
clientActive(false) clientActive(false)

View File

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

View File

@ -30,7 +30,6 @@ void signalHanlder(int signum)
signalHanlderInt = signum; signalHanlderInt = signum;
} }
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
bool runTests = false; bool runTests = false;
@ -65,7 +64,8 @@ int main(int argc, char** argv)
int testResult = 0; int testResult = 0;
// setup the testing Gui / JACK: Jack first, then GUI // setup the testing Gui / JACK: Jack first, then GUI
jack = new Jack(); Jack::setup();
//jack = new Jack();
gui = new Gui(argv[0]); gui = new Gui(argv[0]);
// test offline functionality // test offline functionality
@ -88,12 +88,19 @@ int main(int argc, char** argv)
#endif #endif
// setup the "real" JACK / Gui: Jack first, then GUI // setup the "real" JACK / Gui: Jack first, then GUI
jack = new Jack();
gui = new Gui(argv[0]); 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(); gui->show();
return 0; 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 ) 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) types;
(void) argc; (void) argc;
(void) msg; (void) msg;
@ -387,8 +385,6 @@ NSM_EXPORT int _nsm_osc_save ( const char *path, const char *types, lo_arg **arg
(void) argv; (void) argv;
(void) argc; (void) argc;
(void) msg; (void) msg;
printf("NSM SAVE()\n");
char *out_msg = NULL; 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 ) if ( r )
{ {
printf("SEnding save ERROR\n");
OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") ); OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") );
} }
else else
{ {
printf("SEnding save OK\n");
OSC_REPLY( "OK" ); OSC_REPLY( "OK" );
} }
if ( out_msg ) if ( out_msg )