Compare commits

..

10 Commits

Author SHA1 Message Date
Sai Raj
5aa0bbe1bb
bug removed
- removed send functionality (as it required stdop)
2020-08-10 14:18:09 +05:30
Sai Raj
a014157bc9
bug removed
- removing send function
2020-08-10 14:14:58 +05:30
Sai Raj
b1b10733c8
Update README.md 2020-08-10 13:53:59 +05:30
Sai Raj
c8740941e4
Add files via upload 2020-08-10 13:52:17 +05:30
Vivek Teega
5f61e3afe8 bug fixes 2020-02-26 12:19:36 +00:00
Sai Raj
f6c75c4602
Update README.md 2020-02-26 17:10:04 +05:30
Sai Raj
a0aa525ccf
adding requestSubAdminList
requestSubAdminList can be used to request the subAdmin list of the app
2020-02-26 17:08:45 +05:30
Sai Raj
be2d4916f4
Update README.md 2020-02-26 16:03:36 +05:30
Sai Raj
f1857d8161
Update README.md 2020-02-26 16:01:09 +05:30
Sai Raj
c6639a899c
script name change
Changing script name to webAppClient
2020-02-26 15:48:47 +05:30
4 changed files with 60 additions and 66 deletions

View File

@ -1,2 +1,37 @@
# webAppServer
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
![webAppServer-Architecture.png](util/webAppServer-Architecture.png)

View File

@ -14,29 +14,11 @@
<body>
TEST_MODE (use console)
<script id="webappClient">
<script id="webAppClient">
//Add this to the client script to request data from floWebappServer
const webappClient = {
const webAppClient = {
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 = []) {
return new Promise((resolve, reject) => {
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
@ -58,24 +40,6 @@
}
},
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') {
if (typeof vectorClock !== 'string')
vectorClock.toString()
@ -101,6 +65,18 @@
reject(result[1])
}).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>

View File

@ -4,7 +4,7 @@
<title>FLO webApp Server</title>
<script id="onLoadStartUp">
function onLoadStartUp() {
const apps = ['TEST_MODE']
const apps = ['TEDxKanke']
webAppServer.setServeAppList(apps)
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
webAppServer.initWebSocket()
@ -81,20 +81,6 @@
});
},
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) {
return new Promise((resolve, reject) => {
this.openDB(dbName).then(db => {
@ -194,11 +180,11 @@
return pos
},
getNextGeneralData: function (generalData, filterStr, vectorClock) {
getNextGeneralData: function (generalData, vectorClock) {
var filteredResult = []
for (var i = 0; i < generalData[filterStr].length; i++)
if (generalData[filter][i].vectorClock > vectorClock)
filteredResult.push(generalData[filter][i])
for (var i = 0; i < generalData.length; i++)
if (generalData[i].vectorClock > vectorClock)
filteredResult.push(generalData[i])
return filteredResult
},
@ -249,20 +235,23 @@
if(request[1] == "appObjects"){
compactIDB.readData(request[1], request[2], request[0]).then(result => {
var response = [true, this.util.objectDataFetch(result, request.slice(2))]
var response = [true, this.util.objectDataFetch(result, request.slice(3))]
console.log(request, response)
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
})
}
else if (request[1] == "generalData"){
var filterStr = this.util.getFilterString(request[0], request[2])
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
var response = [true, this.util.getNextGeneralData(result, filterStr, request[3])]
var response = [true, this.util.getNextGeneralData(result, request[3])]
console.log(request, response)
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
})
}
else if(request[1] == "subAdmins"){
compactIDB.readAllData(request[1], request[0]).then(result => {
var response = [true, Object.keys(result)]
console.log(request, response)
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
})
}
@ -272,12 +261,6 @@
response = [false, error.message]
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) => {

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB