floCloudAPI: moving the reactor events to util and Promisifying all canon operations

This commit is contained in:
sairajzero 2019-12-19 21:42:02 +05:30
parent afa8714d0e
commit e42a972f12

View File

@ -6835,6 +6835,61 @@
/* FLO Cloud operations to send/request application data*/ /* FLO Cloud operations to send/request application data*/
const floCloudAPI = { const floCloudAPI = {
util:{
resetData: function(dataSet){
try{
dataSet = JSON.parse(dataSet);
console.log(dataSet)
for(vc in dataSet){
var message = dataSet[vc].message;
if(message.reset){
floGlobals.appObjects[message.object] = message.reset
floGlobals.vectorClock[message.object] = vc
compactIDB.writeData("appObjects", floGlobals.appObjects[message.object], message.object)
compactIDB.writeData("vectorClocks", vc, message.object)
}
}
}catch(error){
console.error(error)
}
},
updateData: function(dataSet){
try{
dataSet = JSON.parse(dataSet);
console.log(dataSet)
for(vc in dataSet){
var message = dataSet[vc].message;
if(message.diff){
floGlobals.appObjects[message.object] = mergeDifference(floGlobals.appObjects[message.object], message.diff)
compactIDB.writeData("appObjects",floGlobals.appObjects[message.object], message.object)
}
floGlobals.vectorClock[message.object] = vc
compactIDB.writeData("vectorClocks", vc, message.object)
}
}catch(error){
console.error(error)
}
},
storeGeneralData: function(event){
try{
dataSet = JSON.parse(event.dataSet);
console.log(dataSet)
if(!Array.isArray(floGlobals.generalData[event.filterStr]))
floGlobals.generalData[event.filterStr] = []
for(vc in dataSet){
floGlobals.generalData[event.filterStr].push({sender: dataSet[vc].senderID, vectorClock: vc, message: dataSet[vc].message})
compactIDB.writeData("generalData", floGlobals.generalData[event.filterStr], event.filterStr)
floGlobals.generalVC[event.filterStr] = vc
compactIDB.writeData("generalVC", vc, event.filterStr)
}
}catch(error){
console.error(error)
}
}
},
//send Any message to supernode cloud storage //send Any message to supernode cloud storage
sendApplicationData: function(message, type, options = {}){ sendApplicationData: function(message, type, options = {}){
return new Promise((resolve,reject) => { return new Promise((resolve,reject) => {
@ -6876,23 +6931,29 @@
//send General Data //send General Data
sendGeneralData: function(message, type, options = {}){ sendGeneralData: function(message, type, options = {}){
return new Promise((resolve,reject) => {
this.sendApplicationData(message, type, options) this.sendApplicationData(message, type, options)
.then(result => reactor.dispatchEvent('logHandle',result)) .then(result => resolve(result))
.catch(error => reactor.dispatchEvent('errorHandle',error)) .catch(error => reject(error))
})
}, },
//request General Data //request General Data
requestGeneralData: function(type, options = {}){ requestGeneralData: function(type, options = {}){
return new Promise((resolve,reject) => {
var filterStr = JSON.stringify({application: options.application || floGlobals.application, type: type, comment: options.comment}) var filterStr = JSON.stringify({application: options.application || floGlobals.application, type: type, comment: options.comment})
options.type = type options.type = type
options.lowerVectorClock = options.lowerVectorClock || floGlobals.generalVC[filterStr] + 1 options.lowerVectorClock = options.lowerVectorClock || floGlobals.generalVC[filterStr] + 1
this.requestApplicationData(options) this.requestApplicationData(options).then(dataSet => {
.then(dataSet => reactor.dispatchEvent("storeGeneralData", {filterStr: filterStr, dataSet:dataSet})) this.util.storeGeneralData(filterStr, dataSet)
.catch(error => reactor.dispatchEvent('errorHandle',error)) resolve('General Data Updated')
}).catch(error => reject(error))
})
}, },
//request an object data from supernode cloud //request an object data from supernode cloud
requestObjectData: function(objectName, options = {}){ requestObjectData: function(objectName, options = {}){
return new Promise((resolve,reject) => {
var request = { var request = {
receiverID: options.receiverID || floGlobals.adminID, receiverID: options.receiverID || floGlobals.adminID,
senderIDs: (options.senderIDs === false) ? false: options.senderIDs || floGlobals.subAdmins, senderIDs: (options.senderIDs === false) ? false: options.senderIDs || floGlobals.subAdmins,
@ -6902,18 +6963,22 @@
lowerVectorClock: floGlobals.vectorClock[objectName]+1, lowerVectorClock: floGlobals.vectorClock[objectName]+1,
mostRecent: true mostRecent: true
} }
floSupernode.requestData(JSON.stringify(request),request.receiverID).then(resetData => { floSupernode.requestData(JSON.stringify(request),request.receiverID).then(dataSet => {
reactor.dispatchEvent('resetData', resetData); this.util.resetData(filterStr, dataSet)
request.type = `${objectName}@Update` request.type = `${objectName}@Update`
request.lowerVectorClock = floGlobals.vectorClock[objectName]+1 request.lowerVectorClock = floGlobals.vectorClock[objectName]+1
request.mostRecent = false request.mostRecent = false
floSupernode.requestData(JSON.stringify(request), request.receiverID) floSupernode.requestData(JSON.stringify(request), request.receiverID).then(dataSet => {
.then(updateData => reactor.dispatchEvent('updateData', updateData)) this.util.updateData(filterStr, dataSet)
}).catch(error => reactor.dispatchEvent('errorHandle', error)) resolve('Object Data Updated')
}).catch(error => reject(error))
}).catch(error => reject(error))
})
}, },
//reset or initialize an object and send it to cloud //reset or initialize an object and send it to cloud
resetObjectData: function(newObject, objectName, options = {}){ resetObjectData: function(newObject, objectName, options = {}){
return new Promise((resolve,reject) => {
var message = { var message = {
division: options.division || floGlobals.division, division: options.division || floGlobals.division,
object: objectName, object: objectName,
@ -6921,12 +6986,14 @@
reset: newObject reset: newObject
} }
this.sendApplicationData(message, `${objectName}@Reset`, options) this.sendApplicationData(message, `${objectName}@Reset`, options)
.then(result => reactor.dispatchEvent('logHandle',result)) .then(result => resolve(result))
.catch(error => reactor.dispatchEvent('errorHandle',error)) .catch(error => reject(error))
})
}, },
//update the diff and send it to cloud //update the diff and send it to cloud
updateObjectData: function(oldObject, newObject, objectName, options = {}){ updateObjectData: function(oldObject, newObject, objectName, options = {}){
return new Promise((resolve,reject) => {
var message = { var message = {
division: options.division || floGlobals.division, division: options.division || floGlobals.division,
object: objectName, object: objectName,
@ -6934,79 +7001,11 @@
diff: findDifference(oldObject, newObject) diff: findDifference(oldObject, newObject)
} }
this.sendApplicationData(message, `${objectName}@Update`, options) this.sendApplicationData(message, `${objectName}@Update`, options)
.then(result => reactor.dispatchEvent('logHandle',result)) .then(result => resolve(result))
.catch(error => reactor.dispatchEvent('errorHandle',error)) .catch(error => reject(error))
})
} }
} }
reactor.registerEvent('resetData');
reactor.addEventListener('resetData', function(dataSet){
try{
dataSet = JSON.parse(dataSet);
console.log(dataSet)
for(vc in dataSet){
//if(floGlobals.subAdmins.includes(dataSet[vc].senderID)){
var message = dataSet[vc].message;
if(message.reset){
floGlobals.appObjects[message.object] = message.reset
floGlobals.vectorClock[message.object] = vc
compactIDB.writeData("appObjects", floGlobals.appObjects[message.object], message.object)
compactIDB.writeData("vectorClocks", vc, message.object)
}
//}
}
}catch(error){
console.log(error)
}
});
reactor.registerEvent('updateData');
reactor.addEventListener('updateData', function(dataSet){
try{
dataSet = JSON.parse(dataSet);
console.log(dataSet)
for(vc in dataSet){
//if(floGlobals.subAdmins.includes(dataSet[vc].senderID)){
var message = dataSet[vc].message;
if(message.diff){
floGlobals.appObjects[message.object] = mergeDifference(floGlobals.appObjects[message.object], message.diff)
compactIDB.writeData("appObjects",floGlobals.appObjects[message.object], message.object)
}
//}
floGlobals.vectorClock[message.object] = vc
compactIDB.writeData("vectorClocks", vc, message.object)
}
}catch(error){
console.log(error)
}
});
reactor.registerEvent('storeGeneralData');
reactor.addEventListener('storeGeneralData', function(event){
try{
dataSet = JSON.parse(event.dataSet);
console.log(dataSet)
if(!Array.isArray(floGlobals.generalData[event.filterStr]))
floGlobals.generalData[event.filterStr] = []
for(vc in dataSet){
floGlobals.generalData[event.filterStr].push({sender: dataSet[vc].senderID, vectorClock: vc, message: dataSet[vc].message})
compactIDB.writeData("generalData", floGlobals.generalData[event.filterStr], event.filterStr)
floGlobals.generalVC[event.filterStr] = vc
compactIDB.writeData("generalVC", vc, event.filterStr)
}
}catch(error){
console.log(error)
}
});
reactor.registerEvent('errorHandle');
reactor.addEventListener('errorHandle', function(event){
console.log(event)
});
reactor.registerEvent('logHandle');
reactor.addEventListener('logHandle', function(event){
console.log(event)
});
</script> </script>
</body> </body>
</html> </html>