diff --git a/frontend/Web/communication.js b/frontend/Web/communication.js new file mode 100644 index 0000000..350e62f --- /dev/null +++ b/frontend/Web/communication.js @@ -0,0 +1,83 @@ +function generateRandomString(length) { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const charactersLength = characters.length; + + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + + return result; +} +const socket = io(); +let __raw_response=""; +let operation_count=localStorage.getItem("operation_count"); +let session_token=localStorage.getItem("session_token"); +let outhentication_key=localStorage.getItem("outhentication_key"); +socket.on('response', (msg) => { + __raw_response=msg; +}); +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} +async function RawRequest(raw_request){ + socket.emit('request', raw_request); + while(true) + { + if(__raw_response!=""){ + let response=__raw_response; + __raw_response=""; + return response; + } + await sleep(100); + } +} +async function ShutDownWholeSystem() +{ + await RawRequest("#ShutDownSystem "+session_token+" "+operation_count+" "+outhentication_key); + return "You Guess"; +} +async function Request(req) +{ + operation_count=localStorage.getItem("operation_count"); + session_token=localStorage.getItem("session_token"); + outhentication_key=localStorage.getItem("outhentication_key"); + operation_count++; + localStorage.setItem("operation_count", operation_count); + let raw_request="#Request "+session_token+" "+operation_count+" "+outhentication_key+"\n"+req; + let raw_response=await RawRequest(raw_request); + console.log("get raw_response:"+raw_response); + let line_numbers_of_res=parseInt(raw_response.split('\n')[0].split(' ')[2]); + if(line_numbers_of_res==-1) + { + console.log("Session expired"); + let tmp_channel=generateRandomString(10); + let ret=await RawRequest('#OpenSession '+tmp_channel); + operation_count=0; + session_token=ret.split('\n')[1].split(' ')[0]; + outhentication_key=ret.split('\n')[1].split(' ')[1]; + localStorage.setItem("session_token", session_token); + localStorage.setItem("outhentication_key", outhentication_key); + localStorage.setItem("operation_count", operation_count); + return await Request(req); + } + let response=""; + if(line_numbers_of_res>=1) response=raw_response.split('\n')[1]; + for(let i=0;i { + if(session_token==null||outhentication_key==null||operation_count==null){ + let tmp_channel=generateRandomString(10); + let ret=await RawRequest('#OpenSession '+tmp_channel); + operation_count=0; + session_token=ret.split('\n')[1].split(' ')[0]; + outhentication_key=ret.split('\n')[1].split(' ')[1]; + localStorage.setItem("session_token", session_token); + localStorage.setItem("outhentication_key", outhentication_key); + localStorage.setItem("operation_count", operation_count); + } +})(); \ No newline at end of file diff --git a/frontend/Web/index.html b/frontend/Web/index.html index 0492f3b..becd4c7 100644 --- a/frontend/Web/index.html +++ b/frontend/Web/index.html @@ -8,90 +8,6 @@ - + \ No newline at end of file diff --git a/frontend/Web/index.js b/frontend/Web/index.js index 3f6e4b4..f147c4b 100644 --- a/frontend/Web/index.js +++ b/frontend/Web/index.js @@ -103,6 +103,9 @@ backend.stdout.on('data', (data) => { app.get('/', (req, res) => { res.sendFile(join(__dirname, 'index.html')); }); +app.get('/communication.js', (req, res) => { + res.sendFile(join(__dirname, 'communication.js')); +}); io.on('connection', async (socket) => { console.log('a user connected');