From b67d7006b1a39cca4f5872f1cb386727505056d5 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Sat, 6 Jun 2020 15:10:24 +0100 Subject: [PATCH] Manipulation client: make server transaction in new more predictable --- .../Classes/FluidManipulationClient.sc | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index 40cd442..7dd8d1f 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -19,13 +19,11 @@ FluidProxyUgen : UGen { FluidManipulationClient { var ugen; - var id; + var ugen; + var id; var defName, def; - var onSynthFree, persist; - + var onSynthFree, keepAlive; var postit; - var < ready; *prServerString{ |s| var ascii = s.ascii; @@ -36,7 +34,6 @@ FluidManipulationClient { ^FluidProxyUgen.newFromDesc(rate, numOutputs, inputs, specialIndex) } - *new{ |server...args| server = server ? Server.default; if(server.serverRunning.not,{ @@ -46,41 +43,36 @@ FluidManipulationClient { } baseinit { |...args| - var makeFirstSynth; + var makeFirstSynth,synthMsg; id = UniqueID.next; postit = {|x| x.postln;}; + keepAlive = true; defName = (this.class.name.asString ++ id).asSymbol; - ready = Condition(false); def = SynthDef(defName,{ var ugen = FluidProxyUgen.kr(this.class.name, *args); this.ugen = ugen; ugen }); + synth = Synth.basicNew(def.name, server); + synthMsg = synth.newMsg(RootNode(server)); + def.doSend(server,synthMsg); - persist = true; onSynthFree = { - ready.test = false; synth = nil; - if(persist){ + if(keepAlive){ //If we don't sync here, cmd-. doesn't reset properly (but server.freeAll does) forkIfNeeded { server.sync; synth = Synth(defName,target: RootNode(server)); synth.onFree{onSynthFree.value}; - ready.test = true; - ready.signal; } } }; - forkIfNeeded{ - def.add; - server.sync; - onSynthFree.value; - } + synth.onFree{onSynthFree.value}; } free{ - persist = false; + keepAlive = false; if(server.serverRunning){server.sendMsg("/cmd","free"++this.class.name,id)}; synth.tryPerform(\free); ^nil @@ -88,7 +80,6 @@ FluidManipulationClient { prSendMsg { |msg, args, action,parser| if(this.server.serverRunning.not,{(this.asString + "– server not running").error; ^nil}); - synth ?? {"Not ready".warn}; synth !? { OSCFunc( { |msg|