added ping pong to keep ws connections alive between supernodes
This commit is contained in:
parent
8c732e23cd
commit
c0cc0e177c
101
index.html
101
index.html
@ -2,10 +2,13 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<link rel="shortcut icon" href="#">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Local Bitcoin++</title>
|
<title>Local Bitcoin++</title>
|
||||||
<style type="text/css">
|
<!-- <link rel="stylesheet" href="/home/aks/Documents/p2p/localbitcoinplusplus/supernode/server/web/playground/main.css"> -->
|
||||||
@import url("https://fonts.googleapis.com/css?family=Barlow:400,500,600,700&display=swap");
|
<style>
|
||||||
|
|
||||||
|
@import url("https://fonts.googleapis.com/css?family=Barlow:400,500,600,700&display=swap");
|
||||||
@import url("https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap");
|
@import url("https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap");
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap");
|
@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap");
|
||||||
* {
|
* {
|
||||||
@ -1569,8 +1572,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*# sourceMappingURL=main.css.map */
|
/*# sourceMappingURL=main.css.map */
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body data-theme='light'>
|
<body data-theme='light'>
|
||||||
@ -14420,9 +14421,7 @@
|
|||||||
|
|
||||||
extra_backup_ws[closestSu[0].data.id] = new WebSocket(url);
|
extra_backup_ws[closestSu[0].data.id] = new WebSocket(url);
|
||||||
extra_backup_ws[closestSu[0].data.id].onopen = function (evt) {
|
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].send(finalMessage);
|
||||||
//}
|
|
||||||
};
|
};
|
||||||
extra_backup_ws[closestSu[0].data.id].onclose = function (evt) {
|
extra_backup_ws[closestSu[0].data.id].onclose = function (evt) {
|
||||||
console.info(`Closed extra conn ${evt.srcElement.url}`);
|
console.info(`Closed extra conn ${evt.srcElement.url}`);
|
||||||
@ -15876,20 +15875,6 @@
|
|||||||
// Also refresh deposited crypto balances
|
// Also refresh deposited crypto balances
|
||||||
RM_WALLET.refresh_reserved_crypto_balances(
|
RM_WALLET.refresh_reserved_crypto_balances(
|
||||||
localbitcoinplusplus.wallets.my_local_flo_address);
|
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) {
|
} catch (error) {
|
||||||
throw new Error(error);
|
throw new Error(error);
|
||||||
@ -16109,12 +16094,9 @@
|
|||||||
|
|
||||||
tempWS[sn] = new WebSocket(url);
|
tempWS[sn] = new WebSocket(url);
|
||||||
tempWS[sn].onopen = async function (evt) {
|
tempWS[sn].onopen = async function (evt) {
|
||||||
//await localbitcoinplusplus.actions.delay(5000);
|
|
||||||
//if (tempWS[sn].bufferedAmount == 0) {
|
|
||||||
tempWS[sn].send(JSON.stringify(msg_obj));
|
tempWS[sn].send(JSON.stringify(msg_obj));
|
||||||
await localbitcoinplusplus.actions.delay(5000);
|
await localbitcoinplusplus.actions.delay(5000);
|
||||||
tempWS[sn].close();
|
tempWS[sn].close();
|
||||||
//}
|
|
||||||
};
|
};
|
||||||
tempWS[sn].onclose = function (evt) {
|
tempWS[sn].onclose = function (evt) {
|
||||||
console.info(`Closed ${evt.srcElement.url}`);
|
console.info(`Closed ${evt.srcElement.url}`);
|
||||||
@ -16655,9 +16637,7 @@
|
|||||||
|
|
||||||
extra_backup_ws[closestBackup] = new WebSocket(url);
|
extra_backup_ws[closestBackup] = new WebSocket(url);
|
||||||
extra_backup_ws[closestBackup].onopen = function (evt) {
|
extra_backup_ws[closestBackup].onopen = function (evt) {
|
||||||
//if (extra_backup_ws[closestBackup].bufferedAmount == 0) {
|
|
||||||
extra_backup_ws[closestBackup].send(finalMessage);
|
extra_backup_ws[closestBackup].send(finalMessage);
|
||||||
//}
|
|
||||||
};
|
};
|
||||||
extra_backup_ws[closestBackup].onclose = function (evt) {
|
extra_backup_ws[closestBackup].onclose = function (evt) {
|
||||||
console.info(`Closed extra conn ${evt.srcElement.url}`);
|
console.info(`Closed extra conn ${evt.srcElement.url}`);
|
||||||
@ -16681,7 +16661,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// SECTION: Misc functions
|
// SECTION: Misc functions
|
||||||
function removeWhiteSpaces(text = '') {
|
function removeWhiteSpaces(text = '') {
|
||||||
return text.replace(/\s/g, '');
|
return text.replace(/\s/g, '');
|
||||||
@ -16946,7 +16925,7 @@
|
|||||||
notify('Please provide your FLO private key to Sign in.');
|
notify('Please provide your FLO private key to Sign in.');
|
||||||
showPopup('sign_in_popup', 'no');
|
showPopup('sign_in_popup', 'no');
|
||||||
|
|
||||||
async function app_login() {
|
async function app_login(show_pk=true) {
|
||||||
try {
|
try {
|
||||||
const RM_WALLET = new localbitcoinplusplus.wallets();
|
const RM_WALLET = new localbitcoinplusplus.wallets();
|
||||||
let pk_manual = document.getElementById('get_priv_key_field').value;
|
let pk_manual = document.getElementById('get_priv_key_field').value;
|
||||||
@ -16960,18 +16939,20 @@
|
|||||||
return reject(false);
|
return reject(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
notify(`This is your LOGIN PRIVATE KEY:
|
if(show_pk===true) {
|
||||||
|
notify(`This is your LOGIN PRIVATE KEY:
|
||||||
|
|
||||||
<span class="breakable">${gen_new_keys.privateKeyWIF}</span>
|
<span class="breakable">${gen_new_keys.privateKeyWIF}</span>
|
||||||
|
|
||||||
Please copy & save it securely somewhere.
|
Please copy & save it securely somewhere.
|
||||||
|
|
||||||
You can use it to login or recover your account.
|
You can use it to login or recover your account.
|
||||||
|
|
||||||
DO NOT SHARE OR LOSE THIS PRIVATE KEY.
|
DO NOT SHARE OR LOSE THIS PRIVATE KEY.
|
||||||
|
|
||||||
Else you can lose your deposited assets like Bitcoins or Cash forever.
|
Else you can lose your deposited assets like Bitcoins or Cash forever.
|
||||||
`, '', true, true, true);
|
`, '', true, true, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
@ -17018,10 +16999,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const signInBtn = document.getElementById('signInBtn');
|
const signInBtn = document.getElementById('signInBtn');
|
||||||
signInBtn.onclick=app_login;
|
signInBtn.addEventListener('click', function() {
|
||||||
|
app_login(false);
|
||||||
|
}, false);
|
||||||
|
|
||||||
const newUserSignInBtn = document.getElementById('newUserSignInBtn');
|
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_url = ws_url;
|
||||||
this.ws_connection = null;
|
this.ws_connection = null;
|
||||||
|
this.ping_interval;
|
||||||
|
this.ping_timeout;
|
||||||
});
|
});
|
||||||
backupSupernodesWebSocketObject.prototype = {
|
backupSupernodesWebSocketObject.prototype = {
|
||||||
connectWS() {
|
connectWS() {
|
||||||
this.ws_connection = new WebSocket(this.ws_url);
|
this.ws_connection = new WebSocket(this.ws_url);
|
||||||
const switchMyWS = new backupSupernodesWebSocketObject();
|
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.ws_connection.onopen = async function (evt) {
|
||||||
|
|
||||||
|
this.ping_interval = setInterval(ping, 30000);
|
||||||
|
|
||||||
await reactor.dispatchEvent("backup_supernode_up", evt.srcElement.url);
|
await reactor.dispatchEvent("backup_supernode_up", evt.srcElement.url);
|
||||||
await reactor.dispatchEvent("remove_extra_backup_connections");
|
await reactor.dispatchEvent("remove_extra_backup_connections");
|
||||||
|
|
||||||
@ -24120,6 +24121,7 @@
|
|||||||
|
|
||||||
}.bind(this);
|
}.bind(this);
|
||||||
this.ws_connection.onclose = function (evt) {
|
this.ws_connection.onclose = function (evt) {
|
||||||
|
clearInterval(this.ping_interval);
|
||||||
reactor.dispatchEvent("backup_supernode_down", evt);
|
reactor.dispatchEvent("backup_supernode_down", evt);
|
||||||
limit_function_calls(async function () {
|
limit_function_calls(async function () {
|
||||||
await localbitcoinplusplus.actions.refresh_live_status_of_supernodes(true);
|
await localbitcoinplusplus.actions.refresh_live_status_of_supernodes(true);
|
||||||
@ -24127,6 +24129,10 @@
|
|||||||
}.bind(this);
|
}.bind(this);
|
||||||
this.ws_connection.onmessage = function (evt) {
|
this.ws_connection.onmessage = function (evt) {
|
||||||
let response = evt.data;
|
let response = evt.data;
|
||||||
|
if (response == '__pong__') {
|
||||||
|
pong();
|
||||||
|
return;
|
||||||
|
}
|
||||||
console.log(`backup message: ${response}`);
|
console.log(`backup message: ${response}`);
|
||||||
let is_corona_positive = quarantineCoronaElements(response);
|
let is_corona_positive = quarantineCoronaElements(response);
|
||||||
if (is_corona_positive === true) throw new Error("Response failed sanitization test.");
|
if (is_corona_positive === true) throw new Error("Response failed sanitization test.");
|
||||||
@ -24288,7 +24294,6 @@
|
|||||||
return Promise.reject(ms);
|
return Promise.reject(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
//ideal_supernode = `ws://${nextClosestSupernodeElem[0].ip}:${nextClosestSupernodeElem[0].port}`;
|
|
||||||
ideal_supernode = `${WS}://${nextClosestSupernodeElem[0].ip}`;
|
ideal_supernode = `${WS}://${nextClosestSupernodeElem[0].ip}`;
|
||||||
|
|
||||||
await startWebSocket(ideal_supernode);
|
await startWebSocket(ideal_supernode);
|
||||||
@ -24334,6 +24339,7 @@
|
|||||||
function startWebSocket(wsUri) {
|
function startWebSocket(wsUri) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
websocket = new WebSocket(wsUri);
|
websocket = new WebSocket(wsUri);
|
||||||
|
|
||||||
websocket.onopen = function (evt) {
|
websocket.onopen = function (evt) {
|
||||||
resolve(onOpen(evt));
|
resolve(onOpen(evt));
|
||||||
};
|
};
|
||||||
@ -24361,6 +24367,9 @@
|
|||||||
|
|
||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
.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
|
// delete buy and sell orders
|
||||||
let remove_promises = [];
|
let remove_promises = [];
|
||||||
remove_promises.push(removeAllinDB('buyOrders'));
|
remove_promises.push(removeAllinDB('buyOrders'));
|
||||||
@ -24391,21 +24400,27 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onClose(evt) {
|
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
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
.includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) {
|
||||||
// for (conn in localbitcoinplusplus.backupWS) {
|
// Try to reconnect back
|
||||||
// localbitcoinplusplus.backupWS[conn].ws_connection.close();
|
|
||||||
// }
|
|
||||||
startWebSocket(evt.srcElement.url);
|
startWebSocket(evt.srcElement.url);
|
||||||
} else {
|
} else {
|
||||||
reactor.dispatchEvent("primary_supernode_down", evt);
|
reactor.dispatchEvent("primary_supernode_down", evt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function send_pong() {
|
||||||
|
websocket.send('__pong__');
|
||||||
|
}
|
||||||
|
|
||||||
// SECTION: PRIMARY CONNECTION MESSAGES
|
// SECTION: PRIMARY CONNECTION MESSAGES
|
||||||
async function onMessage(evt) {
|
async function onMessage(evt) {
|
||||||
var response = evt.data || evt;
|
var response = evt.data || evt;
|
||||||
|
|
||||||
|
if (response === '__ping__') {
|
||||||
|
return send_pong();
|
||||||
|
}
|
||||||
console.log("RESPONSE: " + response);
|
console.log("RESPONSE: " + response);
|
||||||
|
|
||||||
// Check if request is clean or not
|
// Check if request is clean or not
|
||||||
@ -24536,6 +24551,7 @@
|
|||||||
|
|
||||||
case "refresh_all_supernodes_status":
|
case "refresh_all_supernodes_status":
|
||||||
reactor.dispatchEvent('resolve_backup_ws_connections');
|
reactor.dispatchEvent('resolve_backup_ws_connections');
|
||||||
|
localbitcoinplusplus.actions.refresh_live_status_of_supernodes(false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "delete_this_user_data_from_backup":
|
case "delete_this_user_data_from_backup":
|
||||||
@ -30181,6 +30197,8 @@
|
|||||||
finalMessage = JSON.stringify(msgObj);
|
finalMessage = JSON.stringify(msgObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let setIntervalVal;
|
||||||
|
|
||||||
// The message is for a specific supernode only
|
// The message is for a specific supernode only
|
||||||
if (user_flo_id !== "" && user_flo_id.length > 0) {
|
if (user_flo_id !== "" && user_flo_id.length > 0) {
|
||||||
try {
|
try {
|
||||||
@ -30193,6 +30211,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wsConn.send(finalMessage);
|
wsConn.send(finalMessage);
|
||||||
|
|
||||||
} else if (user_flo_id === localbitcoinplusplus.wallets.my_local_flo_address) {
|
} else if (user_flo_id === localbitcoinplusplus.wallets.my_local_flo_address) {
|
||||||
websocket.send(finalMessage);
|
websocket.send(finalMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user