[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] bug in OSCMultiResponder



Hi Sciss,

I will take care of it.

Also, I think  should OSCresponder check for omni responders (i.e.
those with a  nil NetAddr) whether or not there is a responder on the same
command for a  specific NetAddr.

RJK

On Mon, 6 Nov 2006, Sciss wrote:

> hallo,
>
> in OSCresponder.sc, can this :
>
> OSCMultiResponder : OSCresponder {
> 	var <>nodes;
>
> 	value { arg time, msg;
> 		var iterlist;
> 		iterlist = nodes.copy;
> 		iterlist.do({ arg node; node.action.value(time, node, msg) });
> 	}
> 	isEmpty { ^nodes.size == 0 }
>
> }
>
> ... be changed into this :
>
> OSCMultiResponder : OSCresponder {
> 	var <>nodes;
>
> 	value { arg time, msg, addr;
> 		var iterlist;
> 		iterlist = nodes.copy;
> 		iterlist.do({ arg node; node.value(time, msg, addr) });
> 	}
> 	isEmpty { ^nodes.size == 0 }
>
> }
>
>
> such as to pass the sender's NetAddr so OSCresponderNode s. i think
> calling node.value is more appropriate than node.action.value since
> this would allow subclasses to do things slightly different in their
> own value methods!
>
> likewise, in OSCpathResponder.sc -> OSCpathDispatcher  : old :
>
> 	value { arg time, msg;
> 		var cmdPath, match, responder;
> 		super.value(time, msg);
> 		if (pathIndices.notNil, {
> 			cmdPath = [cmdName] ++ pathIndices.collect({ arg i; msg.at(i) });
> 			responder = OSCpathResponder(addr, cmdPath);
> 			match = pathResponders.findMatch(responder);
> 			if (match.notNil, {
> 				match.value(time, msg);
> 			});
> 			pathIndices.size.do({ arg i;
> 				responder.path.put(i,nil);
> 				match = pathResponders.findMatch(responder);
> 				if (match.notNil, {
> 					match.value(time, msg);
> 				});
> 			});
> 		});
> 	}
>
> new:
>
> 	value { arg time, msg, replyAddr;
> 		var cmdPath, match, responder;
> 		super.value(time, msg, replyAddr);
> 		if (pathIndices.notNil, {
> 			cmdPath = [cmdName] ++ pathIndices.collect({ arg i; msg.at(i) });
> 			responder = OSCpathResponder(addr, cmdPath);
> 			match = pathResponders.findMatch(responder);
> 			if (match.notNil, {
> 				match.value(time, msg, replyAddr);
> 			});
> 			pathIndices.size.do({ arg i;
> 				responder.path.put(i,nil);
> 				match = pathResponders.findMatch(responder);
> 				if (match.notNil, {
> 					match.value(time, msg, replyAddr);
> 				});
> 			});
> 		});
> 	}
>
>
>
> on a related thing, OSCpathResponder is broken for commands other
> than found in OSCpathDispatcher.cmdPathIndices . i tried to quickly
> find a fix, but the whole mechanism is so extremely tricky with
> methods jumping forth and backwards between super / sub / helper
> classes that i gave up. this should be probably rewritten in a more
> clear way.
>
> thx, -sciss-
>
> _______________________________________________
> sc-dev mailing list
> sc-dev@xxxxxxxxxxxxxxx
> http://www.create.ucsb.edu/mailman/listinfo/sc-dev
>