From 130eb6b619a0f68622ae70c0032a2288faabaaac Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 22 Mar 2016 10:07:59 -0700 Subject: [PATCH] working for one; --- examples/libraries/virtualBaton.js | 49 +++++++++---------- .../batonSoundTestEntityScript.js | 6 +-- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/examples/libraries/virtualBaton.js b/examples/libraries/virtualBaton.js index 75ff216c6a..5adc7672bc 100644 --- a/examples/libraries/virtualBaton.js +++ b/examples/libraries/virtualBaton.js @@ -145,32 +145,30 @@ function virtualBatonf(options) { // It would be great if we had a way to know how many subscribers our channel has. Failing that... var nNack = 0, previousNSubscribers = 0, lastGathering = 0, thisTimeout = electionTimeout; function nSubscribers() { // Answer the number of subscribers. - // // To find nQuorum, we need to know how many scripts are being run using this batonName, which isn't - // // the same as the number of clients! - // // - // // If we overestimate by too much, we may fail to reach consensus, which triggers a new - // // election proposal, so we take the number of acceptors to be the max(nPromises, nAccepted) - // // + nNack reported in the previous round. - // // - // // If we understimate by too much, there can be different pockets on the Internet that each - // // believe they have agreement on different holders of the baton, which is precisely what - // // the virtualBaton is supposed to avoid. Therefore we need to allow 'nack' to gather stragglers. + // To find nQuorum, we need to know how many scripts are being run using this batonName, which isn't + // the same as the number of clients! + + // If we overestimate by too much, we may fail to reach consensus, which triggers a new + // election proposal, so we take the number of acceptors to be the max(nPromises, nAccepted) + // + nNack reported in the previous round. + + // If we understimate by too much, there can be different pockets on the Internet that each + // believe they have agreement on different holders of the baton, which is precisely what + // the virtualBaton is supposed to avoid. Therefore we need to allow 'nack' to gather stragglers. - // var now = Date.now(), elapsed = now - lastGathering; - // if (elapsed >= thisTimeout) { - // previousNSubscribers = Math.max(nPromises, nAccepted) + nNack; - // lastGathering = now; - // } // ...otherwise we use the previous value unchanged. + var now = Date.now(), elapsed = now - lastGathering; + if (elapsed >= thisTimeout) { + previousNSubscribers = Math.max(nPromises, nAccepted) + nNack; + lastGathering = now; + } // ...otherwise we use the previous value unchanged. - // // On startup, we do one proposal that we cannot possibly close, so that we'll - // // lock things up for the full electionTimeout to gather responses. - // if (!previousNSubscribers) { - // var LARGE_INTEGER = Number.MAX_SAFE_INTEGER || (-1 >>> 1); // QT doesn't define the ECMA constant. Max int will do for our purposes. - // previousNSubscribers = LARGE_INTEGER; - // } - // return previousNSubscribers; - print("EBL NUMBER SUBSCRIBERS ", AvatarList.getAvatarIdentifiers().length); - return AvatarList.getAvatarIdentifiers().length; + // On startup, we do one proposal that we cannot possibly close, so that we'll + // lock things up for the full electionTimeout to gather responses. + if (!previousNSubscribers) { + var LARGE_INTEGER = Number.MAX_SAFE_INTEGER || (-1 >>> 1); // QT doesn't define the ECMA constant. Max int will do for our purposes. + previousNSubscribers = LARGE_INTEGER; + } + return previousNSubscribers; } // MAIN ALGORITHM @@ -373,8 +371,7 @@ function virtualBatonf(options) { }; // Gather nAcceptors by making two proposals with some gathering time, even without a claim. - print("EBL PROPOSE HAS BEEN COMMENTED OUT!"); - // propose(); + propose(); return exports; } if (typeof module !== 'undefined') { // Allow testing in nodejs. diff --git a/examples/tests/batonSoundEntityTest/batonSoundTestEntityScript.js b/examples/tests/batonSoundEntityTest/batonSoundTestEntityScript.js index ce57050a12..e42c855f10 100644 --- a/examples/tests/batonSoundEntityTest/batonSoundTestEntityScript.js +++ b/examples/tests/batonSoundEntityTest/batonSoundTestEntityScript.js @@ -30,7 +30,7 @@ // We already have our injector so just restart it _this.soundInjector.restart(); } - print("EBL START UPDATE") + print("EBL START UPDATE"); Entities.editEntity(_this.batonDebugModel, {visible: true}); _this.playSoundInterval = Script.setInterval(function() { // print("EBL PLAY THE SOUND"); @@ -41,8 +41,8 @@ } function stopUpdateAndReclaim() { + print("EBL STOP UPDATE AND RECLAIM") // when the baton is release - print("EBL CLAIM BATON") if (_this.soundIntervalConnected === true) { Script.clearInterval(_this.playSoundInterval); _this.soundIntervalConnected = false; @@ -69,7 +69,7 @@ baton = virtualBaton({ // One winner for each entity batonName: "io.highfidelity.soundEntityBatonTest:" + _this.entityID, - debugFlow: true + // debugFlow: true }); stopUpdateAndReclaim(); },