From d6905db3a3a4143fd90d3f2096f52f5f9a8d8996 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 7 May 2020 16:07:15 +0100 Subject: [PATCH] New free message; no dice if server not running; working freeAll --- release-packaging/Classes/FluidDataSet.sc | 13 ++--- release-packaging/Classes/FluidKDTree.sc | 57 +++++++++---------- release-packaging/Classes/FluidKMeans.sc | 2 +- release-packaging/Classes/FluidKNN.sc | 2 +- release-packaging/Classes/FluidLabelSet.sc | 5 +- .../Classes/FluidManipulationClient.sc | 16 ++++-- release-packaging/Classes/FluidNormalize.sc | 2 +- release-packaging/Classes/FluidPCA.sc | 2 +- release-packaging/Classes/FluidStandardize.sc | 2 +- test/TestFluidManipulationLifecyle.sc | 20 +++---- 10 files changed, 57 insertions(+), 64 deletions(-) diff --git a/release-packaging/Classes/FluidDataSet.sc b/release-packaging/Classes/FluidDataSet.sc index db80afe..56cc515 100644 --- a/release-packaging/Classes/FluidDataSet.sc +++ b/release-packaging/Classes/FluidDataSet.sc @@ -18,8 +18,9 @@ FluidDataSet : FluidManipulationClient { *new { |server,name| if(this.at(server,name).notNil){ 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| @@ -76,16 +77,12 @@ FluidDataSet : FluidManipulationClient { this.prSendMsg(\clear,[],action); } - free { |action| + free { serverCaches.remove(server,id); - fork{ - if(server.serverRunning){this.prSendMsg(\free,[],action)}; - server.sync; - super.free; - } + super.free; } *freeAll { |server| - serverCaches.tryPerform(\clearCache,server); + serverCaches.do(server,{|x|x.free;}); } } diff --git a/release-packaging/Classes/FluidKDTree.sc b/release-packaging/Classes/FluidKDTree.sc index 77c6153..0f97a09 100644 --- a/release-packaging/Classes/FluidKDTree.sc +++ b/release-packaging/Classes/FluidKDTree.sc @@ -1,42 +1,37 @@ FluidKDTree : FluidManipulationClient { - var id; + var id; - *new {|server| - var uid = UniqueID.next; - ^super.new(server,uid).init(uid); - } + *new {|server| + var uid = UniqueID.next; + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} + } - init {|uid| - id = uid; - } + init {|uid| + id = uid; + } - fit{|dataset,action| - this.prSendMsg(\fit,[dataset.asUGenInput],action); - } + fit{|dataset,action| + this.prSendMsg(\fit,[dataset.asUGenInput],action); + } - kNearest{ |buffer, k,action| - this.prSendMsg(\kNearest,[buffer.asUGenInput,k],action,k.collect{string(FluidMessageResponse,_,_)}); - } + kNearest{ |buffer, k,action| + this.prSendMsg(\kNearest,[buffer.asUGenInput,k],action,k.collect{string(FluidMessageResponse,_,_)}); + } - kNearestDist { |buffer, k,action| - this.prSendMsg(\kNearestDist,[buffer.asUGenInput,k],action,[numbers(FluidMessageResponse,_,k,_)]); - } + kNearestDist { |buffer, k,action| + this.prSendMsg(\kNearestDist,[buffer.asUGenInput,k],action,[numbers(FluidMessageResponse,_,k,_)]); + } - cols { |action| - this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]); - } + cols { |action| + this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]); + } - read{ |filename,action| - this.prSendMsg(\read,[filename.asString],action); - } + read{ |filename,action| + this.prSendMsg(\read,[filename.asString],action); + } - write{ |filename,action| - this.prSendMsg(\write,[filename.asString],action); - } - - free { |action| - if(server.serverRunning){this.prSendMsg(\free,[],action)}; - super.free; - } + write{ |filename,action| + this.prSendMsg(\write,[filename.asString],action); + } } diff --git a/release-packaging/Classes/FluidKMeans.sc b/release-packaging/Classes/FluidKMeans.sc index e09ee0c..808f378 100644 --- a/release-packaging/Classes/FluidKMeans.sc +++ b/release-packaging/Classes/FluidKMeans.sc @@ -4,7 +4,7 @@ FluidKMeans : FluidManipulationClient { *new {|server| var uid = UniqueID.next; - ^super.new(server,uid).init(uid); + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} } init {|uid| diff --git a/release-packaging/Classes/FluidKNN.sc b/release-packaging/Classes/FluidKNN.sc index f1e8260..1be993a 100644 --- a/release-packaging/Classes/FluidKNN.sc +++ b/release-packaging/Classes/FluidKNN.sc @@ -2,7 +2,7 @@ FluidKNN : FluidManipulationClient { *new {|server| var uid = UniqueID.next; - ^super.new(server,uid).init(uid); + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} } init {|uid| diff --git a/release-packaging/Classes/FluidLabelSet.sc b/release-packaging/Classes/FluidLabelSet.sc index edc0220..3d92852 100644 --- a/release-packaging/Classes/FluidLabelSet.sc +++ b/release-packaging/Classes/FluidLabelSet.sc @@ -18,7 +18,7 @@ FluidLabelSet : FluidManipulationClient { serverCaches.at(server,name) !? { 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| @@ -73,11 +73,10 @@ FluidLabelSet : FluidManipulationClient { free { |action| serverCaches.remove(server,id); - if(server.serverRunning){this.prSendMsg(\free,[],action)}; super.free; } *freeAll { |server| - serverCaches.tryPerform(\clearCache,server); + serverCaches.do(server,{|x|x.free;}); } } diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index cbbcf1e..e57bd7d 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -37,7 +37,7 @@ FluidManipulationClient { *new{ |server...args| server = server ? Server.default; if(server.serverRunning.not,{ - (this.asString + "– server not running").warn; + (this.asString + "– server not running").error; ^nil }); ^super.newCopyArgs(server ?? {Server.default}).baseinit(*args) } @@ -72,6 +72,7 @@ FluidManipulationClient { free{ persist = false; + if(server.serverRunning){server.sendMsg("/cmd","free"++this.class.name,id)}; synth.tryPerform(\free); ^nil } @@ -102,6 +103,10 @@ FluidServerCache { cache = IdentityDictionary.new; } + do { |server, func| + cache[server]!?{cache[server].do{|x|func.value(x)}} + } + at { |server,id| ^cache[server].tryPerform(\at,id) } @@ -121,15 +126,16 @@ FluidServerCache { initCache {|server| cache[server] ?? { cache[server] = IdentityDictionary.new; - ServerQuit.add({this.clearCache(server)},server); - NotificationCenter.register(server,\newAllocators,this, { - this.clearCache(server); + NotificationCenter.register(server,\newAllocators,this, + { + this.clearCache(server); }); } } clearCache { |server| - cache[server] !? { cache.removeAt(server) !? {|x| x.tryPerform(\free) } }; + cache.postln; + cache[server] !? { cache.removeAt(server) }; } } diff --git a/release-packaging/Classes/FluidNormalize.sc b/release-packaging/Classes/FluidNormalize.sc index 1f3cffb..ee25f1b 100644 --- a/release-packaging/Classes/FluidNormalize.sc +++ b/release-packaging/Classes/FluidNormalize.sc @@ -2,7 +2,7 @@ FluidNormalize : FluidManipulationClient { *new {|server| var uid = UniqueID.next; - ^super.new(server,uid).init(uid); + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} } init {|uid| diff --git a/release-packaging/Classes/FluidPCA.sc b/release-packaging/Classes/FluidPCA.sc index 519acb9..ef7cf7a 100644 --- a/release-packaging/Classes/FluidPCA.sc +++ b/release-packaging/Classes/FluidPCA.sc @@ -3,7 +3,7 @@ FluidPCA : FluidManipulationClient { *new {|server| var uid = UniqueID.next; - ^super.new(server,uid).init(uid); + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} } init {|uid| diff --git a/release-packaging/Classes/FluidStandardize.sc b/release-packaging/Classes/FluidStandardize.sc index deee70e..d3e5a6d 100644 --- a/release-packaging/Classes/FluidStandardize.sc +++ b/release-packaging/Classes/FluidStandardize.sc @@ -2,7 +2,7 @@ FluidStandardize : FluidManipulationClient { *new {|server| var uid = UniqueID.next; - ^super.new(server,uid).init(uid); + ^super.new(server,uid)!?{|inst|inst.init(uid);inst} } init {|uid| diff --git a/test/TestFluidManipulationLifecyle.sc b/test/TestFluidManipulationLifecyle.sc index 8209341..796673a 100644 --- a/test/TestFluidManipulationLifecyle.sc +++ b/test/TestFluidManipulationLifecyle.sc @@ -21,26 +21,23 @@ TestFluidCorpusManipulationServer : UnitTest test_DataSetPersistence{ var foo, bar, tree, testPoint; - - foo = FluidDataSet(Server.default,\foo); + //No server on? You get nothing + this.assertEquals(nil,FluidDataSet(Server.default,\foo)); this.bootServer(Server.default); - while {Server.default.serverRunning.not}{0.2.wait}; + // while {Server.default.serverRunning.not}{0.2.wait}; + waitForCounts.test = false; + Server.default.doWhenBooted{foo=FluidDataSet(Server.default,\foo)}; waitForCounts.wait; - this.assertEquals(Server.default.numSynths,1,"Dataset: One Synth present after deferred boot"); - waitForCounts.test = false; foo.free; - Server.default.freeAll; waitForCounts.wait; - - this.assertEquals(Server.default.numSynths,0,"Dataset: One Synth present via cretation after boot"); - + this.assertEquals(Server.default.numSynths,0,"Dataset: No synth present via cretation after free"); + foo=FluidDataSet(Server.default,\foo); //Uniqueness test (difficult to run with previous instance of foo, because //UnitTest.bootServer messes with Server alloctors and screws up the ID cache - foo = FluidDataSet(Server.default,\foo); this.assertException({ bar = FluidDataSet(Server.default,\foo); },FluidDataSetExistsError,"DataSetDuplicateError on reused name", onFailure:{ @@ -50,8 +47,7 @@ TestFluidCorpusManipulationServer : UnitTest waitForCounts.test = false; bar = FluidDataSet(Server.default,\bar); waitForCounts.wait; - - this.assertEquals(Server.default.numSynths,2,"Dataset: Two Synths present after new Dataset added"); + this.assertEquals(Server.default.numSynths,2,"Dataset: Two Synths present after new valid Dataset added"); testPoint = Buffer.alloc(Server.default,8); Server.default.sync;