diff --git a/index.html b/index.html
index bf8d586..29cd9f2 100644
--- a/index.html
+++ b/index.html
@@ -2,10 +2,13 @@
+
Local Bitcoin++
-
@@ -14420,9 +14421,7 @@
extra_backup_ws[closestSu[0].data.id] = new WebSocket(url);
extra_backup_ws[closestSu[0].data.id].onopen = function (evt) {
- //if (extra_backup_ws[closestSu[0].data.id].bufferedAmount == 0) {
extra_backup_ws[closestSu[0].data.id].send(finalMessage);
- //}
};
extra_backup_ws[closestSu[0].data.id].onclose = function (evt) {
console.info(`Closed extra conn ${evt.srcElement.url}`);
@@ -15876,20 +15875,6 @@
// Also refresh deposited crypto balances
RM_WALLET.refresh_reserved_crypto_balances(
localbitcoinplusplus.wallets.my_local_flo_address);
- // Inform left side Supernodes you are back
- const msg_obj = {};
- msg_obj.protocol = '__ALL_SUPERNODES_MSG__';
- msg_obj.event = 'supernode_came_back';
- msg_obj.data = { subject_flo_id: userKeysObj.address };
- msg_obj.initialSender = userKeysObj.address;
- msg_obj.su_pubKey = userKeysObj.pubKeyHex;
- msg_obj.hash = Crypto.SHA256(msg_obj);
- msg_obj.sign = RM_WALLET.sign(
- msg_obj.hash,
- localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
- );
- reactor.dispatchEvent("informLeftSuperNode", msg_obj,
- n = localbitcoinplusplus.master_configurations.MaxBackups);
}
} catch (error) {
throw new Error(error);
@@ -16109,12 +16094,9 @@
tempWS[sn] = new WebSocket(url);
tempWS[sn].onopen = async function (evt) {
- //await localbitcoinplusplus.actions.delay(5000);
- //if (tempWS[sn].bufferedAmount == 0) {
tempWS[sn].send(JSON.stringify(msg_obj));
await localbitcoinplusplus.actions.delay(5000);
tempWS[sn].close();
- //}
};
tempWS[sn].onclose = function (evt) {
console.info(`Closed ${evt.srcElement.url}`);
@@ -16655,9 +16637,7 @@
extra_backup_ws[closestBackup] = new WebSocket(url);
extra_backup_ws[closestBackup].onopen = function (evt) {
- //if (extra_backup_ws[closestBackup].bufferedAmount == 0) {
extra_backup_ws[closestBackup].send(finalMessage);
- //}
};
extra_backup_ws[closestBackup].onclose = function (evt) {
console.info(`Closed extra conn ${evt.srcElement.url}`);
@@ -16681,7 +16661,6 @@
}
});
-
// SECTION: Misc functions
function removeWhiteSpaces(text = '') {
return text.replace(/\s/g, '');
@@ -16946,7 +16925,7 @@
notify('Please provide your FLO private key to Sign in.');
showPopup('sign_in_popup', 'no');
- async function app_login() {
+ async function app_login(show_pk=true) {
try {
const RM_WALLET = new localbitcoinplusplus.wallets();
let pk_manual = document.getElementById('get_priv_key_field').value;
@@ -16960,18 +16939,20 @@
return reject(false);
}
} else {
- notify(`This is your LOGIN PRIVATE KEY:
-
- ${gen_new_keys.privateKeyWIF}
-
- Please copy & save it securely somewhere.
+ if(show_pk===true) {
+ notify(`This is your LOGIN PRIVATE KEY:
+
+ ${gen_new_keys.privateKeyWIF}
+
+ Please copy & save it securely somewhere.
- You can use it to login or recover your account.
-
- DO NOT SHARE OR LOSE THIS PRIVATE KEY.
-
- Else you can lose your deposited assets like Bitcoins or Cash forever.
- `, '', true, true, true);
+ You can use it to login or recover your account.
+
+ DO NOT SHARE OR LOSE THIS PRIVATE KEY.
+
+ Else you can lose your deposited assets like Bitcoins or Cash forever.
+ `, '', true, true, true);
+ }
}
Object.defineProperty(
@@ -17018,10 +16999,14 @@
}
const signInBtn = document.getElementById('signInBtn');
- signInBtn.onclick=app_login;
+ signInBtn.addEventListener('click', function() {
+ app_login(false);
+ }, false);
const newUserSignInBtn = document.getElementById('newUserSignInBtn');
- newUserSignInBtn.onclick=app_login;
+ newUserSignInBtn.addEventListener('click', function() {
+ app_login(true);
+ }, false);
});
@@ -24103,13 +24088,29 @@
) {
this.ws_url = ws_url;
this.ws_connection = null;
+ this.ping_interval;
+ this.ping_timeout;
});
backupSupernodesWebSocketObject.prototype = {
connectWS() {
this.ws_connection = new WebSocket(this.ws_url);
const switchMyWS = new backupSupernodesWebSocketObject();
+ ping= ()=> {
+ this.ws_connection.send('__ping__');
+ this.ping_timeout = setTimeout(function () {
+ console.log('----timout----', this.ws_connection);
+ this.ws_connection.close();
+ reactor.dispatchEvent("resolve_backup_ws_connections");
+ }.bind(this), 125000);
+ },
+ pong=()=> {
+ clearTimeout(this.ping_timeout);
+ console.log('recvd pong', this.ws_connection);
+ },
this.ws_connection.onopen = async function (evt) {
+ this.ping_interval = setInterval(ping, 30000);
+
await reactor.dispatchEvent("backup_supernode_up", evt.srcElement.url);
await reactor.dispatchEvent("remove_extra_backup_connections");
@@ -24120,6 +24121,7 @@
}.bind(this);
this.ws_connection.onclose = function (evt) {
+ clearInterval(this.ping_interval);
reactor.dispatchEvent("backup_supernode_down", evt);
limit_function_calls(async function () {
await localbitcoinplusplus.actions.refresh_live_status_of_supernodes(true);
@@ -24127,6 +24129,10 @@
}.bind(this);
this.ws_connection.onmessage = function (evt) {
let response = evt.data;
+ if (response == '__pong__') {
+ pong();
+ return;
+ }
console.log(`backup message: ${response}`);
let is_corona_positive = quarantineCoronaElements(response);
if (is_corona_positive === true) throw new Error("Response failed sanitization test.");
@@ -24288,7 +24294,6 @@
return Promise.reject(ms);
}
- //ideal_supernode = `ws://${nextClosestSupernodeElem[0].ip}:${nextClosestSupernodeElem[0].port}`;
ideal_supernode = `${WS}://${nextClosestSupernodeElem[0].ip}`;
await startWebSocket(ideal_supernode);
@@ -24334,6 +24339,7 @@
function startWebSocket(wsUri) {
return new Promise((resolve, reject) => {
websocket = new WebSocket(wsUri);
+
websocket.onopen = function (evt) {
resolve(onOpen(evt));
};
@@ -24361,6 +24367,9 @@
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
+
+ // Inform everyone you are back
+ await localbitcoinplusplus.actions.refresh_live_status_of_supernodes(true);
// delete buy and sell orders
let remove_promises = [];
remove_promises.push(removeAllinDB('buyOrders'));
@@ -24391,21 +24400,27 @@
}
function onClose(evt) {
- // Also close the backup ws conns
+ console.warn(`[close] Connection closed, code=${evt.code} reason=${evt.reason}`);
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
- // for (conn in localbitcoinplusplus.backupWS) {
- // localbitcoinplusplus.backupWS[conn].ws_connection.close();
- // }
+ // Try to reconnect back
startWebSocket(evt.srcElement.url);
} else {
reactor.dispatchEvent("primary_supernode_down", evt);
}
}
+ function send_pong() {
+ websocket.send('__pong__');
+ }
+
// SECTION: PRIMARY CONNECTION MESSAGES
async function onMessage(evt) {
var response = evt.data || evt;
+
+ if (response === '__ping__') {
+ return send_pong();
+ }
console.log("RESPONSE: " + response);
// Check if request is clean or not
@@ -24536,6 +24551,7 @@
case "refresh_all_supernodes_status":
reactor.dispatchEvent('resolve_backup_ws_connections');
+ localbitcoinplusplus.actions.refresh_live_status_of_supernodes(false);
break;
case "delete_this_user_data_from_backup":
@@ -30181,6 +30197,8 @@
finalMessage = JSON.stringify(msgObj);
}
+ let setIntervalVal;
+
// The message is for a specific supernode only
if (user_flo_id !== "" && user_flo_id.length > 0) {
try {
@@ -30193,6 +30211,7 @@
return;
}
wsConn.send(finalMessage);
+
} else if (user_flo_id === localbitcoinplusplus.wallets.my_local_flo_address) {
websocket.send(finalMessage);
}