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 Provider
nix
Owen Green 6 years ago
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,14 @@
// A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Unions Horizon 2020 research and innovation programme (grant agreement No 725899)
#include <clients/rt/AmpSlice.hpp>
#include <FluidSCWrapper.hpp>
static InterfaceTable *ft;
PluginLoad(FluidSTFTUGen)
{
ft = inTable;
using namespace fluid::client;
makeSCWrapper<AmpSliceClient>("FluidAmpSlice", ft);
}

@ -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,17 @@
// A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Unions Horizon 2020 research and innovation programme (grant agreement No 725899)
#include <clients/nrt/ProviderTest.hpp>
#include <clients/nrt/SubscriberTest.hpp>
#include <FluidSCWrapper.hpp>
static InterfaceTable *ft;
PluginLoad(FluidSTFTUGen)
{
ft = inTable;
using namespace fluid::client;
makeSCWrapper<NRTThreadedProviderTest>("FluidProviderTest", ft);
makeSCWrapper<NRTThreadedSubscriberTest>("FluidSubscriberTest", ft);
}

@ -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})

@ -8,6 +8,9 @@ b = Buffer.read(s,File.realpath(FluidMessageTest.class.filenameSymbol).dirname.w
~messageTest.testAccessBuffer(nil,a.nodeID,b,{|msg| msg.postln}); ~messageTest.testAccessBuffer(nil,a.nodeID,b,{|msg| msg.postln});
b.numFrames b.numFrames
~messageTest.testPassString(nil,a.nodeID,'hello, you big lovely server',1,2,3,{'testPassString Done'.postln}); ~messageTest.testPassString(nil,a.nodeID,'hello, you big lovely server',1,2,3,{'testPassString Done'.postln});
~messageTest.testReturnBuffer(nil,a.nodeID,b,{|buffer| b.numFrames.postln});
~messageTest.testReturnHetero(nil,a.nodeID,{|x|x.postln});
a.free
// OSCFunc.trace(true) // OSCFunc.trace(true)
// OSCFunc.trace(false) // OSCFunc.trace(false)
Loading…
Cancel
Save