diff options
Diffstat (limited to 'osc_server.cpp')
-rw-r--r-- | osc_server.cpp | 86 |
1 files changed, 39 insertions, 47 deletions
diff --git a/osc_server.cpp b/osc_server.cpp index 59ead72..ea7c939 100644 --- a/osc_server.cpp +++ b/osc_server.cpp @@ -6,11 +6,7 @@ #include <lo/lo.h> #include "osc_graphics.h" - #include "layer.h" -#include "layer_image.h" -#include "layer_video.h" -#include "layer_box.h" #include "osc_server.h" @@ -58,6 +54,39 @@ generic_handler(const char *path, const char *types, lo_arg **argv, return 1; } +OSCServer::OSCServer(const char *port) +{ + server = lo_server_thread_new(port, error_handler); + + add_method(NULL, generic_handler, NULL, ""); +} + +void +OSCServer::add_method_v(MethodHandlerId **hnd, const char *types, + lo_method_handler handler, void *data, + const char *fmt, va_list ap) +{ + char buf[255]; + + vsnprintf(buf, sizeof(buf), fmt, ap); + lo_server_thread_add_method(server, buf, types, handler, data); + + if (hnd) + *hnd = new MethodHandlerId(types, buf, data); +} + +void +OSCServer::del_method(const char *types, const char *fmt, ...) +{ + char buf[255]; + va_list ap; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + lo_server_thread_del_method(server, buf, types); + va_end(ap); +} + static int dtor_generic_handler(const char *path, const char *types __attribute__((unused)), @@ -83,8 +112,7 @@ ctor_generic_handler(const char *path __attribute__((unused)), void *data __attribute__((unused)), void *user_data) { - OSCServer::ConstructorHandlerCb const_cb = - (OSCServer::ConstructorHandlerCb)user_data; + OSCServer::CtorHandlerCb const_cb = (OSCServer::CtorHandlerCb)user_data; Layer *layer; SDL_Rect geo = { @@ -101,51 +129,15 @@ ctor_generic_handler(const char *path __attribute__((unused)), return 0; } -#define REGISTER_LAYER(CLASS) \ - do { \ - CLASS::register_layer(); \ - add_method(NEW_LAYER_TYPES CLASS##_Info_Types, \ - ctor_generic_handler, (void *)CLASS::ctor_osc, \ - "/layer/new/%s", CLASS##_Info_Name); \ - } while (0) - -OSCServer::OSCServer(const char *port) -{ - server = lo_server_thread_new(port, error_handler); - - add_method(NULL, generic_handler, NULL, ""); - - REGISTER_LAYER(LayerImage); - REGISTER_LAYER(LayerVideo); - REGISTER_LAYER(LayerBox); -} - -#undef REGISTER_LAYER - -void -OSCServer::add_method_v(MethodHandlerId **hnd, const char *types, - lo_method_handler handler, void *data, - const char *fmt, va_list ap) -{ - char buf[255]; - - vsnprintf(buf, sizeof(buf), fmt, ap); - lo_server_thread_add_method(server, buf, types, handler, data); - - if (hnd) - *hnd = new MethodHandlerId(types, buf, data); -} - void -OSCServer::del_method(const char *types, const char *fmt, ...) +OSCServer::register_layer(const char *name, const char *types, + CtorHandlerCb ctor_cb) { char buf[255]; - va_list ap; - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - lo_server_thread_del_method(server, buf, types); - va_end(ap); + snprintf(buf, sizeof(buf), "%s%s", NEW_LAYER_TYPES, types); + add_method(buf, ctor_generic_handler, (void *)ctor_cb, + "/layer/new/%s", name); } struct OscMethodDefaultCtx { |