From 369152494d455724b5369b5f08a61dce20f9e1e4 Mon Sep 17 00:00:00 2001 From: Baipyrus Date: Sat, 22 Apr 2023 20:23:38 +0200 Subject: [PATCH] implemented EventSource instead of regular update requests and minor clean up --- js/commands.js | 22 ++++++++++++++++++---- js/main.js | 2 +- js/networking.js | 44 +++----------------------------------------- 3 files changed, 22 insertions(+), 46 deletions(-) diff --git a/js/commands.js b/js/commands.js index 20aef28..ff609cc 100644 --- a/js/commands.js +++ b/js/commands.js @@ -82,7 +82,8 @@ function cmd_help() { " -msg Open a direct chat to the provided user/-s by name
" + " -ls List all connected users by name and id
" + " -ping Ping the host to request two-way-delay
" + - " -chat Open a group chat to the provided chat/-s by name"; + " -chat Open a group chat to the provided chat/-s by name
" + + " -logout Disconnect from the host. This deletes your user"; } // Display 'about' message @@ -201,7 +202,19 @@ function messagingIniti(mode, name) { pretext.current = `Chat (${name})> `; // Set chat mode to direct messages and start pulling chatMode = `${mode} ${name}`; - userData.chatPull = setInterval(getChatMessages, 500); + + const ownName = window.localStorage.getItem("name"); + const id = window.localStorage.getItem("id"); + const encode = encodeURIComponent(`${ownName}#${id}`); + userData.chat = new EventSource(`/getChat?full=${encode}`); + + userData.chat.onmessage = (event) => { + const data = JSON.parse(event.data); + outputText({ + preNext: `${data.from}: `, + output: data.message + }); + } } // Initialize direct chat @@ -222,10 +235,11 @@ function cmd_exit(error) { pretext.current = pretext.original; // Do individual resets switch (level) { - // case "chat": + case "chat": case "msg": // Stop chat pulling - clearInterval(userData.chatPull); + userData.chat.close(); + userData.chat = null; break; } diff --git a/js/main.js b/js/main.js index b741472..a2a4d53 100644 --- a/js/main.js +++ b/js/main.js @@ -33,7 +33,7 @@ textIn.oninput = () => { textIn.value = ""; updateCursor(); }; -// Auto focus on start +// Autofocus on start textIn.focus(); // Key Listener diff --git a/js/networking.js b/js/networking.js index 630062f..bb50631 100644 --- a/js/networking.js +++ b/js/networking.js @@ -4,7 +4,7 @@ const pretext = { current: "root@baipyr.us:~# " }; -const userData = { history: [], chatPull: null }; +const userData = { history: [], chat: null }; let chatMode = "default", activityNotify; @@ -155,41 +155,6 @@ function sendNickname(name) { }); } -// Pull incoming chat messages -function getChatMessages() { - fetch('/getChat', { - method: 'POST', - headers: { - 'Accept': 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - from: chatMode.split(' ')[1].split(','), - name: window.localStorage.getItem("name"), - id: window.localStorage.getItem("id") - }) - }).then(res => { - // Incoming messages - if (res.status === 200) - return res.json(); - // No new messages - else if (res.status === 204) - return; - cmd_exit("Error occurred while fetching messages!"); - }).then(res => { - // No messages or invalid status code - if (res === undefined) - return; - // Output all messages by user - for (const user in res) - for (const msg of res[user]) - outputText({ - preNext: `${user}: `, - output: msg - }); - }); -} - // Send a direct message, do not look at response function directMessage(names, message) { fetch('/message', { @@ -248,17 +213,14 @@ function requestUsernames() { function requestPing() { const startTime = new Date(); fetch('/ping', { - method: 'GET', - headers: { - 'Accept': 'application/json', - } + method: 'GET' }).then(res => { if (res.status !== 200) return; // Output measured ping time const diff = new Date() - startTime; const output = `Host responded after ${diff}ms.`; - outputText({output}) + outputText({output}); }); }