Commit 6ade384a authored by maybites's avatar maybites
Browse files

new remote peer list creation. each remote peer will be create in sequence instead of all together.

parent adc26810
......@@ -23,8 +23,8 @@ function bang()
function joined(_joined){
if(_joined == 0){
dpost("local peer left room. cleaning up list of remote peers..");
clear();
done();
//clear();
//done();
}
}
......@@ -47,8 +47,10 @@ function clear()
}
for(var i = 0; i < keys.length; i++){
var localPeer = myPeerList.get(keys[i]);
localPeer.set("verified", 0);
myPeerList.set(keys[i], localPeer);
if(localPeer.get("verified") !== 3){
localPeer.set("verified", 0);
myPeerList.set(keys[i], localPeer);
}
}
}
}
......@@ -56,26 +58,27 @@ function clear()
// next we get all the current peers sequentially
function append(_peerName, _peerID, _peerLocalIPv4, _peerPublicIPv4)
{
// first test if the peerID is already existing
// first test if the peerID is already existing
if(myPeerList.contains(_peerID)){
// we make a sanity check if nothing has changed
// we make a sanity check if nothing has changed
var localPeer = myPeerList.get(_peerID);
if(localPeer.get("peerName") !== _peerName ||
localPeer.get("peerLocalIPv4") !== _peerLocalIPv4 ||
localPeer.get("peerPublicIPv4") !== _peerPublicIPv4){
// something changed.
localPeer.set("peerName", _peerName);
dpost("update peer ("+_peerName+")");
localPeer.set("peerName", _peerName);
localPeer.set("peerLocalIPv4", _peerLocalIPv4);
localPeer.set("peerPublicIPv4", _peerPublicIPv4);
localPeer.set("verified", 2); // this indicates a changed peer
} else {
// verify the remote peer
localPeer.set("verified", 1); // this indicates an existing peer
}
}
myPeerList.set(_peerID, localPeer);
}
// since in the last step a peer might have been removed because of a change we test again
if(!myPeerList.contains(_peerID)){
dpost("append peer ("+_peerName+")");
var localPeer = new Dict();
localPeer.set("peerName", _peerName);
localPeer.set("peerLocalIPv4", _peerLocalIPv4);
......@@ -88,19 +91,21 @@ function append(_peerName, _peerID, _peerLocalIPv4, _peerPublicIPv4)
// once we got all the peer info, we can create, rearrange, cleanup
function done()
{
dpost("updating remote peer list...");
// first remove all the peers not verified
var keys = myPeerList.getkeys();
if(keys != null){
if(typeof(keys) == 'string'){
keys = [keys];
}
dpost("remote peers found:" + keys);
for(var i = 0; i < keys.length; i++){
var localPeer = myPeerList.get(keys[i]);
if(localPeer.get("verified") === 0){
dpost("remove remote peer: " + localPeer.get("peerName"));
dpost("... remove remote peer: " + localPeer.get("peerName"));
// this peer has gone
removePeer(keys[i]);
return; // peer is beeing removed and sends a 'done' message
}
}
}
......@@ -113,9 +118,11 @@ function done()
for(var i = 0; i < keys.length; i++){
var localPeer = myPeerList.get(keys[i]);
if(localPeer.get("verified") === 3){
dpost("add remote peer: " + localPeer.get("peerName"));
slots.push(keys[i]);
dpost("... add remote peer: " + localPeer.get("peerName"));
createPeer(keys[i]);
localPeer.set("verified", 1); // this indicates an existing peer
myPeerList.set(keys[i], localPeer);
return; // peer is beeing removed and sends a 'done' message
}
}
}
......@@ -124,21 +131,27 @@ function done()
slots.forEach(update);
}
function update(_peerID, _index) {
var localPeer = myPeerList.get(_peerID);
if(localPeer.get("verified") === 2){
messnamed("pl_" + _peerID, "peerName", localPeer.get("peerName"));
messnamed("pl_" + _peerID, "peerLocalIP", localPeer.get("peerLocalIPv4"));
messnamed("pl_" + _peerID, "peerPublicIP", localPeer.get("peerPublicIPv4"));
messnamed("pl_" + _peerID, "roomName", myRoomName);
messnamed("pl_" + _peerID, "roomID", myRoomID);
messnamed("pl_" + _peerID, "slot", _index);
localPeer.set("verified", 1); // this indicates an verified peer
myPeerList.set(_peerID, localPeer);
}
}
function createPeer(_peerID){
slots.push(_peerID);
this.patcher.remove(this.patcher.getnamed(_peerID));
this.patcher.message(makeCreationMessage(_peerID));
}
function update(_peerID, _index) {
var localPeer = myPeerList.get(_peerID);
messnamed("pl_" + _peerID, "peerName", localPeer.get("peerName"));
messnamed("pl_" + _peerID, "peerLocalIPv4", localPeer.get("peerLocalIPv4"));
messnamed("pl_" + _peerID, "peerPublicIPv4", localPeer.get("peerPublicIPv4"));
messnamed("pl_" + _peerID, "roomName", myRoomName);
messnamed("pl_" + _peerID, "roomID", myRoomID);
messnamed("pl_" + _peerID, "slot", _index);
}
function makeCreationMessage(_peerID){
var localPeer = myPeerList.get(_peerID);
var slotIndex = slots.indexOf(_peerID)
......@@ -158,13 +171,13 @@ function makeCreationMessage(_peerID){
msp.push(1);
msp.push("@args");
msp.push("remote");
msp.push(slotIndex);
msp.push(_peerID);
msp.push(localPeer.get("peerName"));
msp.push(localPeer.get("peerLocalIPv4"));
msp.push(localPeer.get("peerPublicIPv4"));
msp.push(myRoomName);
msp.push(myRoomID);
msp.push(slotIndex);
//dpost("makeCreationMessage() " + msp + "\n");
return msp;
}
......
......@@ -10,44 +10,96 @@ var mySlotSize = 45;
var myPeerName = null;
var myPeerID = null;
var myRoomName = null;
var myRoomID = null;
var myPeerPublicIP = null;
var myPeerLocalIP = null;
var mySlotIndex = -1;
var taskMover = null;
function dpost(_post){
post("peer("+myPeerName+"): " + _post + "\n");
}
function done(){
init();
}
/**********************
Init Functions
**********************/
function init(){
// myNodeVarName = getKeyValuefromDB(myNodeName, "_conn.id");
post("init peer..("+myPeerName+") \n");
initNodeSpace();
post("...init("+myPeerName+") done\n");
if(myPeerName !== null){
initNodeSpace();
}
}
/* recursively gets the the parents patcher information
*/
function initNodeSpace(){
if(this.patcher.box.patcher.box != null){
myUberPatcher = this.patcher.box.patcher.box.patcher;
}
}
/**********************
Init Functions
**********************/
function peerName(_peerName){
myPeerName = _peerName;
if(myPeerName !== _peerName){
myPeerName = _peerName;
outlet(0, "peerName", myPeerName);
}
}
function peerID(_peerID){
myPeerID = _peerID;
if(myPeerID !== _peerID){
myPeerID = _peerID;
outlet(0, "peerID", myPeerID);
}
}
function peerLocalIP(_peerLocalIP){
if(myPeerLocalIP !== _peerLocalIP){
myPeerLocalIP = _peerLocalIP;
outlet(0, "peerLocalIPv4", myPeerLocalIP);
}
}
function peerPublicIP(_peerPublicIP){
if(myPeerPublicIP !== _peerPublicIP){
myPeerPublicIP = _peerPublicIP;
outlet(0, "peerPublicIP", myPeerPublicIP);
}
}
function roomName(_roomName){
if(myRoomName !== _roomName){
myRoomName = _roomName;
outlet(0, "roomName", myRoomName);
}
}
function roomID(_roomID){
if(myRoomID !== _roomID){
myRoomID = _roomID;
outlet(0, "roomID", myRoomID);
}
}
function slot(_index){
if(mySlotIndex == -1){
mySlotIndex = _index;
post("..start creation animation..("+myPeerName+") \n");
dpost("start creation animation...");
// start creation animation
taskMover = new Task(creaMover, this, 720, 0, 20);
taskMover.interval = 33; // 60fps
taskMover.repeat(21);
}
if(mySlotIndex != _index){
post("..start reshuffle animation..("+myPeerName+") \n");
dpost("start reshuffle animation...");
// start reshuflle animation
taskMover = new Task(shuffleMover, this, mySlotIndex, _index, 20);
taskMover.interval = 33; // 60fps
......@@ -57,12 +109,12 @@ function slot(_index){
}
function remove(){
post("..start remove animation..("+myPeerName+") \n");
dpost("start remove animation... \n");
// remove abstraction
outlet(0, "peerJoined", 0);
taskMover = new Task(reMover, this, 0, 720, 20);
taskMover.interval = 33; // 60fps
taskMover.repeat(21);
outlet(0, "peerJoined", 0);
}
function shuffleMover(_indxStart, _indxTarget, _maxStep)
......@@ -72,6 +124,8 @@ function shuffleMover(_indxStart, _indxTarget, _maxStep)
myUberPatcher.message("script", "sendbox", myPeerID, "presentation_position", 0, (_indxStart + (_indxTarget - _indxStart)/_maxStep * iter) * mySlotSize);
} else {
arguments.callee.task.cancel();
dpost("... reshuffle animation done.");
messnamed("peerManager", "done");
}
}
......@@ -82,6 +136,9 @@ function creaMover(_indxStart, _indxTarget, _maxStep)
myUberPatcher.message("script", "sendbox", myPeerID, "presentation_position", _indxStart + (_indxTarget - _indxStart)/_maxStep * iter, mySlotIndex * mySlotSize);
} else {
arguments.callee.task.cancel();
dpost("... creation animation done.");
outlet(0, "peerJoined", 1);
messnamed("peerManager", "done");
}
}
......@@ -92,18 +149,12 @@ function reMover(_indxStart, _indxTarget, _maxStep)
myUberPatcher.message("script", "sendbox", myPeerID, "presentation_position", _indxStart + (_indxTarget - _indxStart)/_maxStep * iter, mySlotIndex * mySlotSize);
} else {
arguments.callee.task.cancel();
dpost("... remove animation done.");
messnamed("peerManager", "done");
myUberPatcher.remove(myUberPatcher.getnamed(myPeerID));
}
}
/* recursively gets the the parents patcher information
*/
function initNodeSpace(){
if(this.patcher.box.patcher.box != null){
myUberPatcher = this.patcher.box.patcher.box.patcher;
}
}
function anything(){
// ignore everything else
}
\ No newline at end of file
......@@ -129,10 +129,17 @@ const handlers = {
if(proxyHost !== null && proxyRoom !== null){
console.log('Atempting to restart proxy: ' + _port + ' at ' + proxyHost + ' in ' + proxyRoom);
try {
console.log('... stopping proxy....');
const resDel = await superagent.delete('http://'+proxyHost+':3591/proxies/' + _port);
let reply = JSON.parse(resDel["text"]);
console.log(reply["msg"]);
} catch (err) {
let reply = JSON.parse(err.response["text"]);
console.error(reply["msg"]);
}
try {
console.log('... starting proxy....');
// current date
let date = new Date();
......
......@@ -10,7 +10,7 @@
}
,
"classnamespace" : "box",
"rect" : [ 417.0, 301.0, 807.0, 480.0 ],
"rect" : [ 416.0, 300.0, 807.0, 480.0 ],
"bglocked" : 0,
"openinpresentation" : 1,
"default_fontsize" : 12.0,
......@@ -57,7 +57,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 387.333333333333485, 234.0, 72.0, 22.0 ],
"patching_rect" : [ 387.333333333333485, 228.0, 72.0, 22.0 ],
"text" : "prepend set"
}
......@@ -68,7 +68,7 @@
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 387.333333333333485, 267.0, 150.0, 20.0 ],
"patching_rect" : [ 387.333333333333485, 261.0, 150.0, 20.0 ],
"presentation" : 1,
"presentation_rect" : [ 24.0, 24.0, 154.0, 20.0 ],
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
......@@ -403,9 +403,13 @@
"styles" : [ {
"name" : "rnbodefault",
"default" : {
"accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ],
"elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ],
"fontsize" : [ 12.0 ],
"bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
"stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ],
"fontname" : [ "Lato" ],
"color" : [ 0.929412, 0.929412, 0.352941, 1.0 ],
"stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ],
"bgfillcolor" : {
"type" : "color",
"color" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
......@@ -415,11 +419,7 @@
"proportion" : 0.39,
"autogradient" : 0.0
}
,
"bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
"accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ],
"elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ],
"fontsize" : [ 12.0 ]
}
,
"parentstyle" : "",
......@@ -428,11 +428,18 @@
, {
"name" : "rnbohighcontrast",
"default" : {
"textcolor_inverse" : [ 1.0, 1.0, 1.0, 1.0 ],
"selectioncolor" : [ 0.301960784313725, 0.694117647058824, 0.949019607843137, 1.0 ],
"clearcolor" : [ 1.0, 1.0, 1.0, 0.0 ],
"accentcolor" : [ 0.666666666666667, 0.666666666666667, 0.666666666666667, 1.0 ],
"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
"elementcolor" : [ 0.223386004567146, 0.254748553037643, 0.998085916042328, 1.0 ],
"locked_bgcolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"editing_bgcolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"color" : [ 1.0, 0.874509803921569, 0.141176470588235, 1.0 ],
"fontsize" : [ 13.0 ],
"bgcolor" : [ 0.0, 0.0, 0.0, 1.0 ],
"stripecolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"textcolor_inverse" : [ 1.0, 1.0, 1.0, 1.0 ],
"color" : [ 1.0, 0.874509803921569, 0.141176470588235, 1.0 ],
"bgfillcolor" : {
"type" : "color",
"color" : [ 0.0, 0.0, 0.0, 1.0 ],
......@@ -442,14 +449,7 @@
"proportion" : 0.5,
"autogradient" : 0.0
}
,
"bgcolor" : [ 0.0, 0.0, 0.0, 1.0 ],
"clearcolor" : [ 1.0, 1.0, 1.0, 0.0 ],
"accentcolor" : [ 0.666666666666667, 0.666666666666667, 0.666666666666667, 1.0 ],
"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
"elementcolor" : [ 0.223386004567146, 0.254748553037643, 0.998085916042328, 1.0 ],
"selectioncolor" : [ 0.301960784313725, 0.694117647058824, 0.949019607843137, 1.0 ],
"fontsize" : [ 13.0 ]
}
,
"parentstyle" : "",
......@@ -860,9 +860,13 @@
"styles" : [ {
"name" : "rnbodefault",
"default" : {
"accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ],
"elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ],
"fontsize" : [ 12.0 ],
"bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
"stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ],
"fontname" : [ "Lato" ],
"color" : [ 0.929412, 0.929412, 0.352941, 1.0 ],
"stripecolor" : [ 0.258338063955307, 0.352425158023834, 0.511919498443604, 1.0 ],
"bgfillcolor" : {
"type" : "color",
"color" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
......@@ -872,11 +876,7 @@
"proportion" : 0.39,
"autogradient" : 0.0
}
,
"bgcolor" : [ 0.031372549019608, 0.125490196078431, 0.211764705882353, 1.0 ],
"accentcolor" : [ 0.343034118413925, 0.506230533123016, 0.86220508813858, 1.0 ],
"elementcolor" : [ 0.357540726661682, 0.515565991401672, 0.861786782741547, 1.0 ],
"fontsize" : [ 12.0 ]
}
,
"parentstyle" : "",
......@@ -885,11 +885,18 @@
, {
"name" : "rnbohighcontrast",
"default" : {
"textcolor_inverse" : [ 1.0, 1.0, 1.0, 1.0 ],
"selectioncolor" : [ 0.301960784313725, 0.694117647058824, 0.949019607843137, 1.0 ],
"clearcolor" : [ 1.0, 1.0, 1.0, 0.0 ],
"accentcolor" : [ 0.666666666666667, 0.666666666666667, 0.666666666666667, 1.0 ],
"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
"elementcolor" : [ 0.223386004567146, 0.254748553037643, 0.998085916042328, 1.0 ],
"locked_bgcolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"editing_bgcolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"color" : [ 1.0, 0.874509803921569, 0.141176470588235, 1.0 ],
"fontsize" : [ 13.0 ],
"bgcolor" : [ 0.0, 0.0, 0.0, 1.0 ],
"stripecolor" : [ 0.258823529411765, 0.258823529411765, 0.258823529411765, 1.0 ],
"textcolor_inverse" : [ 1.0, 1.0, 1.0, 1.0 ],
"color" : [ 1.0, 0.874509803921569, 0.141176470588235, 1.0 ],
"bgfillcolor" : {
"type" : "color",
"color" : [ 0.0, 0.0, 0.0, 1.0 ],
......@@ -899,14 +906,7 @@
"proportion" : 0.5,
"autogradient" : 0.0
}
,
"bgcolor" : [ 0.0, 0.0, 0.0, 1.0 ],
"clearcolor" : [ 1.0, 1.0, 1.0, 0.0 ],
"accentcolor" : [ 0.666666666666667, 0.666666666666667, 0.666666666666667, 1.0 ],
"textcolor" : [ 1.0, 1.0, 1.0, 1.0 ],
"elementcolor" : [ 0.223386004567146, 0.254748553037643, 0.998085916042328, 1.0 ],
"selectioncolor" : [ 0.301960784313725, 0.694117647058824, 0.949019607843137, 1.0 ],
"fontsize" : [ 13.0 ]
}
,
"parentstyle" : "",
......@@ -1047,7 +1047,7 @@
}
,
"classnamespace" : "box",
"rect" : [ 500.0, 153.0, 495.0, 482.0 ],
"rect" : [ 797.0, 158.0, 495.0, 482.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
......@@ -1134,37 +1134,13 @@
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"id" : "obj-10",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "bang", "" ],
"patching_rect" : [ 8.0, 152.0, 93.142857142857139, 22.0 ],
"text" : "t b s"
}
}
, {
"box" : {
"id" : "obj-9",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 8.0, 317.0, 78.0, 22.0 ],
"text" : "peerJoined 1"
}
}
, {
"box" : {
"id" : "obj-5",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 275.89285714285711, 349.0, 75.0, 22.0 ],
"patching_rect" : [ 82.270408163265301, 162.0, 75.0, 22.0 ],
"text" : "prepend slot"
}
......@@ -1176,7 +1152,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 242.857142857142861, 321.0, 95.0, 22.0 ],
"patching_rect" : [ 275.255102040816382, 324.0, 95.0, 22.0 ],
"text" : "prepend roomID"
}
......@@ -1188,7 +1164,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 210.714285714285722, 297.0, 115.0, 22.0 ],
"patching_rect" : [ 243.112244897959187, 300.0, 115.0, 22.0 ],
"text" : "prepend roomName"
}
......@@ -1201,7 +1177,7 @@
"maxclass" : "outlet",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 408.89285714285711, 378.0, 30.0, 30.0 ]
"patching_rect" : [ 415.89285714285711, 392.0, 30.0, 30.0 ]
}
}
......@@ -1213,7 +1189,7 @@
"maxclass" : "outlet",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 82.142857142857139, 378.0, 30.0, 30.0 ]
"patching_rect" : [ 82.270408163265301, 399.0, 30.0, 30.0 ]
}
}
......@@ -1224,7 +1200,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 178.392857142857139, 269.0, 124.0, 22.0 ],
"patching_rect" : [ 210.790816326530631, 272.0, 124.0, 22.0 ],
"text" : "prepend peerPublicIP"
}
......@@ -1236,7 +1212,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 146.428571428571445, 241.0, 120.0, 22.0 ],
"patching_rect" : [ 178.826530612244909, 244.0, 120.0, 22.0 ],
"text" : "prepend peerLocalIP"
}
......@@ -1248,7 +1224,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 114.285714285714292, 214.0, 112.0, 22.0 ],
"patching_rect" : [ 146.683673469387742, 217.0, 112.0, 22.0 ],
"text" : "prepend peerName"
}
......@@ -1260,7 +1236,7 @@
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 82.142857142857139, 188.0, 92.0, 22.0 ],
"patching_rect" : [ 114.540816326530603, 191.0, 92.0, 22.0 ],
"text" : "prepend peerID"
}
......@@ -1271,9 +1247,9 @@
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 8,
"outlettype" : [ "", "", "", "", "", "", "int", "int" ],
"patching_rect" : [ 50.0, 100.0, 244.0, 22.0 ],
"text" : "unpack s s s s s s i i"
"outlettype" : [ "", "int", "", "", "", "", "", "int" ],
"patching_rect" : [ 50.0, 100.0, 244.89285714285711, 22.0 ],
"text" : "unpack s i s s s s s i"
}
}
......@@ -1292,20 +1268,6 @@
}
],
"lines" : [ {
"patchline" : {
"destination" : [ "obj-11", 0 ],
"source" : [ "obj-10", 1 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-9", 0 ],
"source" : [ "obj-10", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-1", 0 ],
"source" : [ "obj-11", 0 ]
......@@ -1363,30 +1325,30 @@
}
, {
"patchline" : {
"destination" : [ "obj-10", 0 ],
"destination" : [ "obj-11", 0 ],
"order" : 1,
"source" : [ "obj-6", 1 ]
"source" : [ "obj-6",