aboutsummaryrefslogtreecommitdiff
path: root/osc_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'osc_server.cpp')
-rw-r--r--osc_server.cpp86
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 {