diff --git a/index.html b/index.html
index 20dbaa2..d907bdd 100644
--- a/index.html
+++ b/index.html
@@ -5226,6 +5226,53 @@
}
});
},
+
+ getPrevSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
+ return new Promise((resolve, reject) => {
+ try {
+ let isFloIdUint8 = flo_addr instanceof Uint8Array;
+ if (!isFloIdUint8)
+ flo_addr = this.floIdToKbucketId(flo_addr);
+ const KA = KB.toArray();
+ let pos = KA.indexOf(flo_addr)
+ var prevSupernode = []
+ for(var i = 0; i < n; i++){
+ if(pos - i < 0)
+ var prev = pos - i + KA.length
+ else
+ var prev = pos - i
+ prevSupernode.push(KA[prev])
+ }
+ resolve(prevSupernode);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ },
+
+ getNextSupernode: function(flo_addr, n = 1, KB = this.supernodeKBucket){
+ return new Promise((resolve, reject) => {
+ try {
+ let isFloIdUint8 = flo_addr instanceof Uint8Array;
+ if (!isFloIdUint8)
+ flo_addr = this.floIdToKbucketId(flo_addr);
+ const KA = KB.toArray();
+ let pos = KA.indexOf(flo_addr)
+ var nextSupernode = []
+ for(var i = 0; i < n; i++){
+ if(pos + i >= KA.length)
+ var next = pos + i - KA.length
+ else
+ var next = pos + i
+ nextSupernode.push(KA[next])
+ }
+ resolve(nextSupernode);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ },
+
determineClosestSupernode: function (flo_addr, n = 1, KB = this.supernodeKBucket) {
return new Promise((resolve, reject) => {
try {
@@ -5376,10 +5423,9 @@
try {
data = JSON.parse(data)
floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(result => {
- if (result[0].floID != myFloID)
- return;
- if (data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey) && floCrypto.verifySign(
- JSON.stringify(data.message), data.sign, data.pubKey)) {
+ if (result[0].floID == myFloID
+ && data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey)
+ && floCrypto.verifySign(JSON.stringify(data.message), data.sign, data.pubKey)){
if (floGlobals.storageList.includes(data.application))
var table = data.application;
else
@@ -6047,7 +6093,81 @@
}).catch(error => reject(error))
})
}
+
+ function connectToBackupSupernode(){
+ return new Promise((resolve,reject) => {
+ floSupernode.kBucket.getNextSupernode(myFloID).then(backupNodeID => {
+ reactor.dispatchEvent("initate_backup_websocket",backupNodeID)
+ }).catch(error => reactor.dispatchEvent)
+ })
+ }
+