void qtractorNsmClient::reply ( const QString& path, ReplyCode reply_code ) { const char *reply_mesg; switch (reply_code) { case ERR_OK: reply_mesg = "OK"; break; case ERR_GENERAL: reply_mesg = "ERR_GENERAL"; break; case ERR_INCOMPATIBLE_API: reply_mesg = "ERR_INCOMPATIBLE_API"; break; case ERR_BLACKLISTED: reply_mesg = "ERR_BLACKLISTED"; break; case ERR_LAUNCH_FAILED: reply_mesg = "ERR_LAUNCH_FAILED"; break; case ERR_NO_SUCH_FILE: reply_mesg = "ERR_NO_SUCH_FILE"; break; case ERR_NO_SESSION_OPEN: reply_mesg = "ERR_NO_SESSION_OPEN"; break; case ERR_UNSAVED_CHANGES: reply_mesg = "ERR_UNSAVED_CHANGES"; break; case ERR_NOT_NOW: reply_mesg = "ERR_NOT_NOW"; break; default: reply_mesg = "(UNKNOWN)"; break; } #ifdef CONFIG_LIBLO if (m_address && m_server) { if (reply_code == ERR_OK) { lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, "/reply", "ss", path.toUtf8().constData(), reply_mesg); } else { lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, "/error", "sis", path.toUtf8().constData(), int(reply_code), reply_mesg); } } #endif }
int osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) { const char *new_path = &argv[0]->s; const char *display_name = &argv[1]->s; const char *client_id = &argv[2]->s; if ( nsm_client_id ) free(nsm_client_id); nsm_client_id = strdup( client_id ); if ( nsm_display_name ) free( nsm_display_name ); nsm_display_name = strdup( display_name ); char *new_filename; mkdir( new_path, 0777 ); chdir( new_path ); asprintf( &new_filename, "%s/%s", new_path, CONFIG_FILE_NAME ); struct stat st; if ( 0 == stat( new_filename, &st ) ) { if ( open( new_path ) ) { } else { lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/error", "sis", path, -1, "Could not open file" ); return 0; } lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); } else { show_gui(); } if ( project_file ) free( project_file ); project_file = strdup( new_path ); // new_filename; lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/reply", "ss", path, "OK" ); if ( gui_addr ) nsm_proxy->update( gui_addr ); return 0; }
void update ( lo_address to ) { DMESSAGE( "Sending update" ); lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/save_signal", "i", _save_signal ); lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/label", "s", _label ? _label : "" ); lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/executable", "s", _executable ? _executable : "" ); lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/arguments", "s", _arguments ? _arguments : "" ); }
void close_joystick( int joy_idx ){ if ( !SDL_JoystickOpened( joy_idx ) ){ lo_send_from( t, s, LO_TT_IMMEDIATE, "/joystick/close/error", "i", joy_idx ); return; } // joy_map_t::const_iterator it; lo_send_from( t, s, LO_TT_IMMEDIATE, "/joystick/closed", "is", joy_idx, SDL_JoystickName( joy_idx ) ); SDL_JoystickClose( joysticks.find( joy_idx )->second ); joysticks.erase( joysticks.find( joy_idx ) ); }
int osc_hide_gui ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) { hide_gui(); lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); /* FIXME: detect errors */ lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/reply", "ss", path, "OK" ); return 0; }
int osc_save ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) { bool r = snapshot( project_file ); nsm_proxy->save(); if ( r ) lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/reply", "ss", path, "OK" ); else lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/error", "sis", path, -1, "Error saving project file" ); return 0; }
static void info_reply_rotation(lo_address *to, sosc_state_t *state) { if( monome_get_cols(state->monome) != monome_get_rows(state->monome) ) info_reply_size(to, state); lo_send_from(to, state->server, LO_TT_IMMEDIATE, "/sys/rotation", "i", monome_get_rotation(state->monome) * 90); }
void Client::announce(const char *application_name, const char *capabilities, const char *process_name) { // MESSAGE( "Announcing to NSM" ); lo_address to = lo_address_new_from_url(nsm_url); if(!to) // MESSAGE( "Bad address" ); return; int pid = (int)getpid(); lo_send_from(to, _server, LO_TT_IMMEDIATE, "/nsm/server/announce", "sssiii", application_name, capabilities, process_name, 1, /* api_major_version */ 0, /* api_minor_version */ pid); lo_address_free(to); }
static int notify(sosc_ipc_type_t type, sosc_device_info_t *dev) { lo_address dst; char *path; int i; switch (type) { case SOSC_DEVICE_CONNECTION: path = "/serialosc/add"; break; case SOSC_DEVICE_DISCONNECTION: path = "/serialosc/remove"; break; default: return 1; } for (i = 0; i < notifications.count; i++) { if (!(dst = lo_address_new( notifications.endpoints[i].host, notifications.endpoints[i].port))) { fprintf(stderr, "notify(): couldn't allocate lo_address\n"); continue; } lo_send_from(dst, srv, LO_TT_IMMEDIATE, path, "ssi", dev->serial, dev->friendly, dev->port); lo_address_free(dst); } return 0; }
RelayExpr() { // Create local relay relay = new RmmApp(RELAY_PORT, "R0"); client = new RmmApp(SOURCE_PORT, "CLIENT", MONITOR_PORT); relay->start(false); client->start(false); usleep(1e6); client->requestRegistration(SERVER_IP_VIRGINIA, RELAY_PORT); usleep(1e6); // ask the relay to redirect client->join(SERVER_IP, RELAY_PORT); usleep(1e6); lo_address target = lo_address_new(SERVER_IP, RELAY_PORT); lo_send_from(target, client->getserverptr(), LO_TT_IMMEDIATE, "/status", ""); lo_address_free(target); client->setTestListener(this); client->changeTargetName(SERVER_NAME); client->addRelayConnection(SERVER_IP_VIRGINIA, RELAY_PORT); client->addRelayConnection(SERVER_IP_TX, RELAY_PORT); client->addRelayConnection(SERVER_IP_GA, RELAY_PORT); client->addRelayConnection(SERVER_IP_UK, RELAY_PORT); for (int a = 0; a < 1000; ++a) { usleep(1000); client->poll(); relay->poll(); } }
void handle_sigchld ( ) { for ( ;; ) { int status; pid_t pid = waitpid(-1, &status, WNOHANG); if (pid <= 0) break; if ( pid == gui_pid ) { lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", "" ); gui_pid = 0; /* don't care... */ continue; } /* otherwise, it was our proxied process that died, so we should die too */ printf( "proxied process died... nsm-proxy dying too\n" ); die_now = 1; } }
void show_gui ( void ) { int pid; if ( ! (pid = fork()) ) { char executable[] = "nsm-proxy-gui"; MESSAGE( "Launching %s\n", executable ); char *url = lo_server_get_url( losrv ); char *args[] = { executable, strdup( "--connect-to" ), url, NULL }; if ( -1 == execvp( executable, args ) ) { WARNING( "Error starting process: %s", strerror( errno ) ); exit(-1); } } gui_pid = pid; lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/gui_is_shown", "" ); }
static void handle_enc_key(const monome_event_t *e, void *data) { sosc_state_t *state = data; char *cmd; cmd = osc_path("enc/key", state->config.app.osc_prefix); lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, "ii", e->encoder.number, e->event_type == MONOME_ENCODER_KEY_DOWN); s_free(cmd); }
static void handle_tilt(const monome_event_t *e, void *data) { sosc_state_t *state = data; char *cmd; cmd = osc_path("tilt", state->config.app.osc_prefix); lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, "iiii", e->tilt.sensor, e->tilt.x, e->tilt.y, e->tilt.z); s_free(cmd); }
static void send_connection_status(sosc_state_t *state, int status) { char *cmd, *cmds[] = { "/sys/disconnect", "/sys/connect" }; cmd = cmds[status & 1]; lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, ""); }
static void monome_handle_press(const monome_event_t *e, void *data) { char *cmd; char *prefix = data; ASPRINTF_OR_BAIL(&cmd, "/%s/press", prefix); lo_send_from(state.outgoing, state.server, LO_TT_IMMEDIATE, cmd, "iii", e->grid.x, e->grid.y, e->event_type); m_free(cmd); }
void open_joystick( int joy_idx ){ if ( SDL_JoystickOpened( joy_idx ) ){ return; } SDL_Joystick * newjoy = SDL_JoystickOpen( joy_idx ); if (!newjoy) { fprintf(stderr, "Unable to open joystick %d\n", joy_idx); lo_send_from( t, s, LO_TT_IMMEDIATE, "/joystick/open/error", "i", joy_idx ); } else { joysticks[ joy_idx ] = newjoy; lo_send_from( t, s, LO_TT_IMMEDIATE, "/joystick/open", "is", joy_idx, SDL_JoystickName( joy_idx ) ); // /// add to the vector: // joysticks.push_back( newjoy ); } }
static void handle_press(const monome_event_t *e, void *data) { sosc_state_t *state = data; char *cmd; cmd = osc_path("grid/key", state->config.app.osc_prefix); lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, "iii", e->grid.x, e->grid.y, e->event_type == MONOME_BUTTON_DOWN); s_free(cmd); }
// added by owen for Chronome static void handle_pressure(const monome_event_t *e, void *data) { sosc_state_t *state = data; char *cmd; cmd = osc_path("grid/pressure", state->config.app.osc_prefix); lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, "iii", e->pressure.x, e->pressure.y, e->pressure.value); s_free(cmd); }
static void handle_enc_delta(const monome_event_t *e, void *data) { sosc_state_t *state = data; char *cmd; cmd = osc_path("enc/delta", state->config.app.osc_prefix); lo_send_from(state->outgoing, state->server, LO_TT_IMMEDIATE, cmd, "ii", e->encoder.number, e->encoder.delta); s_free(cmd); }
void label ( const char *s ) { if ( _label ) free( _label ); _label = strdup( s ); lo_send_from( nsm_addr, losrv, LO_TT_IMMEDIATE, "/nsm/client/label", "s", _label ); }
void qtractorNsmClient::progress ( float percent ) { #ifdef CONFIG_LIBLO if (m_address && m_server && m_active) { lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, "/nsm/client/progress", "f", percent); } #endif }
void Client::is_clean(void) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/is_clean", ""); }
void qtractorNsmClient::message ( int priority, const QString& mesg ) { #ifdef CONFIG_LIBLO if (m_address && m_server && m_active) { lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, "/nsm/client/message", "is", priority, mesg.toUtf8().constData()); } #endif }
void Client::progress(float p) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/progress", "f", p); }
static int filepath_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { lo_address src = lo_message_get_source( msg ); lo_server serv = (lo_server)user_data; int result; // Send back reply if (input_file->filepath) { result = lo_send_from( src, serv, LO_TT_IMMEDIATE, "/deck/filepath", "s", input_file->filepath ); } else { // Empty filepath result = lo_send_from( src, serv, LO_TT_IMMEDIATE, "/deck/filepath", "s", "" ); } if (result<1) fprintf(stderr, "Error: sending reply failed: %s\n", lo_address_errstr(src)); return 0; }
int subtest_handler(const char *path, const char *types, lo_arg **argv, int argc, lo_message data, void *user_data) { lo_address a = lo_message_get_source(data); subtest_count++; printf("got subtest message %d\n", subtest_count); lo_send_from(a, lo_server_thread_get_server(user_data), LO_TT_IMMEDIATE, "/subtest", "i", subtest_count); return 0; }
void Client::message(int priority, const char *msg) { if(nsm_is_active) lo_send_from(nsm_addr, _server, LO_TT_IMMEDIATE, "/nsm/client/message", "is", priority, msg); }
void qtractorNsmClient::visible ( bool is_visible ) { #ifdef CONFIG_LIBLO if (m_address && m_server && m_active) { const char *path = is_visible ? "/nsm/client/gui_is_shown" : "/nsm/client/gui_is_hidden"; lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, path, ""); } #endif }
// Session client methods. void qtractorNsmClient::dirty ( bool is_dirty ) { #ifdef CONFIG_LIBLO if (m_address && m_server && m_active) { const char *path = is_dirty ? "/nsm/client/is_dirty" : "/nsm/client/is_clean"; lo_send_from(m_address, m_server, LO_TT_IMMEDIATE, path, ""); } #endif }