diff --git a/example-clients/simple_client.c b/example-clients/simple_client.c index 79ca4fa..9f9ee02 100644 --- a/example-clients/simple_client.c +++ b/example-clients/simple_client.c @@ -37,6 +37,17 @@ process (jack_nframes_t nframes, void *arg) return 0; } +char *session_callback( jack_session_event_t code, char *path, char *prefix, void *arg ) +{ + printf( "session notification\n" ); + printf( "path %s, prefix %s, type: %s", path, prefix, code == JackSessionSave ? "save" : "quit" ); + + if( code == JackSessionQuit ) + exit(1); + + return strdup( "jack_simpleclient" ); +} + /** * JACK calls this shutdown_callback if the server ever shuts down or * decides to disconnect the client. @@ -88,6 +99,7 @@ main (int argc, char *argv[]) jack_on_shutdown (client, jack_shutdown, 0); + jack_set_session_callback( client, session_callback, NULL ); /* display the current sample rate. */ diff --git a/tools/Makefile.am b/tools/Makefile.am index 9ac94c4..6616f05 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -38,6 +38,7 @@ bin_PROGRAMS = jack_load \ jack_alias \ jack_bufsize \ jack_samplerate \ + jack_session_notify \ jack_wait \ $(JACK_TRANSPORT) \ $(NETJACK_TOOLS) @@ -96,6 +97,10 @@ jack_samplerate_SOURCES = samplerate.c jack_samplerate_LDFLAGS = @OS_LDFLAGS@ jack_samplerate_LDADD = $(top_builddir)/libjack/libjack.la +jack_session_notify_SOURCES = session_notify.c +jack_session_notify_LDFLAGS = @OS_LDFLAGS@ +jack_session_notify_LDADD = $(top_builddir)/libjack/libjack.la + if HAVE_READLINE jack_transport_SOURCES = transport.c jack_transport_LDFLAGS = -lreadline @READLINE_DEPS@ @OS_LDFLAGS@ diff --git a/tools/session_notify.c b/tools/session_notify.c new file mode 100644 index 0000000..5e45929 --- /dev/null +++ b/tools/session_notify.c @@ -0,0 +1,102 @@ +/* + * smaplerate.c -- get current samplerate + * + * Copyright (C) 2003 Jack O'Quin. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +char *package; /* program name */ +jack_client_t *client; + +jack_session_event_t notify_type; +char *save_path = NULL; + +void jack_shutdown(void *arg) +{ + fprintf(stderr, "JACK shut down, exiting ...\n"); + exit(1); +} + +void signal_handler(int sig) +{ + jack_client_close(client); + fprintf(stderr, "signal received, exiting ...\n"); + exit(0); +} + +void parse_arguments(int argc, char *argv[]) +{ + + /* basename $0 */ + package = strrchr(argv[0], '/'); + if (package == 0) + package = argv[0]; + else + package++; + + if (argc==2) { + if( !strcmp( argv[1], "quit" ) ) { + notify_type = JackSessionQuit; + return; + } + } + if (argc==3) { + if( !strcmp( argv[1], "save" ) ) { + notify_type = JackSessionSave; + save_path = argv[2]; + } + + } + fprintf(stderr, "usage: %s quit|save [path]\n", package); + exit(9); +} + +int main(int argc, char *argv[]) +{ + parse_arguments(argc, argv); + int retval; + + /* become a JACK client */ + if ((client = jack_client_new(package)) == 0) { + fprintf(stderr, "JACK server not running?\n"); + exit(1); + } + + signal(SIGQUIT, signal_handler); + signal(SIGTERM, signal_handler); + signal(SIGHUP, signal_handler); + signal(SIGINT, signal_handler); + + jack_on_shutdown(client, jack_shutdown, 0); + + + retval = jack_session_notify( client, notify_type, save_path ); + printf( "session notify returned: %d", retval ); + + + jack_client_close(client); + + return 0; +}