From 522bcc7ebc421f2d0010062b8c82745475e19fa1 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Wed, 7 May 2025 18:10:21 +0200 Subject: [PATCH] made socket logic better --- public/js/index.js | 4 +++- src/routes/answers.js | 15 ++++++++++++--- src/socket.js | 9 +++------ src/utils/process_data.js | 20 ++++++-------------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/public/js/index.js b/public/js/index.js index 5311801..8dfbdf4 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -19,12 +19,14 @@ document.getElementById("uploadBtn").onclick = async () => { form.append("file", file); const res = await fetch(`/answers/submit/${type}`, { + headers: { + "X-Socket-Id": socket.id, + }, method: "POST", body: form, }); const json = await res.json(); - console.log(json); const statusEl = document.getElementById("status"); if (res.ok) { statusEl.style.color = "green"; diff --git a/src/routes/answers.js b/src/routes/answers.js index 6b032ff..dc8e7c0 100644 --- a/src/routes/answers.js +++ b/src/routes/answers.js @@ -1,7 +1,6 @@ import { Router } from "express"; import multer from "multer"; import { InvalidJsonFormatError } from "../utils/errors.js"; -import { io as socket } from "../socket.js"; import { evaluate_comments } from "../utils/process_data.js"; const router = Router(); @@ -74,8 +73,18 @@ router.post("/submit/comments", upload.single("file"), async (req, res) => { throw error; } - socket.emit("started-processing"); - evaluate_comments(validatedData); + const io = req.app.get("io"); + const header = req.get("X-Socket-Id"); + const socketId = header && header.trim(); + if (socketId && io.sockets.sockets.has(socketId)) { + io.to(socketId).emit("started-processing"); + } + + evaluate_comments(validatedData, (percent) => { + if (!(socketId && io.sockets.sockets.has(socketId))) return; + + io.to(socketId).emit("progress", { percent }); + }); res.status(200).json({ message: "Answer submitted successfully", diff --git a/src/socket.js b/src/socket.js index 49e580a..e09c0ef 100644 --- a/src/socket.js +++ b/src/socket.js @@ -5,13 +5,10 @@ function onConnect(socket) { console.log("Websocket client connected:", socket.id); } -let io; - -function createSocketServer(app) { +export function createSocketServer(app) { const httpServer = http.createServer(app); - io = new Server(httpServer); + const io = new Server(httpServer); io.on("connection", onConnect); + app.set("io", io); return httpServer; } - -export { createSocketServer, io }; diff --git a/src/utils/process_data.js b/src/utils/process_data.js index 5ce7dc4..9b5fef8 100644 --- a/src/utils/process_data.js +++ b/src/utils/process_data.js @@ -1,29 +1,21 @@ -import { io as socket } from "../socket.js"; - -export const evaluate_comments = async (answers) => { +export const evaluate_comments = async (answers, percent_cb) => { const total = Object.keys(answers).length; let i = 0; for (const [key, value] of Object.entries(answers)) { console.log(`Processing ${key}: ${value}...`); - await new Promise((res) => setTimeout(res, 500)); + await new Promise((res) => setTimeout(res, 1000)); console.log("Done"); - const data = { - percent: Math.floor((++i / total) * 100), - }; - socket.emit("progress", data); + percent_cb(Math.floor((++i / total) * 100)); } }; -export const evaluate_refinement = async (answers) => { +export const evaluate_refinement = async (answers, percent_cb) => { const total = Object.keys(answers).length; let i = 0; for (const [key, value] of Object.entries(answers)) { console.log(`Processing ${key}: ${value}...`); - await new Promise((res) => setTimeout(res, 500)); + await new Promise((res) => setTimeout(res, 1000)); console.log("Done"); - const data = { - percent: Math.floor((++i / total) * 100), - }; - socket.emit("progress", data); + percent_cb(Math.floor((++i / total) * 100)); } };