| 542 | var dependenciesLoaded = 0; |
| 543 | |
| 544 | var scriptLoaded = function () { |
| 545 | dependenciesLoaded++; |
| 546 | if (dependenciesLoaded !== dependencies.length) { |
| 547 | return; |
| 548 | } |
| 549 | socket = io.connect(uri + '/', now.core.options.socketio || {}); |
| 550 | now.core.socketio = socket; |
| 551 | socket.on('connect', function () { |
| 552 | now.core.clientId = socket.socket.sessionid; |
| 553 | lib.handleNewConnection(socket); |
| 554 | // Begin intermittent scope traversal |
| 555 | |
| 556 | setTimeout(function () { |
| 557 | lib.processNowScope(); |
| 558 | socket.emit('rd'); |
| 559 | if (++readied === 2) { |
| 560 | nowReady = true; |
| 561 | util.emit('ready'); |
| 562 | } |
| 563 | }, 100); |
| 564 | |
| 565 | util.emit('connect'); |
| 566 | }); |
| 567 | socket.on('disconnect', function () { |
| 568 | // y-combinator trick |
| 569 | (function (y) { |
| 570 | y(y, now); |
| 571 | }(function (fn, obj) { |
| 572 | for (var i in obj) { |
| 573 | if (obj[i] && typeof obj[i] === 'object' && |
| 574 | obj[i] !== document && obj[i] !== now.core) { |
| 575 | fn(fn, obj[i]); |
| 576 | } |
| 577 | else if (typeof obj[i] === 'function' && obj[i].remote) { |
| 578 | delete obj[i]; |
| 579 | } |
| 580 | } |
| 581 | })); |
| 582 | // Clear all sorts of stuff in preparation for reconnecting. |
| 583 | fqnMap.data = {}; |
| 584 | }); |
| 585 | }; |
| 586 | |
| 587 | for (var i = 0, ii = dependencies.length; i < ii; i++) { |
| 588 | if (window[dependencies[i]['key']]) { |