diff --git a/index.html b/index.html
index d907bdd..4ba3789 100644
--- a/index.html
+++ b/index.html
@@ -32,7 +32,10 @@
//Required for Supernode operations
supernodes: {}, //each supnernode must be stored as floID : {uri:,pubKey:}
storageList : ["General"],
- defaultStorage : "General"
+ defaultStorage : "General",
+ serveList : [],
+ backupStoredList : [],
+ supernodeConfig : {}
}
@@ -5401,16 +5404,20 @@
request = request.split(" ");
requestor = request[0];
request = JSON.parse(request[1]);
- var filterOptions = {
- lowerKey: request.lowerVectorClock,
- upperKey: request.upperVectorClock,
- lastOnly: request.mostRecent,
- atKey: request.atVectorClock,
- patternEval: (k, v) => { return (v.application == request.application && (!request.receiverID || v.receiverID == request.receiverID) && (!request.comment || v.comment == request.comment) && (!request.type || v.type == request.type) && (!request.senderIDs || request.senderIDs.includes(v.senderID))) }
- }
- compactIDB.searchData( floGlobals.storageList.includes(request.application) ? request.application : floGlobals.defaultStorage, filterOptions)
- .then(result => floSupernode.supernodeClientWS.send(`${requestor} ${JSON.stringify(result)}`))
- .catch(error => console.log(error))
+ floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(result => {
+ if(floGlobals.serveList.includes(result[0].floID)){
+ var filterOptions = {
+ lowerKey: request.lowerVectorClock,
+ upperKey: request.upperVectorClock,
+ lastOnly: request.mostRecent,
+ atKey: request.atVectorClock,
+ patternEval: (k, v) => { return (v.application == request.application && (!request.receiverID || v.receiverID == request.receiverID) && (!request.comment || v.comment == request.comment) && (!request.type || v.type == request.type) && (!request.senderIDs || request.senderIDs.includes(v.senderID))) }
+ }
+ compactIDB.searchData( floGlobals.storageList.includes(request.application) ? request.application : floGlobals.defaultStorage, filterOptions, `SN_${result[0].floID}`)
+ .then(result => floSupernode.supernodeClientWS.send(`${requestor} ${JSON.stringify(result)}`))
+ .catch(error => console.log(error))
+ }
+ }).catch(error => console.log(error))
} catch (error) {
console.log(error.message)
}
@@ -5422,26 +5429,29 @@
console.log('Data :', data);
try {
data = JSON.parse(data)
- floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(result => {
- if (result[0].floID == myFloID
- && data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey)
- && floCrypto.verifySign(JSON.stringify(data.message), data.sign, data.pubKey)){
- if (floGlobals.storageList.includes(data.application))
- var table = data.application;
- else
- var table = floGlobals.defaultStorage;
- compactIDB.addData(table, {
- senderID: data.senderID,
- receiverID: data.receiverID,
- pubKey: data.pubKey,
- message: data.message,
- sign: data.sign,
- application: data.application,
- type: data.type,
- comment: data.comment
- })
- }
- })
+ if(!data.backup){ //Serving Users
+ floSupernode.kBucket.determineClosestSupernode(data.receiverID).then(result => {
+ if (floGlobals.serveList.includes(result[0].floID)
+ && data.senderID == floCrypto.getFloIDfromPubkeyHex(data.pubKey)
+ && floCrypto.verifySign(JSON.stringify(data.message), data.sign, data.pubKey)){
+ if (floGlobals.storageList.includes(data.application))
+ var table = data.application;
+ else
+ var table = floGlobals.defaultStorage;
+ var key = `${Date.now()}_${data.senderID}`
+ compactIDB.addData(table, {
+ senderID: data.senderID,
+ receiverID: data.receiverID,
+ pubKey: data.pubKey,
+ message: data.message,
+ sign: data.sign,
+ application: data.application,
+ type: data.type,
+ comment: data.comment
+ },key,`SN_${result[0].floID}`)
+ }
+ }).catch(error => console.log(error))
+ }
} catch (error) {
console.log(error.message);
}
@@ -5465,7 +5475,7 @@
initDB: function (dbName, objectStores = {}) {
return new Promise((resolve, reject) => {
- this.dbName = this.dbName || dbName;
+ //this.dbName = this.dbName || dbName;
var idb = indexedDB.open(dbName);
idb.onerror = (event) => {
reject("Error in opening IndexedDB!");
@@ -6021,45 +6031,57 @@
myPubKey = floCrypto.getPubKeyHex(myPrivKey)
myFloID = floCrypto.getFloIDfromPubkeyHex(myPubKey)
- initIndexedDBforSupernode().then(result => {
+ initIndexedDBforSupernodeConfig().then(result => {
console.log(result)
readSupernodeListFromAPI().then(result => {
console.log(result)
floSupernode.kBucket.launch().then(result => {
console.log(result)
if (myFloID in floGlobals.supernodes) {
- serverPwd = prompt("Enter Server Pass!")
- setInterval(refreshBlockchainData, 3600000);
- floSupernode.initSupernode(serverPwd, myFloID)
- .then(result => console.log(result))
- .catch(error => console.log(error))
+ initIndexedDBforSupernodeDataStorage(myFloID).then(result => {
+ console.log(result)
+ serverPwd = prompt("Enter Server Pass!")
+ setInterval(refreshBlockchainData, 3600000);
+ floSupernode.initSupernode(serverPwd, myFloID)
+ .then(result => console.log(result))
+ .catch(error => console.log(error))
+ })
}
})
})
}).catch(error => console.log(error))
}
- function initIndexedDBforSupernode(){
+ function initIndexedDBforSupernodeConfig(){
return new Promise((resolve, reject) => {
- var IndexesList = ["senderID","receiverID","pubKey","message","sign","application","type","comment"];
- var primaryKey = "vectorClock";
var storageList = floGlobals.storageList;
- var obj = {
+ var snObj = {
lastTx:{},
+ config:{},
supernodes:{
indexes:{ uri:null, pubKey:null }
}
}
+ compactIDB.setDefaultDB("SupernodeConfig")
+ compactIDB.initDB("SupernodeConfig", snObj)
+ .then(result => resolve("Initiated supernode configuration IDB"))
+ .catch(error => reject(error));
+ })
+ }
+
+ function initIndexedDBforSupernodeDataStorage(floID){
+ return new Promise((resolve, reject) => {
+ var indexesList = ["senderID","receiverID","pubKey","message","sign","application","type","comment"];
+ var idbObj = {}
for(var i=0;i resolve("Initiated supernode storage"))
+ compactIDB.initDB(`SN_${floID}`, idbObj)
+ .then(result => resolve("Initiated supernode storage IDB for "+floID))
.catch(error => reject(error));
})
}
@@ -6083,11 +6105,16 @@
compactIDB.removeData("supernodes",sn);
for(sn in content.addNodes)
compactIDB.writeData("supernodes",content.addNodes[sn],sn);
+ for(c in content.config)
+ compactIDB.writeData("config",content.config[c],c)
}
compactIDB.writeData("lastTx",result.totalTxs,floGlobals.adminID);
compactIDB.readAllData("supernodes").then(result => {
floGlobals.supernodes = result
- resolve("Read supernode from blockchain");
+ compactIDB.readAllData("config").then(result => {
+ floGlobals.config = result
+ resolve("Read supernode from blockchain");
+ })
})
})
}).catch(error => reject(error))