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*/
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
sendApplicationData: function(message, type, options = {}){
return new Promise((resolve,reject) => {
@ -6876,137 +6931,81 @@
//send General Data
sendGeneralData: function(message, type, options = {}){
this.sendApplicationData(message, type, options)
.then(result => reactor.dispatchEvent('logHandle',result))
.catch(error => reactor.dispatchEvent('errorHandle',error))
return new Promise((resolve,reject) => {
this.sendApplicationData(message, type, options)
.then(result => resolve(result))
.catch(error => reject(error))
})
},
//request General Data
requestGeneralData: function(type, options = {}){
var filterStr = JSON.stringify({application: options.application || floGlobals.application, type: type, comment: options.comment})
options.type = type
options.lowerVectorClock = options.lowerVectorClock || floGlobals.generalVC[filterStr] + 1
this.requestApplicationData(options)
.then(dataSet => reactor.dispatchEvent("storeGeneralData", {filterStr: filterStr, dataSet:dataSet}))
.catch(error => reactor.dispatchEvent('errorHandle',error))
return new Promise((resolve,reject) => {
var filterStr = JSON.stringify({application: options.application || floGlobals.application, type: type, comment: options.comment})
options.type = type
options.lowerVectorClock = options.lowerVectorClock || floGlobals.generalVC[filterStr] + 1
this.requestApplicationData(options).then(dataSet => {
this.util.storeGeneralData(filterStr, dataSet)
resolve('General Data Updated')
}).catch(error => reject(error))
})
},
//request an object data from supernode cloud
requestObjectData: function(objectName, options = {}){
var request = {
receiverID: options.receiverID || floGlobals.adminID,
senderIDs: (options.senderIDs === false) ? false: options.senderIDs || floGlobals.subAdmins,
application: options.application || floGlobals.application,
comment: options.comment,
type: `${objectName}@Reset`,
lowerVectorClock: floGlobals.vectorClock[objectName]+1,
mostRecent: true
}
floSupernode.requestData(JSON.stringify(request),request.receiverID).then(resetData => {
reactor.dispatchEvent('resetData', resetData);
request.type = `${objectName}@Update`
request.lowerVectorClock = floGlobals.vectorClock[objectName]+1
request.mostRecent = false
floSupernode.requestData(JSON.stringify(request), request.receiverID)
.then(updateData => reactor.dispatchEvent('updateData', updateData))
}).catch(error => reactor.dispatchEvent('errorHandle', error))
return new Promise((resolve,reject) => {
var request = {
receiverID: options.receiverID || floGlobals.adminID,
senderIDs: (options.senderIDs === false) ? false: options.senderIDs || floGlobals.subAdmins,
application: options.application || floGlobals.application,
comment: options.comment,
type: `${objectName}@Reset`,
lowerVectorClock: floGlobals.vectorClock[objectName]+1,
mostRecent: true
}
floSupernode.requestData(JSON.stringify(request),request.receiverID).then(dataSet => {
this.util.resetData(filterStr, dataSet)
request.type = `${objectName}@Update`
request.lowerVectorClock = floGlobals.vectorClock[objectName]+1
request.mostRecent = false
floSupernode.requestData(JSON.stringify(request), request.receiverID).then(dataSet => {
this.util.updateData(filterStr, dataSet)
resolve('Object Data Updated')
}).catch(error => reject(error))
}).catch(error => reject(error))
})
},
//reset or initialize an object and send it to cloud
resetObjectData: function(newObject, objectName, options = {}){
var message = {
division: options.division || floGlobals.division,
object: objectName,
vectorClock: floGlobals.vectorClock[objectName],
reset: newObject
}
this.sendApplicationData(message, `${objectName}@Reset`, options)
.then(result => reactor.dispatchEvent('logHandle',result))
.catch(error => reactor.dispatchEvent('errorHandle',error))
return new Promise((resolve,reject) => {
var message = {
division: options.division || floGlobals.division,
object: objectName,
vectorClock: floGlobals.vectorClock[objectName],
reset: newObject
}
this.sendApplicationData(message, `${objectName}@Reset`, options)
.then(result => resolve(result))
.catch(error => reject(error))
})
},
//update the diff and send it to cloud
updateObjectData: function(oldObject, newObject, objectName, options = {}){
var message = {
division: options.division || floGlobals.division,
object: objectName,
vectorClock: floGlobals.vectorClock[objectName],
diff: findDifference(oldObject, newObject)
}
this.sendApplicationData(message, `${objectName}@Update`, options)
.then(result => reactor.dispatchEvent('logHandle',result))
.catch(error => reactor.dispatchEvent('errorHandle',error))
return new Promise((resolve,reject) => {
var message = {
division: options.division || floGlobals.division,
object: objectName,
vectorClock: floGlobals.vectorClock[objectName],
diff: findDifference(oldObject, newObject)
}
this.sendApplicationData(message, `${objectName}@Update`, options)
.then(result => resolve(result))
.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>
</body>
</html>