New free message; no dice if server not running; working freeAll

nix
Owen Green 6 years ago
parent 3777057995
commit d6905db3a3

@ -18,8 +18,9 @@ FluidDataSet : FluidManipulationClient {
*new { |server,name| *new { |server,name|
if(this.at(server,name).notNil){ if(this.at(server,name).notNil){
FluidDataSetExistsError("A FluidDataset called % already exists.".format(name)).throw; FluidDataSetExistsError("A FluidDataset called % already exists.".format(name)).throw;
^nil
} }
{^super.new(server,*FluidManipulationClient.prServerString(name)).init(name)} ^super.new(server,*FluidManipulationClient.prServerString(name))!?{|inst|inst.init(name);inst}
} }
init {|name| init {|name|
@ -76,16 +77,12 @@ FluidDataSet : FluidManipulationClient {
this.prSendMsg(\clear,[],action); this.prSendMsg(\clear,[],action);
} }
free { |action| free {
serverCaches.remove(server,id); serverCaches.remove(server,id);
fork{ super.free;
if(server.serverRunning){this.prSendMsg(\free,[],action)};
server.sync;
super.free;
}
} }
*freeAll { |server| *freeAll { |server|
serverCaches.tryPerform(\clearCache,server); serverCaches.do(server,{|x|x.free;});
} }
} }

@ -1,42 +1,37 @@
FluidKDTree : FluidManipulationClient { FluidKDTree : FluidManipulationClient {
var id; var id;
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|
id = uid; id = uid;
} }
fit{|dataset,action| fit{|dataset,action|
this.prSendMsg(\fit,[dataset.asUGenInput],action); this.prSendMsg(\fit,[dataset.asUGenInput],action);
} }
kNearest{ |buffer, k,action| kNearest{ |buffer, k,action|
this.prSendMsg(\kNearest,[buffer.asUGenInput,k],action,k.collect{string(FluidMessageResponse,_,_)}); this.prSendMsg(\kNearest,[buffer.asUGenInput,k],action,k.collect{string(FluidMessageResponse,_,_)});
} }
kNearestDist { |buffer, k,action| kNearestDist { |buffer, k,action|
this.prSendMsg(\kNearestDist,[buffer.asUGenInput,k],action,[numbers(FluidMessageResponse,_,k,_)]); this.prSendMsg(\kNearestDist,[buffer.asUGenInput,k],action,[numbers(FluidMessageResponse,_,k,_)]);
} }
cols { |action| cols { |action|
this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]); this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]);
} }
read{ |filename,action| read{ |filename,action|
this.prSendMsg(\read,[filename.asString],action); this.prSendMsg(\read,[filename.asString],action);
} }
write{ |filename,action| write{ |filename,action|
this.prSendMsg(\write,[filename.asString],action); this.prSendMsg(\write,[filename.asString],action);
} }
free { |action|
if(server.serverRunning){this.prSendMsg(\free,[],action)};
super.free;
}
} }

@ -4,7 +4,7 @@ FluidKMeans : FluidManipulationClient {
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|

@ -2,7 +2,7 @@ FluidKNN : FluidManipulationClient {
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|

@ -18,7 +18,7 @@ FluidLabelSet : FluidManipulationClient {
serverCaches.at(server,name) !? { serverCaches.at(server,name) !? {
FluidLabelSetExistsError("A FluidLabelSet called % already exists.".format(name)).throw; FluidLabelSetExistsError("A FluidLabelSet called % already exists.".format(name)).throw;
}; };
^super.new(server,*FluidManipulationClient.prServerString(name)).init(name) ^super.new(server,*FluidManipulationClient.prServerString(name))!?{|inst|inst.init(name);inst}
} }
init { |name| init { |name|
@ -73,11 +73,10 @@ FluidLabelSet : FluidManipulationClient {
free { |action| free { |action|
serverCaches.remove(server,id); serverCaches.remove(server,id);
if(server.serverRunning){this.prSendMsg(\free,[],action)};
super.free; super.free;
} }
*freeAll { |server| *freeAll { |server|
serverCaches.tryPerform(\clearCache,server); serverCaches.do(server,{|x|x.free;});
} }
} }

@ -37,7 +37,7 @@ FluidManipulationClient {
*new{ |server...args| *new{ |server...args|
server = server ? Server.default; server = server ? Server.default;
if(server.serverRunning.not,{ if(server.serverRunning.not,{
(this.asString + " server not running").warn; (this.asString + " server not running").error; ^nil
}); });
^super.newCopyArgs(server ?? {Server.default}).baseinit(*args) ^super.newCopyArgs(server ?? {Server.default}).baseinit(*args)
} }
@ -72,6 +72,7 @@ FluidManipulationClient {
free{ free{
persist = false; persist = false;
if(server.serverRunning){server.sendMsg("/cmd","free"++this.class.name,id)};
synth.tryPerform(\free); synth.tryPerform(\free);
^nil ^nil
} }
@ -102,6 +103,10 @@ FluidServerCache {
cache = IdentityDictionary.new; cache = IdentityDictionary.new;
} }
do { |server, func|
cache[server]!?{cache[server].do{|x|func.value(x)}}
}
at { |server,id| at { |server,id|
^cache[server].tryPerform(\at,id) ^cache[server].tryPerform(\at,id)
} }
@ -121,15 +126,16 @@ FluidServerCache {
initCache {|server| initCache {|server|
cache[server] ?? { cache[server] ?? {
cache[server] = IdentityDictionary.new; cache[server] = IdentityDictionary.new;
ServerQuit.add({this.clearCache(server)},server); NotificationCenter.register(server,\newAllocators,this,
NotificationCenter.register(server,\newAllocators,this, { {
this.clearCache(server); this.clearCache(server);
}); });
} }
} }
clearCache { |server| clearCache { |server|
cache[server] !? { cache.removeAt(server) !? {|x| x.tryPerform(\free) } }; cache.postln;
cache[server] !? { cache.removeAt(server) };
} }
} }

@ -2,7 +2,7 @@ FluidNormalize : FluidManipulationClient {
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|

@ -3,7 +3,7 @@ FluidPCA : FluidManipulationClient {
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|

@ -2,7 +2,7 @@ FluidStandardize : FluidManipulationClient {
*new {|server| *new {|server|
var uid = UniqueID.next; var uid = UniqueID.next;
^super.new(server,uid).init(uid); ^super.new(server,uid)!?{|inst|inst.init(uid);inst}
} }
init {|uid| init {|uid|

@ -21,26 +21,23 @@ TestFluidCorpusManipulationServer : UnitTest
test_DataSetPersistence{ test_DataSetPersistence{
var foo, bar, tree, testPoint; var foo, bar, tree, testPoint;
//No server on? You get nothing
foo = FluidDataSet(Server.default,\foo); this.assertEquals(nil,FluidDataSet(Server.default,\foo));
this.bootServer(Server.default); this.bootServer(Server.default);
while {Server.default.serverRunning.not}{0.2.wait}; // while {Server.default.serverRunning.not}{0.2.wait};
waitForCounts.test = false; waitForCounts.test = false;
Server.default.doWhenBooted{foo=FluidDataSet(Server.default,\foo)};
waitForCounts.wait; waitForCounts.wait;
this.assertEquals(Server.default.numSynths,1,"Dataset: One Synth present after deferred boot"); this.assertEquals(Server.default.numSynths,1,"Dataset: One Synth present after deferred boot");
waitForCounts.test = false; waitForCounts.test = false;
foo.free; foo.free;
Server.default.freeAll;
waitForCounts.wait; waitForCounts.wait;
this.assertEquals(Server.default.numSynths,0,"Dataset: No synth present via cretation after free");
this.assertEquals(Server.default.numSynths,0,"Dataset: One Synth present via cretation after boot"); foo=FluidDataSet(Server.default,\foo);
//Uniqueness test (difficult to run with previous instance of foo, because //Uniqueness test (difficult to run with previous instance of foo, because
//UnitTest.bootServer messes with Server alloctors and screws up the ID cache //UnitTest.bootServer messes with Server alloctors and screws up the ID cache
foo = FluidDataSet(Server.default,\foo);
this.assertException({ this.assertException({
bar = FluidDataSet(Server.default,\foo); bar = FluidDataSet(Server.default,\foo);
},FluidDataSetExistsError,"DataSetDuplicateError on reused name", onFailure:{ },FluidDataSetExistsError,"DataSetDuplicateError on reused name", onFailure:{
@ -50,8 +47,7 @@ TestFluidCorpusManipulationServer : UnitTest
waitForCounts.test = false; waitForCounts.test = false;
bar = FluidDataSet(Server.default,\bar); bar = FluidDataSet(Server.default,\bar);
waitForCounts.wait; waitForCounts.wait;
this.assertEquals(Server.default.numSynths,2,"Dataset: Two Synths present after new valid Dataset added");
this.assertEquals(Server.default.numSynths,2,"Dataset: Two Synths present after new Dataset added");
testPoint = Buffer.alloc(Server.default,8); testPoint = Buffer.alloc(Server.default,8);
Server.default.sync; Server.default.sync;

Loading…
Cancel
Save