Harden FluiDManipulationClient against multiple cmd-.

nix
Owen Green 6 years ago
parent cffcd889dd
commit 3c3659fbd5

@ -18,13 +18,21 @@ FluidProxyUgen : UGen {
FluidManipulationClient { FluidManipulationClient {
classvar clock;
var <server; var <server;
var <synth,<>ugen; var <synth,<>ugen;
var id; var id;
var defName, def; var defName, def;
var onSynthFree, keepAlive; var onSynthFree, keepAlive;
var aliveThread;
var postit; var postit;
*initClass {
clock = TempoClock.new;
clock.permanent = true;
}
*prServerString{ |s| *prServerString{ |s|
var ascii = s.ascii; var ascii = s.ascii;
^[ascii.size].addAll(ascii) ^[ascii.size].addAll(ascii)
@ -60,15 +68,12 @@ FluidManipulationClient {
onSynthFree = { onSynthFree = {
synth = nil; synth = nil;
if(keepAlive){ 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 = Synth(defName,target: RootNode(server));
synth.onFree{onSynthFree.value}; synth.onFree{clock.sched(0,onSynthFree)};
}
} }
}; };
synth.onFree{onSynthFree.value}; CmdPeriod.add({synth = nil});
synth.onFree{clock.sched(0,onSynthFree)};
} }
free{ free{
@ -80,7 +85,8 @@ FluidManipulationClient {
prSendMsg { |msg, args, action,parser| prSendMsg { |msg, args, action,parser|
if(this.server.serverRunning.not,{(this.asString + " server not running").error; ^nil}); if(this.server.serverRunning.not,{(this.asString + " server not running").error; ^nil});
synth !? { server.bind{
synth ?? {onSynthFree.value; server.sync};
OSCFunc( OSCFunc(
{ |msg| { |msg|
defer{ defer{

Loading…
Cancel
Save