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