Updating to match the backup node feature of SN

This commit is contained in:
sairajzero 2019-11-19 20:09:15 +05:30
parent 10a5393373
commit d79d54b400

View File

@ -5218,6 +5218,50 @@
}
});
},
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)
var prevSupernode = []
for(var i = 1; 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 = KB._indexOf(KB.root,flo_addr)
var nextSupernode = []
for(var i = 1; 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 {
@ -5233,42 +5277,78 @@
}
},
sendDataToSN(data, snfloID){
return new Promise((resolve, reject) => {
console.log(snfloID)
var websocket = new WebSocket("wss://" + floGlobals.supernodes[snfloID].uri + "/ws");
websocket.onmessage = (evt => {
if(evt.data == '$+'){
websocket.send(data);
resolve(`Data sent to supernode : ${snfloID}`);
}else if(evt.data == '$-'){
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.sendDataToSN(data, nextnode[0].floID))
.catch(error => reject(error))
}else{
console.log(evt.data)
reject(evt.data)
}
websocket.close();
})
websocket.onerror = (evt) => {
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.sendDataToSN(data, nextnode[0].floID))
.catch(error => reject(error))
};
})
},
//Sends data to the supernode
sendData: function (data, floID) {
return new Promise((resolve, reject) => {
this.kBucket.determineClosestSupernode(floID).then(result => {
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
websocket.onopen = (evt) => {
websocket.send(data);
resolve(`Data sent to ${floID}'s supernode`);
websocket.close();
};
websocket.onerror = (evt) => {
reject(evt);
};
this.sendDataToSN(data, result[0].floID)
.then(result => resolve(result))
.catch(error => reject(error))
}).catch(error => {
reject(error);
reject(error);
});
});
},
requestDataFromSN(request, snfloID){
return new Promise((resolve, reject) => {
var websocket = new WebSocket("wss://" + floGlobals.supernodes[snfloID].uri + "/ws");
websocket.onmessage = (evt => {
if(evt.data == '$+'){
websocket.send(`?${request}`);
}else if(evt.data == '$-'){
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.requestDataFromSN(request, nextnode[0].floID))
.catch(error => reject(error))
websocket.close()
}else{
resolve(evt.data);
websocket.close();
}
})
websocket.onerror = (evt) => {
this.kBucket.getNextSupernode(snfloID)
.then(nextnode => this.requestDataFromSN(request, nextnode[0].floID))
.catch(error => reject(error))
};
})
},
//Request data from supernode
requestData: function (request, floID) {
return new Promise((resolve, reject) => {
this.kBucket.determineClosestSupernode(floID).then(result => {
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
websocket.onopen = (evt) => {
websocket.send(`?${request}`);
};
websocket.onmessage = (evt) => {
resolve(evt.data);
websocket.close();
};
websocket.onerror = (evt) => {
reject(evt);
};
this.requestDataFromSN(request, result[0].floID)
.then(result => resolve(result))
.catch(error => reject(error))
}).catch(error => {
reject(error);
reject(error);
});
});
}