Manipulation client: make server transaction in new more predictable

nix
Owen Green 6 years ago
parent 138f6011e5
commit b67d7006b1

@ -19,13 +19,11 @@ FluidProxyUgen : UGen {
FluidManipulationClient { FluidManipulationClient {
var <server; var <server;
var <synth,<>ugen; var <synth,<>ugen;
var id; var id;
var defName, def; var defName, def;
var onSynthFree, persist; var onSynthFree, keepAlive;
var postit; var postit;
var < ready;
*prServerString{ |s| *prServerString{ |s|
var ascii = s.ascii; var ascii = s.ascii;
@ -36,7 +34,6 @@ FluidManipulationClient {
^FluidProxyUgen.newFromDesc(rate, numOutputs, inputs, specialIndex) ^FluidProxyUgen.newFromDesc(rate, numOutputs, inputs, specialIndex)
} }
*new{ |server...args| *new{ |server...args|
server = server ? Server.default; server = server ? Server.default;
if(server.serverRunning.not,{ if(server.serverRunning.not,{
@ -46,41 +43,36 @@ FluidManipulationClient {
} }
baseinit { |...args| baseinit { |...args|
var makeFirstSynth; var makeFirstSynth,synthMsg;
id = UniqueID.next; id = UniqueID.next;
postit = {|x| x.postln;}; postit = {|x| x.postln;};
keepAlive = true;
defName = (this.class.name.asString ++ id).asSymbol; defName = (this.class.name.asString ++ id).asSymbol;
ready = Condition(false);
def = SynthDef(defName,{ def = SynthDef(defName,{
var ugen = FluidProxyUgen.kr(this.class.name, *args); var ugen = FluidProxyUgen.kr(this.class.name, *args);
this.ugen = ugen; this.ugen = ugen;
ugen ugen
}); });
synth = Synth.basicNew(def.name, server);
synthMsg = synth.newMsg(RootNode(server));
def.doSend(server,synthMsg);
persist = true;
onSynthFree = { onSynthFree = {
ready.test = false;
synth = nil; synth = nil;
if(persist){ if(keepAlive){
//If we don't sync here, cmd-. doesn't reset properly (but server.freeAll does) //If we don't sync here, cmd-. doesn't reset properly (but server.freeAll does)
forkIfNeeded { forkIfNeeded {
server.sync; server.sync;
synth = Synth(defName,target: RootNode(server)); synth = Synth(defName,target: RootNode(server));
synth.onFree{onSynthFree.value}; synth.onFree{onSynthFree.value};
ready.test = true;
ready.signal;
} }
} }
}; };
forkIfNeeded{ synth.onFree{onSynthFree.value};
def.add;
server.sync;
onSynthFree.value;
}
} }
free{ free{
persist = false; keepAlive = false;
if(server.serverRunning){server.sendMsg("/cmd","free"++this.class.name,id)}; if(server.serverRunning){server.sendMsg("/cmd","free"++this.class.name,id)};
synth.tryPerform(\free); synth.tryPerform(\free);
^nil ^nil
@ -88,7 +80,6 @@ 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 ?? {"Not ready".warn};
synth !? { synth !? {
OSCFunc( OSCFunc(
{ |msg| { |msg|

Loading…
Cancel
Save