function CreateMessageData(address, valueTypes, ...values)
{
return osc.writePacket(CreatePacket(address, valueTypes, ...values));
}
function CreateBundleData(bundle)
{
return osc.writeBundle(bundle)
}
function CreatePacket(address, valueTypes, ...values)
{
var minLength = valueTypes.length;
if (minLength > values.length)
{
minLength = values.length;
AddLineToLog("(ERROR) @ OSC.CreatePacket() valueTypes length mismatch count of values<br>nbsp;nbsp;some parameters are trimmed", "#FF0000", "#FFF0F0");
}
var packet = {address:address, args: []};
for (var i = 0; i < minLength; i++)
{
packet.args.push({type:valueTypes[i], value:values[i]})
}
return packet;
}
function CreateBundle(timeDelaySeconds)
{
if (timeDelaySeconds == undefined) timeDelaySeconds = 0;
return {timeTag: osc.timeTag(timeDelaySeconds),packets:[]};
}
function NodeAdded(node)
{
if (node._def.nonObject != undefined) return; // don't care about non audio objects
var addr = RED.OSC.settings.RootAddress + "/dynamic/createObject*";
SendData(CreateMessageData(addr,"ss", node.type, node.name));
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("added node (" + node.type + ") " + node.name);
}
function NodeRenamed(node, oldName, newName)
{
if (node._def.nonObject != undefined) return; // don't care about non audio objects
var addr = RED.OSC.settings.RootAddress + "/dynamic/ren*";
SendData(CreateMessageData(addr,"ss", oldName, newName));
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("renamed node from " + oldName + " to " + newName);
}
function NodeRemoved(node, links)
{
if (node._def.nonObject != undefined) return; // don't care about non audio objects
var addr = RED.OSC.settings.RootAddress + "/dynamic/destroy*";
var bundle = CreateBundle();
for (var i = 0; i < links.length; i++)
{
var link = links[i];
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("removed link " + GetLinkDebugName(link));
var linkName = GetLinkName(link);
bundle.packets.push(CreatePacket(addr, "s", linkName));
}
bundle.packets.push(CreatePacket(addr, "s", node.name));
SendData(CreateBundleData(bundle));
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("removed node " + node.name);
}
function LinkAdded(link) {
var connName = GetLinkName(link);
link.name = connName;
var addLinkAddr = RED.OSC.settings.RootAddress + "/dynamic/createConn*";
var connectLinkAddr = RED.OSC.settings.RootAddress + "/audio/" + connName + "/connect*";
var bundle = OSC.CreateBundle();
bundle.packets.push(CreatePacket(addLinkAddr, "s", connName));
bundle.packets.push(CreatePacket(connectLinkAddr, "sisi", link.source.name, link.sourcePort, link.target.name, link.targetPort));
SendData(CreateBundleData(bundle));
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("added link " + GetLinkDebugName(link));
}
function GetLinkName(link)
{
if (link.name != undefined)
return link.name;
else
return link.source.name + link.sourcePort + link.target.name + link.targetPort;
}
function GetLinkDebugName(link)
{
return "(" + link.source.name + ", " + link.sourcePort + ", " + link.target.name + ", " + link.targetPort + ")";
}
function LinkRemoved(link)
{
var addr = RED.OSC.settings.RootAddress + "/dynamic/destroy*";
var linkName = GetLinkName(link);
SendData(CreateMessageData(addr,"s", linkName));
if (RED.OSC.settings.ShowOutputDebug == true)
AddLineToLog("removed link " + GetLinkDebugName(link));
}