From 3c3659fbd5c8ee41097cc04d62de094609acceda Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 11 Jun 2020 12:42:16 +0100 Subject: [PATCH] Harden FluiDManipulationClient against multiple cmd-. --- .../Classes/FluidManipulationClient.sc | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index 8982730..e0f4ad7 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -18,13 +18,21 @@ FluidProxyUgen : UGen { FluidManipulationClient { + classvar clock; + var ugen; var id; var defName, def; var onSynthFree, keepAlive; + var aliveThread; var postit; + *initClass { + clock = TempoClock.new; + clock.permanent = true; + } + *prServerString{ |s| var ascii = s.ascii; ^[ascii.size].addAll(ascii) @@ -60,15 +68,12 @@ FluidManipulationClient { onSynthFree = { synth = nil; 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}; - } + synth = Synth(defName,target: RootNode(server)); + synth.onFree{clock.sched(0,onSynthFree)}; } }; - synth.onFree{onSynthFree.value}; + CmdPeriod.add({synth = nil}); + synth.onFree{clock.sched(0,onSynthFree)}; } free{ @@ -80,7 +85,8 @@ FluidManipulationClient { prSendMsg { |msg, args, action,parser| if(this.server.serverRunning.not,{(this.asString + "– server not running").error; ^nil}); - synth !? { + server.bind{ + synth ?? {onSynthFree.value; server.sync}; OSCFunc( { |msg| defer{ @@ -89,7 +95,7 @@ FluidManipulationClient { if(action.notNil){action.value(result)}{action.value}; } },'/'++msg, server.addr, nil,[synth.nodeID]).oneShot; - server.listSendMsg(['/u_cmd',synth.nodeID,ugen.synthIndex,msg].addAll(args)); + server.listSendMsg(['/u_cmd', synth.nodeID, ugen.synthIndex, msg].addAll(args)); } } }