Improving floSupernode.kBucket module
Adding getInnerNodes and getOuterNodes getPrevSupernode, getNextSupernode and determineClosestSupernode now return an array of floIDs
This commit is contained in:
parent
5e9926b87b
commit
c473d200c0
@ -6129,31 +6129,60 @@
|
||||
this.addContact(decodedId, address, KB);
|
||||
},
|
||||
isNodePresent: function (flo_id, 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 = 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 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 => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user