|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
-
- /*******************************************************************************/
- /* Copyright (C) 2012 Jonathan Moore Liles */
- /* */
- /* 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; see the file COPYING. If not,write to the Free Software */
- /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
- /*******************************************************************************/
-
- #pragma once
-
- #include <lo/lo.h>
-
- namespace NSM
- {
- class Client
- {
- private:
-
- const char *nsm_url;
-
- lo_server _server;
- lo_server_thread _st;
- lo_address nsm_addr;
-
- bool nsm_is_active;
- char *nsm_client_id;
- char *_session_manager_name;
-
- public:
-
- enum {
- ERR_OK = 0,
- ERR_GENERAL = -1,
- ERR_INCOMPATIBLE_API = -2,
- ERR_BLACKLISTED = -3,
- ERR_LAUNCH_FAILED = -4,
- ERR_NO_SUCH_FILE = -5,
- ERR_NO_SESSION_OPEN = -6,
- ERR_UNSAVED_CHANGES = -7,
- ERR_NOT_NOW = -8
- };
-
- Client();
- virtual ~Client();
-
- bool is_active(void) { return nsm_is_active; }
-
- const char *session_manager_name(void) {
- return
- _session_manager_name;
- }
-
- /* Client->Server methods */
- void is_dirty(void);
- void is_clean(void);
- void progress(float f);
- void message(int priority, const char *msg);
- void announce(const char *appliction_name,
- const char *capabilities,
- const char *process_name);
-
- void broadcast(lo_message msg);
-
- /* init without threading */
- int init(const char *nsm_url);
- /* init with threading */
- int init_thread(const char *nsm_url);
-
- /* call this periodically to check for new messages */
- void check(int timeout = 0);
-
- /* or call these to start and stop a thread (must do your own locking in handler!) */
- void start(void);
- void stop(void);
-
- protected:
-
- /* Server->Client methods */
- virtual int command_open(const char *name,
- const char *display_name,
- const char *client_id,
- char **out_msg) = 0;
- virtual int command_save(char **out_msg) = 0;
-
- virtual void command_active(bool) { }
-
- virtual void command_session_is_loaded(void) { }
-
- /* invoked when an unrecognized message is received. Should return 0 if you handled it, -1 otherwise. */
- virtual int command_broadcast(const char *, lo_message) { return -1; }
-
- private:
-
- /* osc handlers */
- static int osc_open(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- static int osc_save(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- static int osc_announce_reply(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- static int osc_error(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- static int osc_session_is_loaded(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- static int osc_broadcast(const char *path,
- const char *types,
- lo_arg **argv,
- int argc,
- lo_message msg,
- void *user_data);
- };
- };
|