Compare commits
No commits in common. "5aa0bbe1bb090384e9612600baca209db7ced9ae" and "149ada4c9b9920975d32ba2ec680b77feadf5d63" have entirely different histories.
5aa0bbe1bb
...
149ada4c9b
35
README.md
35
README.md
@ -1,37 +1,2 @@
|
|||||||
# webAppServer
|
# webAppServer
|
||||||
This server is used to get the appObjects and generalData for the webApp clients without the need for blockchain or supernode cloud
|
This server is used to get the appObjects and generalData for the webApp clients without the need for blockchain or supernode cloud
|
||||||
|
|
||||||
## Instructions
|
|
||||||
|
|
||||||
### To run the server
|
|
||||||
1. Clone/download this repository
|
|
||||||
2. Add a strong `<server_password>` in `.config` file
|
|
||||||
3. Add the `<port>` in `.config` file for the server to run
|
|
||||||
4. open terminal in the directory and run `./start_webAppServer.sh`
|
|
||||||
|
|
||||||
### To use in client side
|
|
||||||
1. copy the floGlobals and webAppClient script tag to the webApp page
|
|
||||||
2. Add the server's `<website_url/ip_addr>:<port>` in floGlobals script tag
|
|
||||||
|
|
||||||
### Properties
|
|
||||||
|
|
||||||
#### requestGeneralData
|
|
||||||
webAppClient.requestGeneralData(type, vectorClock = '0')
|
|
||||||
Requests the generalData from webAppServer
|
|
||||||
* type: type of the message
|
|
||||||
* vectorClock: vectorClock after which the message should be requested (can be used with Date.now()) (default = '0')
|
|
||||||
* Returns an object (set of generalData)
|
|
||||||
|
|
||||||
#### requestObjectData
|
|
||||||
webAppClient.requestObjectData(keyPath)
|
|
||||||
Requests the objectData/appObjects from webAppServer
|
|
||||||
* path: (an Array) path of the required object (eg. \['Sample', Property1, property2..]
|
|
||||||
* Returns an Object/Array (requested path)
|
|
||||||
|
|
||||||
#### requestSubAdminList
|
|
||||||
webAppClient.requestSubAdminList()
|
|
||||||
Requests the subAdmin list of the application from webAppServer
|
|
||||||
* Returns an Array (of subAdmins)
|
|
||||||
|
|
||||||
### Architecture Diagram
|
|
||||||

|
|
||||||
|
|||||||
@ -14,11 +14,29 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
TEST_MODE (use console)
|
TEST_MODE (use console)
|
||||||
<script id="webAppClient">
|
<script id="webappClient">
|
||||||
//Add this to the client script to request data from floWebappServer
|
//Add this to the client script to request data from floWebappServer
|
||||||
const webAppClient = {
|
const webappClient = {
|
||||||
util: {
|
util: {
|
||||||
|
sendData(data) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
||||||
|
websocket.onmessage = (evt => {
|
||||||
|
if (evt.data == '$+') {
|
||||||
|
websocket.send(data);
|
||||||
|
resolve(`Data sent to webApp`);
|
||||||
|
} else if (evt.data == '$-')
|
||||||
|
reject(`webApp not available`)
|
||||||
|
else
|
||||||
|
reject(evt.data)
|
||||||
|
websocket.close();
|
||||||
|
})
|
||||||
|
websocket.onerror = (evt) => {
|
||||||
|
reject(`webApp server not found`)
|
||||||
|
};
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
requestData(request = []) {
|
requestData(request = []) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
||||||
@ -40,6 +58,24 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
sendGeneralData: function (message, type, options = {}) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var data = {
|
||||||
|
senderID: myFloID,
|
||||||
|
receiverID: options.receiverID || floGlobals.adminID,
|
||||||
|
pubKey: myPubKey,
|
||||||
|
message: message,
|
||||||
|
sign: floCrypto.signData(JSON.stringify(message), myPrivKey),
|
||||||
|
application: options.application || floGlobals.application,
|
||||||
|
type: type,
|
||||||
|
comment: options.comment || ""
|
||||||
|
}
|
||||||
|
this.util.sendData(JSON.stringify(data), data.receiverID)
|
||||||
|
.then(result => resolve(result))
|
||||||
|
.catch(error => reject(error))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
requestGeneralData: function (type, vectorClock = '0') {
|
requestGeneralData: function (type, vectorClock = '0') {
|
||||||
if (typeof vectorClock !== 'string')
|
if (typeof vectorClock !== 'string')
|
||||||
vectorClock.toString()
|
vectorClock.toString()
|
||||||
@ -65,18 +101,6 @@
|
|||||||
reject(result[1])
|
reject(result[1])
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
})
|
})
|
||||||
},
|
|
||||||
|
|
||||||
requestSubAdminList: function(){
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
this.util.requestData([floGlobals.application, 'subAdmins']).then(
|
|
||||||
result => {
|
|
||||||
if (result[0])
|
|
||||||
resolve(result[1])
|
|
||||||
else
|
|
||||||
reject(result[1])
|
|
||||||
}).catch(error => reject(error))
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<title>FLO webApp Server</title>
|
<title>FLO webApp Server</title>
|
||||||
<script id="onLoadStartUp">
|
<script id="onLoadStartUp">
|
||||||
function onLoadStartUp() {
|
function onLoadStartUp() {
|
||||||
const apps = ['TEDxKanke']
|
const apps = ['TEST_MODE']
|
||||||
webAppServer.setServeAppList(apps)
|
webAppServer.setServeAppList(apps)
|
||||||
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
|
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
|
||||||
webAppServer.initWebSocket()
|
webAppServer.initWebSocket()
|
||||||
@ -81,6 +81,20 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
writeData: function (obsName, data, key = false, dbName = this.dbName) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.openDB(dbName).then(db => {
|
||||||
|
var obs = db.transaction(obsName, "readwrite").objectStore(obsName);
|
||||||
|
let writeReq = (key ? obs.put(data, key) : obs.put(data));
|
||||||
|
writeReq.onsuccess = (evt) => resolve(`Write data Successful`);
|
||||||
|
writeReq.onerror = (evt) => reject(
|
||||||
|
`Write data unsuccessful [${evt.target.error.name}] ${evt.target.error.message}`
|
||||||
|
);
|
||||||
|
db.close();
|
||||||
|
}).catch(error => reject(error));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
addData: function (obsName, data, key = false, dbName = this.dbName) {
|
addData: function (obsName, data, key = false, dbName = this.dbName) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.openDB(dbName).then(db => {
|
this.openDB(dbName).then(db => {
|
||||||
@ -180,11 +194,11 @@
|
|||||||
return pos
|
return pos
|
||||||
},
|
},
|
||||||
|
|
||||||
getNextGeneralData: function (generalData, vectorClock) {
|
getNextGeneralData: function (generalData, filterStr, vectorClock) {
|
||||||
var filteredResult = []
|
var filteredResult = []
|
||||||
for (var i = 0; i < generalData.length; i++)
|
for (var i = 0; i < generalData[filterStr].length; i++)
|
||||||
if (generalData[i].vectorClock > vectorClock)
|
if (generalData[filter][i].vectorClock > vectorClock)
|
||||||
filteredResult.push(generalData[i])
|
filteredResult.push(generalData[filter][i])
|
||||||
return filteredResult
|
return filteredResult
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -235,23 +249,20 @@
|
|||||||
|
|
||||||
if(request[1] == "appObjects"){
|
if(request[1] == "appObjects"){
|
||||||
compactIDB.readData(request[1], request[2], request[0]).then(result => {
|
compactIDB.readData(request[1], request[2], request[0]).then(result => {
|
||||||
var response = [true, this.util.objectDataFetch(result, request.slice(3))]
|
var response = [true, this.util.objectDataFetch(result, request.slice(2))]
|
||||||
console.log(request, response)
|
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if (request[1] == "generalData"){
|
else if (request[1] == "generalData"){
|
||||||
var filterStr = this.util.getFilterString(request[0], request[2])
|
var filterStr = this.util.getFilterString(request[0], request[2])
|
||||||
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
|
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
|
||||||
var response = [true, this.util.getNextGeneralData(result, request[3])]
|
var response = [true, this.util.getNextGeneralData(result, filterStr, request[3])]
|
||||||
console.log(request, response)
|
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if(request[1] == "subAdmins"){
|
else if(request[1] == "subAdmins"){
|
||||||
compactIDB.readAllData(request[1], request[0]).then(result => {
|
compactIDB.readAllData(request[1], request[0]).then(result => {
|
||||||
var response = [true, Object.keys(result)]
|
var response = [true, Object.keys(result)]
|
||||||
console.log(request, response)
|
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -261,6 +272,12 @@
|
|||||||
response = [false, error.message]
|
response = [false, error.message]
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
var data = JSON.parse(evt.data)
|
||||||
|
if (this.serveAppList.includes(data.application))
|
||||||
|
floSupernode.sendData(JSON.stringify(data), data.receiverID)
|
||||||
|
.then(result => resolve(result))
|
||||||
|
.catch(error => reject(error))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.webSocket.onerror = (evt) => {
|
this.webSocket.onerror = (evt) => {
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
Loading…
Reference in New Issue
Block a user