Improving floSupernode.kBucket module

Adding getInnerNodes and getOuterNodes
getPrevSupernode, getNextSupernode and determineClosestSupernode now return an array of floIDs
This commit is contained in:
sairajzero 2020-01-05 19:42:34 +05:30
parent 5e9926b87b
commit c473d200c0

View File

@ -6129,31 +6129,60 @@
this.addContact(decodedId, address, KB);
},
isNodePresent: function (flo_id, KB = this.supernodeKBucket) {
let kArray = KB.toArray();
let kArrayFloIds = kArray.map(k => k.floID);
if (kArrayFloIds.includes(flo_id))
return true;
else
return false;
},
getInnerNodes: function(flo_addr1, flo_addr2, KB = this.supernodeKBucket){
return new Promise((resolve, reject) => {
let kArray = KB.toArray();
let kArrayFloIds = kArray.map(k => k.data.id);
if (kArrayFloIds.includes(flo_id)) {
resolve(true);
} else {
reject(false);
}
let kArrayFloIds = KB.toArray().map(k => k.floID);
var innerNodes = []
if(kArrayFloIds.includes(flo_addr1) && kArrayFloIds.includes(flo_addr2)){
for(var i = kArrayFloIds.indexOf(flo_addr1); i!= flo_addr2; i++){
if(i >= kArrayFloIds.length)
i = -1
else
innerNodes.push(kArrayFloIds[i])
}
resolve(innerNodes)
}else
reject('Given nodes are not in KBucket')
});
},
getOuterNodes: function(flo_addr1, flo_addr2, KB = this.supernodeKBucket){
return new Promise((resolve, reject) => {
let kArrayFloIds = KB.toArray().map(k => k.floID);
var outterNodes = []
if(kArrayFloIds.includes(flo_addr1) && kArrayFloIds.includes(flo_addr2)){
for(var i = kArrayFloIds.indexOf(flo_addr2); i!= flo_addr1; i++){
if(i >= kArrayFloIds.length)
i = -1
else
outterNodes.push(kArrayFloIds[i])
}
resolve(outterNodes)
}else
reject('Given nodes are not in KBucket')
});
},
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 = KB._indexOf(KB.root,flo_addr)
let kArrayFloIds = KB.toArray().map(k => k.floID);
let pos = kArrayFloIds.indexOf(flo_addr)
var prevSupernode = []
for(var i = 1; i <= n; i++){
if(pos - i < 0)
var prev = pos - i + KA.length
var prev = pos - i + kArrayFloIds.length
else
var prev = pos - i
prevSupernode.push(KA[prev])
prevSupernode.push(kArrayFloIds[prev])
}
resolve(prevSupernode);
} catch (error) {
@ -6161,21 +6190,19 @@
}
});
},
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 = KB._indexOf(KB.root,flo_addr)
let kArrayFloIds = KB.toArray().map(k => k.floID);
let pos = kArrayFloIds.indexOf(flo_addr)
var nextSupernode = []
for(var i = 1; i <= n; i++){
if(pos + i >= KA.length)
var next = pos + i - KA.length
if(pos + i >= kArrayFloIds.length)
var next = pos + i - kArrayFloIds.length
else
var next = pos + i
nextSupernode.push(KA[next])
nextSupernode.push(kArrayFloIds[next])
}
resolve(nextSupernode);
} catch (error) {
@ -6183,13 +6210,15 @@
}
});
},
determineClosestSupernode: 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 closestSupernode = KB.closest(flo_addr, n);
var closestSupernode = KB.closest(flo_addr, n);
closestSupernode = closestSupernode.map(k => k.floID);
resolve(closestSupernode);
} catch (error) {
reject(error);
@ -6208,7 +6237,7 @@
resolve(`Data sent to supernode : ${snfloID}`);
}else if(evt.data == '$-'){
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.sendDataToSN(data, nextnode[0].floID))
.then(nextNode => this.sendDataToSN(data, nextNode[0]))
.catch(error => reject(error))
}else{
console.log(evt.data)
@ -6218,7 +6247,7 @@
})
websocket.onerror = (evt) => {
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.sendDataToSN(data, nextnode[0].floID))
.then(nextNode => this.sendDataToSN(data, nextNode[0]))
.catch(error => reject(error))
};
})
@ -6227,8 +6256,8 @@
//Sends data to the supernode
sendData: function (data, floID) {
return new Promise((resolve, reject) => {
this.kBucket.determineClosestSupernode(floID).then(result => {
this.sendDataToSN(data, result[0].floID)
this.kBucket.determineClosestSupernode(floID).then(closestNode => {
this.sendDataToSN(data, closestNode[0])
.then(result => resolve(result))
.catch(error => reject(error))
}).catch(error => {
@ -6245,7 +6274,7 @@
websocket.send(`?${request}`);
}else if(evt.data == '$-'){
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.requestDataFromSN(request, nextnode[0].floID))
.then(nextNode => this.requestDataFromSN(request, nextNode[0]))
.catch(error => reject(error))
websocket.close()
}else{
@ -6255,7 +6284,7 @@
})
websocket.onerror = (evt) => {
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.requestDataFromSN(request, nextnode[0].floID))
.then(nextNode => this.requestDataFromSN(request, nextNode[0]))
.catch(error => reject(error))
};
})
@ -6264,8 +6293,8 @@
//Request data from supernode
requestData: function (request, floID) {
return new Promise((resolve, reject) => {
this.kBucket.determineClosestSupernode(floID).then(result => {
this.requestDataFromSN(request, result[0].floID)
this.kBucket.determineClosestSupernode(floID).then(closestNode => {
this.requestDataFromSN(request, closestNode[0])
.then(result => resolve(result))
.catch(error => reject(error))
}).catch(error => {