Add compile-bundled targets for FluidManipulation objects (needed to share memory space between shared clients)
Add compile-bundled Subscriber-Provider Tests target Add SC test files for Messaging, Subscriber Providernix
parent
b2a4f32264
commit
6073ccadaf
@ -0,0 +1,32 @@
|
|||||||
|
FluidMessageResponse : Object
|
||||||
|
{
|
||||||
|
//selectors is an array of functions
|
||||||
|
//my cunning thought is that those that need extra data (e..g numbers()) can
|
||||||
|
//use partial applicaiton
|
||||||
|
*collectArgs{ |selectors,a|
|
||||||
|
var response = [];
|
||||||
|
var idx = 0;
|
||||||
|
selectors.do{ |selector|
|
||||||
|
var newThings;
|
||||||
|
# newThings,idx = selector.value(a, idx);
|
||||||
|
response = response.add(newThings);
|
||||||
|
};
|
||||||
|
^response
|
||||||
|
}
|
||||||
|
|
||||||
|
*string{ |a, offset|
|
||||||
|
var split = a.find([0],offset);
|
||||||
|
var res;
|
||||||
|
if(split.isNil) {"ERROR: can't parse string from server".throw};
|
||||||
|
^[a.copyRange(offset,split-1).keep(split).collectAs({|x|x.asInt.asAscii},String), split + 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
*numbers{ |a, n, offset|
|
||||||
|
^[a.copyRange(offset, offset + n),offset + n]
|
||||||
|
}
|
||||||
|
|
||||||
|
*buffer{ |a,server,offset|
|
||||||
|
server = server ? Server.default ;
|
||||||
|
^[Buffer.cachedBufferAt(server, a[offset]), offset + 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
FluidMessageTest : UGen {
|
||||||
|
|
||||||
|
var server;
|
||||||
|
|
||||||
|
*kr{ |doneAction = 0|
|
||||||
|
|
||||||
|
^this.multiNew('control', doneAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
testReturnStrings { |server, nodeID, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnStrings');
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var resp =FluidMessageResponse.collectArgs(
|
||||||
|
4.collect{string(FluidMessageResponse,_,_)}, msg.drop(3));
|
||||||
|
if(action.notNil){action.value(resp);};
|
||||||
|
},'/testReturnStrings').oneShot;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
testReturnNumbers{ |server, nodeID, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnNumbers');
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = FluidMessageResponse.collectArgs(
|
||||||
|
[numbers(FluidMessageResponse,_,100,_)], msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testReturnNumbers').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
testReturnOneString{ |server, nodeID, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnOneString');
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = FluidMessageResponse.collectArgs(
|
||||||
|
[string(FluidMessageResponse,_,_)], msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testReturnOneString').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
testReturnOneNumber{ |server, nodeID, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnOneNumber');
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = msg.drop(3);
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testReturnOneNumber').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
testAccessBuffer{ |server, nodeID, buf, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testAccessBuffer', buf.asUGenInput);
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = FluidMessageResponse.collectArgs([numbers(FluidMessageResponse,_,1,_)],msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testAccessBuffer').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
testPassString{ |server, nodeID, str, a, b, c, d, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testPassString', str, a, b, c);
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
if(action.notNil){action.value;};
|
||||||
|
},'/testPassString').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
testReturnBuffer{ |server, nodeID, b, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnBuffer', b.asUGenInput);
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = result = FluidMessageResponse.collectArgs([buffer(FluidMessageResponse,_,server,_)],msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testReturnBuffer').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
testReturnHetero{ |server, nodeID, action|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.sendMsg('/u_cmd',nodeID,this.synthIndex,'testReturnHetero');
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = result = FluidMessageResponse.collectArgs([string(FluidMessageResponse,_,_), numbers(FluidMessageResponse,_,2,_)],msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result);};
|
||||||
|
},'/testReturnHetero').oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
FluidProviderTest : UGen {
|
||||||
|
|
||||||
|
/* var <> server;
|
||||||
|
var <> nodeID;
|
||||||
|
|
||||||
|
*new{ |server, name|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
*kr{ |name|
|
||||||
|
^this.multiNew('control',name);
|
||||||
|
}
|
||||||
|
|
||||||
|
*new1 { |rate, name|
|
||||||
|
var ascii = name.ascii;
|
||||||
|
^super.new1(*[rate, ascii.size].addAll(ascii));
|
||||||
|
}
|
||||||
|
|
||||||
|
init { |size...chars|
|
||||||
|
//Send the number of inputs (size of provider string) as specialIndex,
|
||||||
|
//so server plugin knows what's going onnode
|
||||||
|
specialIndex = -1;
|
||||||
|
inputs = [size].addAll(chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
addPoint{|server, nodeID, args, action|
|
||||||
|
this.pr_sendMsg(server, nodeID, 'addPoint',args,action);
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePoint{|server, nodeID, args, action|
|
||||||
|
this.pr_sendMsg(server, nodeID, 'updatePoint',args,action);
|
||||||
|
}
|
||||||
|
|
||||||
|
deletePoint{|server, nodeID, args, action|
|
||||||
|
this.pr_sendMsg(server,nodeID, 'deletePoint',args,action);
|
||||||
|
}
|
||||||
|
|
||||||
|
pr_sendMsg { |server, nodeID, msg, args, action,parser|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.listSendMsg(['/u_cmd',nodeID.nodeID,this.synthIndex,msg].addAll(args));
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = FluidMessageResponse.collectArgs(parser,msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result)}{action.value};
|
||||||
|
},'/'++msg).oneShot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
FluidSubscriberTest : UGen {
|
||||||
|
|
||||||
|
var <> providerName;
|
||||||
|
var <> nodeID;
|
||||||
|
|
||||||
|
*kr { |provider|
|
||||||
|
^this.multiNew('control',provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
*new1 { |rate, provider|
|
||||||
|
var ascii = provider.ascii;
|
||||||
|
^super.new1(*[rate, ascii.size].addAll(ascii));
|
||||||
|
}
|
||||||
|
|
||||||
|
init { |size...chars|
|
||||||
|
//Send the number of inputs (size of provider string) as specialIndex,
|
||||||
|
//so server plugin knows what's going on
|
||||||
|
specialIndex = -1;
|
||||||
|
inputs = [size].addAll(chars);
|
||||||
|
providerName = chars.collectAs({|x|x.asInt.asAscii}, String);
|
||||||
|
}
|
||||||
|
|
||||||
|
providerLookup { |server, nodeID, label, action|
|
||||||
|
this.pr_sendMsg(server, nodeID, 'providerLookup', label, action,
|
||||||
|
[string(FluidMessageResponse,_,_),numbers(FluidMessageResponse,_,2,_)] );
|
||||||
|
}
|
||||||
|
|
||||||
|
pr_sendMsg { |server, nodeID, msg, args, action,parser|
|
||||||
|
|
||||||
|
server = server ? Server.default;
|
||||||
|
|
||||||
|
server.listSendMsg(['/u_cmd',nodeID.nodeID,this.synthIndex,msg].addAll(args));
|
||||||
|
|
||||||
|
OSCFunc(
|
||||||
|
{ |msg|
|
||||||
|
var result = FluidMessageResponse.collectArgs(parser,msg.drop(3));
|
||||||
|
if(action.notNil){action.value(result)}{action.value};
|
||||||
|
},'/'++msg).oneShot;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.3)
|
||||||
|
get_filename_component(PLUGIN ${CMAKE_CURRENT_LIST_DIR} NAME_WE)
|
||||||
|
message("Configuring ${PLUGIN}")
|
||||||
|
set(FILENAME ${PLUGIN}.cpp)
|
||||||
|
|
||||||
|
add_library(
|
||||||
|
${PLUGIN}
|
||||||
|
MODULE
|
||||||
|
${FILENAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
${PLUGIN} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../../include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
${PLUGIN} PRIVATE FLUID_DECOMPOSITION
|
||||||
|
)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake)
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.3)
|
||||||
|
get_filename_component(PLUGIN ${CMAKE_CURRENT_LIST_DIR} NAME_WE)
|
||||||
|
message("Configuring ${PLUGIN}")
|
||||||
|
set(FILENAME ${PLUGIN}.cpp)
|
||||||
|
|
||||||
|
add_library(
|
||||||
|
${PLUGIN}
|
||||||
|
MODULE
|
||||||
|
${FILENAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
${PLUGIN} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../../include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
${PLUGIN} PRIVATE FLUID_DECOMPOSITION
|
||||||
|
)
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/../../scripts/target_post.cmake)
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
~provider
|
||||||
|
~subscriber
|
||||||
|
a = {~subscriber = FluidSubscriberTest.kr(\bollocks)}.play
|
||||||
|
b = {~provider = FluidProviderTest.kr(\bollocks)}.play
|
||||||
|
~provider.addPoint(Server.default,b,['foo', 1,2],{'Added'.postln})
|
||||||
|
~subscriber.providerLookup(Server.default,a,['foo'],{|msg| msg.postln})
|
||||||
|
~provider.updatePoint(Server.default,b,['foo', 3,4],{'Upadted'.postln})
|
||||||
|
~subscriber.providerLookup(Server.default,a,['foo'],{|msg| msg.postln})
|
||||||
|
~provider.deletePoint(Server.default,b,['foo'],{'Deleted'.postln})
|
||||||
|
~subscriber.providerLookup(Server.default,a,['foo'],{|msg| msg.postln})
|
||||||
|
|
||||||
Loading…
Reference in New Issue