diff --git a/supernode/index.html b/supernode/index.html
index 026be69..bb7991d 100644
--- a/supernode/index.html
+++ b/supernode/index.html
@@ -10703,7 +10703,7 @@
})
},
- addClosestSupernodeInDB: function(flo_addr, KB=KBucket) {
+ addClosestSupernodeInDB: function(flo_addr, KB=supernodeKBucket) {
return new Promise(async (resolve, reject)=>{
const supernodeSeeds = localbitcoinplusplus.master_configurations.supernodeSeeds;
if (typeof supernodeSeeds !== "object") reject("Failed to get supernode seeds.");
@@ -10921,35 +10921,7 @@
reactor.registerEvent('switchToBackupWSForSuperNodesOperations');
reactor.registerEvent('user_flo_keys_active');
reactor.registerEvent('clean_dead_ws_conections');
-
- reactor.addEventListener('switchToBackupWSForSuperNodesOperations', async function(disconnected_url='') {
- const user_data = await readDB('localbitcoinUser', '00-01');
- const user_flo_pubKey = user_data.myLocalFLOPublicKey;
- disconnected_url = disconnected_url.replace(/\/$/, '');
- if(typeof user_flo_pubKey !== "string"
- || !localbitcoinplusplus.master_configurations.supernodesPubKeys
- .includes(user_flo_pubKey)) return false;
-
- let ideal_supernode = '';
-
- const myClosestSupernodesArray = await readAllDB(`myClosestSupernodes`);
-
- let nextClosestSupernodeElem = myClosestSupernodesArray
- .filter((wew, index)=>{
- let ww = `ws://${wew.ip}:${wew.port}`;
- if(typeof z =='boolean' && z) {
- z = false;
- localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS = wew.trader_flo_address;
- return ww;
- }
- if(ww==disconnected_url) z = true;
- });
-
- reactor.dispatchEvent('shift_ws_connection', nextClosestSupernodeElem[0]);
-
- });
-
reactor.addEventListener('fireNodeWelcomeBackEvent', function(evt) {
let getFLOId = bitjs.FLO_TEST.pubkey2address(evt.flo_public_key);
@@ -11033,6 +11005,11 @@
// If true, take charge of dead supernode's operations
if (getStatusOfDeadSuAgain[0].is_live==false) {
+ // Kill the connection manually to ensure connection is really closed.
+ if (localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState==1) {
+ localbitcoinplusplus.backupWS[getFLOId].ws_connection.close();
+ }
+
// Initiate connections with next live supernodes
reactor.dispatchEvent('resolve_backup_ws_connections');
@@ -11271,9 +11248,6 @@
let currenctBackupWsList = Object.keys(localbitcoinplusplus.backupWS)
.filter(m=>localbitcoinplusplus.backupWS[m].ws_connection.readyState<2);
- if (currenctBackupWsList.length
- === localbitcoinplusplus.master_configurations.MaxBackups) return;
-
if (typeof localbitcoinplusplus.backupWS[getFLOId]==="object"
&& localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState==1) {
// Connect to next backup
@@ -11296,6 +11270,7 @@
}
});
+ /*Get the most eligible non-connected backup within max backup condition*/
reactor.addEventListener('resolve_backup_ws_connections', async function(evt) {
const usrDbObj = await readDB('localbitcoinUser', '00-01');
@@ -11307,31 +11282,40 @@
try {
// Get list of neighbour supernodes
const myClosestSups = await readAllDB('myClosestSupernodes');
-
+ const myClosestSupsFloList = myClosestSups.map(m=>m.trader_flo_address);
// Get list of backup ws connection current status
let currenctBackupWsList = Object.keys(localbitcoinplusplus.backupWS)
.filter(m=>localbitcoinplusplus.backupWS[m].ws_connection.readyState<2);
- for (let z = 1; z <= myClosestSups.length-1; z++) {
+ for (let z = 0; z <= myClosestSups.length-1; z++) {
const supsObj = myClosestSups[z];
+ // Do not send your own object data
+ if(supsObj.trader_flo_address===localbitcoinplusplus.wallets.my_local_flo_address
+ || z===0) continue;
+
// Get latest ws connection status (again)
currenctBackupWsList = Object.keys(localbitcoinplusplus.backupWS)
.filter(m=>localbitcoinplusplus.backupWS[m].ws_connection.readyState<2);
- // ws conn already present
- if (supsObj.trader_flo_address===currenctBackupWsList[z]) continue;
-
- if (currenctBackupWsList.length
- === localbitcoinplusplus.master_configurations.MaxBackups) break;
+ if (currenctBackupWsList.length) {
+ // ws conn already present
+ if (supsObj.trader_flo_address===currenctBackupWsList[z-1]) continue;
+
+ if (myClosestSupsFloList.indexOf(supsObj.trader_flo_address)
+ <= myClosestSupsFloList.indexOf(currenctBackupWsList[z-1])) {
+ /* Break the loop as soon as this line runs
+ as any further ws conn releated event will be
+ taken care in shift_ws_connection event itself. */
+ reactor.dispatchEvent('shift_ws_connection', supsObj);
+ break;
+ }
+ } else {
+ reactor.dispatchEvent('shift_ws_connection', supsObj);
+ break;
+ }
- /* Break the loop as soon as this line runs
- as any further ws conn releated event will be
- taken care in shift_ws_connection event itself. */
- reactor.dispatchEvent('shift_ws_connection', supsObj);
- break;
-
}
} catch (error) {
@@ -11340,6 +11324,40 @@
});
+ /*To connect to next backup of given url*/
+ reactor.addEventListener('switchToBackupWSForSuperNodesOperations', async function(disconnected_url='') {
+ const user_data = await readDB('localbitcoinUser', '00-01');
+ const user_flo_pubKey = user_data.myLocalFLOPublicKey;
+ disconnected_url = disconnected_url.replace(/\/$/, '');
+
+ if(typeof user_flo_pubKey !== "string"
+ || !localbitcoinplusplus.master_configurations.supernodesPubKeys
+ .includes(user_flo_pubKey)) return false;
+
+ let ideal_supernode = '';
+
+ const myClosestSupernodesArray = await readAllDB(`myClosestSupernodes`);
+
+ let nextClosestSupernodeElem = myClosestSupernodesArray
+ .filter((wew, index)=>{
+ let ww = `ws://${wew.ip}:${wew.port}`;
+ if(ww==disconnected_url) z = true;
+ if(typeof z =='boolean' && z) {
+ z = false;
+ localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS = wew.trader_flo_address;
+ return ww;
+ }
+ });
+
+ if (typeof nextClosestSupernodeElem=="object") {
+ reactor.dispatchEvent('shift_ws_connection', nextClosestSupernodeElem[0]);
+ } else {
+ console.log(nextClosestSupernodeElem);
+ throw new Error(`ERROR: Failed to shift a ws connection.`);
+ }
+
+ });
+
/* Remove WS connections which are not active currently */
reactor.addEventListener('clean_dead_ws_conections', function() {
// for (const backup_id in localbitcoinplusplus.backupWS) {
@@ -16155,8 +16173,6 @@
this.ws_connection = new WebSocket(this.ws_url);
const switchMyWS = new backupSupernodesWebSocketObject();
this.ws_connection.onopen = function (evt) {
- console.info('lalalala '+evt.srcElement.url);
-
reactor.addEventListener('backup_supernode_up', async function() {
showMessage(`Connected to backup Supernode sever: ${evt.srcElement.url}.`);
switchMyWS.updateSupernodeAvailabilityStatus(evt.srcElement.url, true);
@@ -16208,15 +16224,13 @@
}
});
reactor.dispatchEvent('backup_supernode_up');
- //reactor.dispatchEvent('clean_dead_ws_conections');
}.bind(this);
this.ws_connection.onclose = function (evt) {
reactor.addEventListener('backup_supernode_down', async function() {
showMessage(`Disconnected to backup Supernode sever: ${evt.srcElement.url}.`);
switchMyWS.updateSupernodeAvailabilityStatus(evt.srcElement.url, false);
- // Invoke next backup server to connect
+ // Request next backup server to connect
await reactor.dispatchEvent('switchToBackupWSForSuperNodesOperations', evt.srcElement.url);
- //reactor.dispatchEvent('clean_dead_ws_conections');
});
reactor.dispatchEvent('backup_supernode_down');
}.bind(this);