replaced backup_supernode_up to reactor events definations

This commit is contained in:
Abhishek Sinha 2019-10-01 15:01:56 +05:30
parent 4b4e919905
commit 295f7a21d1

View File

@ -12869,6 +12869,9 @@
return false; return false;
} }
if(typeof n!=="number") n=localbitcoinplusplus
.master_configurations.supernodesPubKeys.length||1;
if (su.length > 0) { if (su.length > 0) {
try { try {
let closestSupernodeMasterList = supernodeKBucket.closest( let closestSupernodeMasterList = supernodeKBucket.closest(
@ -13229,7 +13232,12 @@
reactor.addEventListener("new_supernode_connected", async function(evt) { reactor.addEventListener("new_supernode_connected", async function(evt) {
const switchMyWS = new backupSupernodesWebSocketObject(); const switchMyWS = new backupSupernodesWebSocketObject();
switchMyWS.updateSupernodeAvailabilityStatus(evt.srcElement.url, true); const connected_su_flo_id = await switchMyWS.getFloIdFromWSUrl(evt.srcElement.url);
if(!localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS=connected_su_flo_id;
}
switchMyWS.updateSupernodeAvailabilityStatus(connected_su_flo_id, true);
showMessage( showMessage(
`INFO: Connected successfully to Supernode: ${evt.srcElement.url}` `INFO: Connected successfully to Supernode: ${evt.srcElement.url}`
); );
@ -13289,14 +13297,9 @@
); );
return; return;
} }
const switchMyWS = new backupSupernodesWebSocketObject();
await switchMyWS.updateSupernodeAvailabilityStatus(
`ws://${cs[0].ip}:${cs[0].port}`,
false
);
// Wait for 10 seconds if the 'dead' supernode only refreshed the page // Wait for 20 seconds if the 'dead' supernode only refreshed the page
await localbitcoinplusplus.actions.delay(10000); await localbitcoinplusplus.actions.delay(20000);
// Get the current status now // Get the current status now
const getStatusOfDeadSuAgain = await readDBbyIndex( const getStatusOfDeadSuAgain = await readDBbyIndex(
@ -13308,7 +13311,13 @@
// If its still dead find out if you are the next eligible backup supernode // If its still dead find out if you are the next eligible backup supernode
// If true, take charge of dead supernode's operations // If true, take charge of dead supernode's operations
if (getStatusOfDeadSuAgain[0].is_live == false) { if (getStatusOfDeadSuAgain[0].is_live == false) {
if ( const switchMyWS = new backupSupernodesWebSocketObject();
await switchMyWS.updateSupernodeAvailabilityStatus(
`ws://${cs[0].ip}:${cs[0].port}`,
false
);
if (
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
op[0].flo_public_key op[0].flo_public_key
) )
@ -13848,10 +13857,10 @@
); );
/* Remove WS connections which are not active currently */ /* Remove WS connections which are not active currently */
reactor.addEventListener("remove_extra_backup_connections", function() { reactor.addEventListener("remove_extra_backup_connections", function() {
// remove above lines with these // remove above lines with these
readAllDB(`myClosestSupernodes`).then(sups => { readAllDB(`myClosestSupernodes`).then(sups => {
let max_conns = 0;
sups sups
.map(backup_id => { .map(backup_id => {
if (!localbitcoinplusplus.backupWS.hasOwnProperty(backup_id) if (!localbitcoinplusplus.backupWS.hasOwnProperty(backup_id)
@ -13859,8 +13868,8 @@
) { ) {
const backup_conns = const backup_conns =
localbitcoinplusplus.backupWS[backup_id.trader_flo_address]; localbitcoinplusplus.backupWS[backup_id.trader_flo_address];
if (typeof backup_conns.ws_connection == "object") { if (typeof backup_conns == "object"
let max_conns = 0; && typeof backup_conns.ws_connection == "object") {
if (backup_conns.ws_connection.readyState < 2) { if (backup_conns.ws_connection.readyState < 2) {
max_conns++; max_conns++;
if ( if (
@ -13913,6 +13922,80 @@
); );
}); });
reactor.addEventListener("backup_supernode_up", async function(url='') {
showMessage(
`Connected to backup Supernode sever: ${url}.`
);
const switchMyWS = new backupSupernodesWebSocketObject();
switchMyWS.updateSupernodeAvailabilityStatus(
url,
true
);
let my_local_data = await readDB("localbitcoinUser", "00-01");
if (typeof my_local_data == "object") {
const conn_su_flo_id = await switchMyWS.getFloIdFromWSUrl(
url
);
if (
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
my_local_data.myLocalFLOPublicKey
)
) {
// If conn_su_flo_id is not an immediate backup then give your data to it to sync
const myClosestSus = await readAllDB("myClosestSupernodes");
const myClosestSusList = myClosestSus.map(
m => m.trader_flo_address
);
if (
myClosestSusList.indexOf(conn_su_flo_id) >
localbitcoinplusplus.master_configurations.MaxBackups
) {
// Ask conn_su_flo_id to ask you your DB data
const RM_RPC = new localbitcoinplusplus.rpc();
RM_RPC.send_rpc.call(this, "request_me_db_data", {
trader_flo_address:
localbitcoinplusplus.wallets.my_local_flo_address,
receiver_flo_address: conn_su_flo_id,
db_inst: localbitcoinplusplus.wallets.my_local_flo_address
})
.then(req=>doSend(req));
}
// Check if the number of backup ws connections satisfy max baxkup master
// config condition. If false, request ws connection to next backup supernode.
const currenctBackupWsList = Object.keys(
localbitcoinplusplus.backupWS
).filter(
m =>
localbitcoinplusplus.backupWS[m].ws_connection
.readyState < 2
);
if (
currenctBackupWsList.length <
localbitcoinplusplus.master_configurations.MaxBackups
) {
// Request next backup to connect
reactor.dispatchEvent(
"switchToBackupWSForSuperNodesOperations",
url
);
}
} else {
if (typeof conn_su_flo_id == "string") {
my_local_data.lastConnectedTime = +new Date();
my_local_data.lastConnectedSupernode = conn_su_flo_id;
updateinDB("localbitcoinUser", my_local_data);
} else {
mss = `WARNING: Failed to update current supernode connected status in localbitcoinUser.`;
showMessage(mss);
throw new Error(mss);
}
}
}
});
</script> </script>
<!-- Misc functions --> <!-- Misc functions -->
@ -20187,79 +20270,8 @@
this.ws_connection = new WebSocket(this.ws_url); this.ws_connection = new WebSocket(this.ws_url);
const switchMyWS = new backupSupernodesWebSocketObject(); const switchMyWS = new backupSupernodesWebSocketObject();
this.ws_connection.onopen = function(evt) { this.ws_connection.onopen = function(evt) {
reactor.addEventListener("backup_supernode_up", async function() { reactor.dispatchEvent("backup_supernode_up", evt.srcElement.url);
showMessage( reactor.dispatchEvent("remove_extra_backup_connections");
`Connected to backup Supernode sever: ${evt.srcElement.url}.`
);
switchMyWS.updateSupernodeAvailabilityStatus(
evt.srcElement.url,
true
);
let my_local_data = await readDB("localbitcoinUser", "00-01");
if (typeof my_local_data == "object") {
const conn_su_flo_id = await switchMyWS.getFloIdFromWSUrl(
evt.srcElement.url
);
if (
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
my_local_data.myLocalFLOPublicKey
)
) {
// If conn_su_flo_id is not an immediate backup then give your data to it to sync
const myClosestSus = await readAllDB("myClosestSupernodes");
const myClosestSusList = myClosestSus.map(
m => m.trader_flo_address
);
if (
myClosestSusList.indexOf(conn_su_flo_id) >
localbitcoinplusplus.master_configurations.MaxBackups
) {
// Ask conn_su_flo_id to ask you your DB data
const RM_RPC = new localbitcoinplusplus.rpc();
RM_RPC.send_rpc.call(this, "request_me_db_data", {
trader_flo_address:
localbitcoinplusplus.wallets.my_local_flo_address,
receiver_flo_address: conn_su_flo_id,
db_inst: localbitcoinplusplus.wallets.my_local_flo_address
});
//.then(req=>doSend(req));
}
// Check if the number of backup ws connections satisfy max baxkup master
// config condition. If false, request ws connection to next backup supernode.
const currenctBackupWsList = Object.keys(
localbitcoinplusplus.backupWS
).filter(
m =>
localbitcoinplusplus.backupWS[m].ws_connection
.readyState < 2
);
if (
currenctBackupWsList.length <
localbitcoinplusplus.master_configurations.MaxBackups
) {
// Request next backup to connect
reactor.dispatchEvent(
"switchToBackupWSForSuperNodesOperations",
evt.srcElement.url
);
}
} else {
if (typeof conn_su_flo_id == "string") {
my_local_data.lastConnectedTime = +new Date();
my_local_data.lastConnectedSupernode = conn_su_flo_id;
updateinDB("localbitcoinUser", my_local_data);
} else {
mss = `WARNING: Failed to update current supernode connected status in localbitcoinUser.`;
showMessage(mss);
throw new Error(mss);
}
}
}
});
reactor.dispatchEvent("backup_supernode_up");
}.bind(this); }.bind(this);
this.ws_connection.onclose = function(evt) { this.ws_connection.onclose = function(evt) {
reactor.dispatchEvent("backup_supernode_down", evt); reactor.dispatchEvent("backup_supernode_down", evt);
@ -20270,6 +20282,7 @@
let isItANodeLeavingMessage = response.search(`\\-- left`); let isItANodeLeavingMessage = response.search(`\\-- left`);
if (isItANodeLeavingMessage >= 0) { if (isItANodeLeavingMessage >= 0) {
reactor.dispatchEvent("fireNodeGoodByeEvent", response); reactor.dispatchEvent("fireNodeGoodByeEvent", response);
return;
} }
let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId"); let isRequestToLinkIp = response.search("linkMyLocalIPToMyFloId");
@ -20865,6 +20878,7 @@
// skip loop if the property is from prototype // skip loop if the property is from prototype
if ( if (
tableStoreName == "trader_flo_address" || tableStoreName == "trader_flo_address" ||
tableStoreName == "receiver_flo_address" ||
!su_db_data.hasOwnProperty(tableStoreName) !su_db_data.hasOwnProperty(tableStoreName)
) )
continue; continue;
@ -21756,6 +21770,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}) })
@ -21788,6 +21803,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}).then(ipRes => { }).then(ipRes => {
@ -22374,6 +22390,28 @@
} }
break; break;
case "request_me_db_data":
if (
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
res_obj.nodePubKey
)
) {
const resp = res_obj.params[0];
if (
localbitcoinplusplus.wallets.my_local_flo_address !==
resp.receiver_flo_address
)
return;
localbitcoinplusplus.actions.sync_backup_supernode_from_backup_supernode(
localbitcoinplusplus.wallets.my_local_flo_address,
resp.trader_flo_address,
resp.db_inst
);
}
break;
default: default:
break; break;
} }
@ -22393,6 +22431,7 @@
if (isItANodeLeavingMessage >= 0) { if (isItANodeLeavingMessage >= 0) {
reactor.dispatchEvent("fireNodeGoodByeEvent", response); reactor.dispatchEvent("fireNodeGoodByeEvent", response);
return;
} }
var res_pos = response.indexOf("{"); var res_pos = response.indexOf("{");
@ -22731,6 +22770,7 @@
// skip loop if the property is from prototype // skip loop if the property is from prototype
if ( if (
tableStoreName == "trader_flo_address" || tableStoreName == "trader_flo_address" ||
tableStoreName == "receiver_flo_address" ||
!su_db_data.hasOwnProperty(tableStoreName) !su_db_data.hasOwnProperty(tableStoreName)
) )
continue; continue;
@ -23806,6 +23846,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}) })
@ -23838,6 +23879,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}).then(ipRes => { }).then(ipRes => {
@ -24264,7 +24306,7 @@
if ( if (
typeof res_obj.params == "object" && typeof res_obj.params == "object" &&
typeof res_obj.params[0] == "object" && typeof res_obj.params[0] == "object" &&
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes( !localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
localbitcoinplusplus.wallets.my_local_flo_public_key localbitcoinplusplus.wallets.my_local_flo_public_key
) )
) { ) {
@ -24460,6 +24502,7 @@
if (isItANodeLeavingMessage >= 0) { if (isItANodeLeavingMessage >= 0) {
reactor.dispatchEvent("fireNodeGoodByeEvent", response); reactor.dispatchEvent("fireNodeGoodByeEvent", response);
return;
} }
var res_pos = response.indexOf("{"); var res_pos = response.indexOf("{");
@ -24589,6 +24632,7 @@
// skip loop if the property is from prototype // skip loop if the property is from prototype
if ( if (
tableStoreName == "trader_flo_address" || tableStoreName == "trader_flo_address" ||
tableStoreName == "receiver_flo_address" ||
!su_backup_db_data.hasOwnProperty(tableStoreName) !su_backup_db_data.hasOwnProperty(tableStoreName)
) )
continue; continue;
@ -25260,6 +25304,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}) })
@ -25291,6 +25336,7 @@
) )
return; return;
updateinDB("ipTable", { updateinDB("ipTable", {
id: helper_functions.unique_id(),
flo_public_key: req_params.requesters_pub_key, flo_public_key: req_params.requesters_pub_key,
temporary_ip: incoming_msg_local_ip temporary_ip: incoming_msg_local_ip
}).then(ipRes => { }).then(ipRes => {
@ -26603,7 +26649,8 @@
const request_array = [ const request_array = [
"send_back_shamirs_secret_supernode_pvtkey", "send_back_shamirs_secret_supernode_pvtkey",
"retrieve_shamirs_secret_supernode_pvtkey", "retrieve_shamirs_secret_supernode_pvtkey",
"store_shamirs_secret_pvtkey_shares" "store_shamirs_secret_pvtkey_shares",
"request_me_db_data"
]; ];
let finalMessage = message; let finalMessage = message;
@ -26697,7 +26744,8 @@
const request_array = [ const request_array = [
"send_back_shamirs_secret_supernode_pvtkey", "send_back_shamirs_secret_supernode_pvtkey",
"retrieve_shamirs_secret_supernode_pvtkey", "retrieve_shamirs_secret_supernode_pvtkey",
"store_shamirs_secret_pvtkey_shares" "store_shamirs_secret_pvtkey_shares",
"request_me_db_data"
]; ];
try { try {
@ -27074,7 +27122,10 @@
} }
if (!db.objectStoreNames.contains("ipTable")) { if (!db.objectStoreNames.contains("ipTable")) {
var objectStore = db.createObjectStore("ipTable", { var objectStore = db.createObjectStore("ipTable", {
keyPath: "flo_public_key" keyPath: "id"
});
objectStore.createIndex("flo_public_key", "flo_public_key", {
unique: false
}); });
objectStore.createIndex("temporary_ip", "temporary_ip", { objectStore.createIndex("temporary_ip", "temporary_ip", {
unique: false unique: false
@ -27622,10 +27673,23 @@
var objectStore = this.db.createObjectStore("kBucketStore", { var objectStore = this.db.createObjectStore("kBucketStore", {
keyPath: "id" keyPath: "id"
}); });
objectStore.createIndex(
"primary_supernode_flo_public_key",
"primary_supernode_flo_public_key",
{
unique: false
}
);
} }
if (!this.db.objectStoreNames.contains("ipTable")) { if (!this.db.objectStoreNames.contains("ipTable")) {
var objectStore = this.db.createObjectStore("ipTable", { var objectStore = this.db.createObjectStore("ipTable", {
keyPath: "flo_public_key" keyPath: "id"
});
objectStore.createIndex("flo_public_key", "flo_public_key", {
unique: false
});
objectStore.createIndex("temporary_ip", "temporary_ip", {
unique: false
}); });
} }
if (!this.db.objectStoreNames.contains("myClosestSupernodes")) { if (!this.db.objectStoreNames.contains("myClosestSupernodes")) {
@ -27647,7 +27711,7 @@
}); });
} }
if (!this.db.objectStoreNames.contains("crypto_fiat_rates")) { if (!this.db.objectStoreNames.contains("crypto_fiat_rates")) {
var objectStore = db.createObjectStore("crypto_fiat_rates", { var objectStore = this.db.createObjectStore("crypto_fiat_rates", {
keyPath: "id" keyPath: "id"
}); });
objectStore.createIndex("currency_code", "currency_code", { objectStore.createIndex("currency_code", "currency_code", {