commit 1e0d0b21e98716788ba55c96fa336ab4849101e1
parent 85697b81a3373f7546c6526b6c61012a2e49fba9
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Thu, 13 Feb 2014 12:14:11 -0500
OSC: Add Better Broadcast Functionality
- Prevent UI from getting out of sync with external changes
- Open up extension for remote receivers
Diffstat:
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -138,10 +138,15 @@ class DataObj:public rtosc::RtData
virtual void broadcast(const char *path, const char *args, ...) override{
va_list va;
va_start(va,args);
+ reply("/broadcast");
char *buffer = bToU->buffer();
rtosc_vmessage(buffer,bToU->buffer_size(),path,args,va);
reply(buffer);}
- virtual void broadcast(const char *msg) override{reply(msg);};
+ virtual void broadcast(const char *msg) override
+ {
+ reply("/broadcast");
+ reply(msg);
+ };
private:
rtosc::ThreadLink *bToU;
};
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -411,6 +411,7 @@ struct MiddleWareImpl
uToB->write("/load-master", "b", sizeof(Master*), &m);
}
+ bool broadcast = false;
void tick(void)
{
lo_server_recv_noblock(server, 0);
@@ -427,6 +428,21 @@ struct MiddleWareImpl
} else if(!strcmp(rtmsg, "/setprogram")
&& !strcmp(rtosc_argument_string(rtmsg),"cc")) {
loadPart(rtosc_argument(rtmsg,0).i, master->bank.ins[rtosc_argument(rtmsg,1).i].filename.c_str(), master, osc);
+ } else if(!strcmp(rtmsg, "/broadcast")) {
+ broadcast = true;
+ } else if(broadcast) {
+ broadcast = false;
+ cb(ui, rtmsg);
+ if(curr_url != "GUI") {
+ lo_message msg = lo_message_deserialise((void*)rtmsg,
+ rtosc_message_length(rtmsg, bToU->buffer_size()), NULL);
+
+ //Send to known url
+ if(!curr_url.empty()) {
+ lo_address addr = lo_address_new_from_url(curr_url.c_str());
+ lo_send_message(addr, rtmsg, msg);
+ }
+ }
} else if(curr_url == "GUI") {
cb(ui, rtmsg); //GUI::raiseUi(gui, bToU->read());
} else{