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