Updating to match the backup node feature of SN
This commit is contained in:
parent
10a5393373
commit
d79d54b400
124
index.html
124
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) {
|
determineClosestSupernode: function (flo_addr, n = 1, KB = this.supernodeKBucket) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
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
|
//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(result => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
|
this.sendDataToSN(data, result[0].floID)
|
||||||
websocket.onopen = (evt) => {
|
.then(result => resolve(result))
|
||||||
websocket.send(data);
|
.catch(error => reject(error))
|
||||||
resolve(`Data sent to ${floID}'s supernode`);
|
|
||||||
websocket.close();
|
|
||||||
};
|
|
||||||
websocket.onerror = (evt) => {
|
|
||||||
reject(evt);
|
|
||||||
};
|
|
||||||
}).catch(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
|
//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(result => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.supernodes[result[0].floID].uri + "/ws");
|
this.requestDataFromSN(request, result[0].floID)
|
||||||
websocket.onopen = (evt) => {
|
.then(result => resolve(result))
|
||||||
websocket.send(`?${request}`);
|
.catch(error => reject(error))
|
||||||
};
|
|
||||||
websocket.onmessage = (evt) => {
|
|
||||||
resolve(evt.data);
|
|
||||||
websocket.close();
|
|
||||||
};
|
|
||||||
websocket.onerror = (evt) => {
|
|
||||||
reject(evt);
|
|
||||||
};
|
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
reject(error);
|
reject(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user