diff --git a/index.html b/index.html
index 2f93325..6b155e3 100644
--- a/index.html
+++ b/index.html
@@ -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);
});
});
}